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;
UpdateActivationPolicy();
s_renderLoop = new RenderLoop();
s_renderTimer = new RenderTimer(); //TODO: use CVDisplayLink
s_renderTimer = new RenderTimer(60); //TODO: use CVDisplayLink
s_monoMacInitialized = true;
}
@ -136,4 +136,4 @@ namespace Avalonia
return builder.UseWindowingSubsystem(MonoMac.MonoMacPlatform.Initialize, "MonoMac");
}
}
}
}

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

@ -6,26 +6,23 @@ using MonoMac.Foundation;
namespace Avalonia.MonoMac
{
//TODO: Switch to using CVDisplayLink
public class RenderTimer : IRenderTimer
public class RenderTimer : DefaultRenderTimer
{
private readonly object _lock = new object();
private readonly IDisposable _timer;
public RenderTimer(int framesPerSecond) : base(framesPerSecond)
{
}
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