From e24a125ec0b4add42060e25935521e5557a644f7 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sat, 28 Jul 2018 00:49:13 -0500 Subject: [PATCH] Make MonoMac platform use DefaultRenderTimer infrastructure in its RenderTimer. --- src/OSX/Avalonia.MonoMac/MonoMacPlatform.cs | 4 ++-- src/OSX/Avalonia.MonoMac/RenderTimer.cs | 21 +++++++++------------ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/OSX/Avalonia.MonoMac/MonoMacPlatform.cs b/src/OSX/Avalonia.MonoMac/MonoMacPlatform.cs index 5dbf18b1de..5757413b7a 100644 --- a/src/OSX/Avalonia.MonoMac/MonoMacPlatform.cs +++ b/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"); } } -} \ No newline at end of file +} diff --git a/src/OSX/Avalonia.MonoMac/RenderTimer.cs b/src/OSX/Avalonia.MonoMac/RenderTimer.cs index 71f657b690..22ad2e81a2 100644 --- a/src/OSX/Avalonia.MonoMac/RenderTimer.cs +++ b/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 tick) { - _timer = AvaloniaLocator.Current.GetService().StartSystemTimer(new TimeSpan(0, 0, 0, 0, 1000 / 60), + return AvaloniaLocator.Current.GetService().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 Tick; } }