diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm index 859f77d405120eba90130fc9a84e301bf20e2ea6..16751c9a4400f43d3e6c31e8907a52604209e50b 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm @@ -635,7 +635,7 @@ static void SetEntryPoint(flutter::Settings* settings, NSString* entrypoint, NSS } - (void)initializeDisplays { - double refresh_rate = [[[DisplayLinkManager alloc] init] displayRefreshRate]; + double refresh_rate = [DisplayLinkManager displayRefreshRate]; auto display = flutter::Display(refresh_rate); _shell->OnDisplayUpdates(flutter::DisplayUpdateType::kStartup, {display}); } diff --git a/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.h b/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.h index cd34590e11db0db4cfab4932534d8fc4cf0728e3..e4b0aedac2055da397b1856209f55f1636391e8a 100644 --- a/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.h +++ b/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.h @@ -12,8 +12,6 @@ @interface DisplayLinkManager : NSObject -- (instancetype)init; - //------------------------------------------------------------------------------ /// @brief The display refresh rate used for reporting purposes. The engine does not care /// about this for frame scheduling. It is only used by tools for instrumentation. The @@ -23,7 +21,7 @@ /// /// @return The refresh rate in frames per second. /// -- (double)displayRefreshRate; ++ (double)displayRefreshRate; @end diff --git a/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm b/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm index df4e289fc436c1d43c37dd94d1b159f280d1ef95..d71ecd7d783df17a8ca5d79303f616814c8c09ef 100644 --- a/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm +++ b/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm @@ -91,26 +91,16 @@ void VsyncWaiterIOS::AwaitVSync() { @end -@implementation DisplayLinkManager { - fml::scoped_nsobject display_link_; -} - -- (instancetype)init { - self = [super init]; - - if (self) { - display_link_ = fml::scoped_nsobject { - [[CADisplayLink displayLinkWithTarget:self selector:@selector(onDisplayLink:)] retain] - }; - display_link_.get().paused = YES; - } +@implementation DisplayLinkManager - return self; -} - -- (double)displayRefreshRate { ++ (double)displayRefreshRate { if (@available(iOS 10.3, *)) { - auto preferredFPS = display_link_.get().preferredFramesPerSecond; // iOS 10.0 + fml::scoped_nsobject display_link = fml::scoped_nsobject { + [[CADisplayLink displayLinkWithTarget:[[DisplayLinkManager new] autorelease] + selector:@selector(onDisplayLink:)] retain] + }; + display_link.get().paused = YES; + auto preferredFPS = display_link.get().preferredFramesPerSecond; // iOS 10.0 // From Docs: // The default value for preferredFramesPerSecond is 0. When this value is 0, the preferred @@ -131,10 +121,4 @@ void VsyncWaiterIOS::AwaitVSync() { // no-op. } -- (void)dealloc { - [display_link_.get() invalidate]; - - [super dealloc]; -} - @end