Browse Source

Make MonoMac platform use DefaultRenderTimer infrastructure in its RenderTimer.

pull/1715/head
Jeremy Koritzinsky 8 years ago
parent
commit
e24a125ec0
  1. 4
      src/OSX/Avalonia.MonoMac/MonoMacPlatform.cs
  2. 21
      src/OSX/Avalonia.MonoMac/RenderTimer.cs

4
src/OSX/Avalonia.MonoMac/MonoMacPlatform.cs

@ -86,7 +86,7 @@ namespace Avalonia.MonoMac
App = NSApplication.SharedApplication; App = NSApplication.SharedApplication;
UpdateActivationPolicy(); UpdateActivationPolicy();
s_renderLoop = new RenderLoop(); s_renderLoop = new RenderLoop();
s_renderTimer = new RenderTimer(); //TODO: use CVDisplayLink s_renderTimer = new RenderTimer(60); //TODO: use CVDisplayLink
s_monoMacInitialized = true; s_monoMacInitialized = true;
} }
@ -136,4 +136,4 @@ namespace Avalonia
return builder.UseWindowingSubsystem(MonoMac.MonoMacPlatform.Initialize, "MonoMac"); return builder.UseWindowingSubsystem(MonoMac.MonoMacPlatform.Initialize, "MonoMac");
} }
} }
} }

21
src/OSX/Avalonia.MonoMac/RenderTimer.cs

@ -6,26 +6,23 @@ using MonoMac.Foundation;
namespace Avalonia.MonoMac namespace Avalonia.MonoMac
{ {
//TODO: Switch to using CVDisplayLink //TODO: Switch to using CVDisplayLink
public class RenderTimer : IRenderTimer public class RenderTimer : DefaultRenderTimer
{ {
private readonly object _lock = new object(); public RenderTimer(int framesPerSecond) : base(framesPerSecond)
private readonly IDisposable _timer; {
}
public RenderTimer() protected override IDisposable StartCore(Action<long> tick)
{ {
_timer = AvaloniaLocator.Current.GetService<IRuntimePlatform>().StartSystemTimer(new TimeSpan(0, 0, 0, 0, 1000 / 60), return AvaloniaLocator.Current.GetService<IRuntimePlatform>().StartSystemTimer(
TimeSpan.FromSeconds(1.0 / FramesPerSecond),
() => () =>
{ {
lock (_lock) using (new NSAutoreleasePool())
{ {
using (new NSAutoreleasePool()) tick?.Invoke(Environment.TickCount);
{
Tick?.Invoke(Environment.TickCount);
}
} }
}); });
} }
public event Action<long> Tick;
} }
} }

Loading…
Cancel
Save