8 #import "flutter/shell/platform/darwin/ios/InternalFlutterSwift/InternalFlutterSwift.h"
19 : VsyncWaiter(task_runners) {
20 auto vsyncCallback = ^(CFTimeInterval startTime, CFTimeInterval targetTime) {
22 CFTimeInterval delay = CACurrentMediaTime() - startTime;
28 fml::TimePoint start_time = fml::TimePoint::Now() - fml::TimeDelta::FromSecondsF(delay);
31 CFTimeInterval duration =
35 fml::TimePoint target_time = start_time + fml::TimeDelta::FromSecondsF(duration);
36 FireCallback(start_time, target_time,
true);
40 client_ = [[FlutterVSyncClient alloc]
41 initWithTaskRunner:uiTaskRunner
42 isVariableRefreshRateEnabled:FlutterDisplayLinkManager.maxRefreshRateEnabledOnIPhone
43 maxRefreshRate:FlutterDisplayLinkManager.displayRefreshRate
44 callback:vsyncCallback];
45 max_refresh_rate_ = FlutterDisplayLinkManager.displayRefreshRate;
54 void VsyncWaiterIOS::AwaitVSync() {
55 double new_max_refresh_rate = FlutterDisplayLinkManager.displayRefreshRate;
57 max_refresh_rate_ = new_max_refresh_rate;
58 [client_ setMaxRefreshRate:max_refresh_rate_];
65 return client_.refreshRate;
70 double roundedRefreshRate = round(1.0 / duration);
71 return 1.0 / roundedRefreshRate;
73 double fallbackRefreshRate = max_refresh_rate > 0.0 ? max_refresh_rate : 60.0;
74 return 1.0 / fallbackRefreshRate;
~VsyncWaiterIOS() override
static CFTimeInterval SnapDuration(CFTimeInterval duration, double max_refresh_rate)
double GetRefreshRate() const override
VsyncWaiterIOS(const flutter::TaskRunners &task_runners)
FLUTTER_ASSERT_ARC static const double kRefreshRateDiffToIgnore