1515#include " flutter/fml/memory/task_runner_checker.h"
1616#include " flutter/fml/trace_event.h"
1717
18+ @interface VSyncClient ()
19+ @property (nonatomic , assign , readonly ) double refreshRate;
20+ @end
21+
1822// When calculating refresh rate diffrence, anything within 0.1 fps is ignored.
1923const static double kRefreshRateDiffToIgnore = 0.1 ;
2024
2933 };
3034 client_ = [[VSyncClient alloc ] initWithTaskRunner: task_runners_.GetUITaskRunner ()
3135 callback: callback];
32- max_refresh_rate_ = [ DisplayLinkManager displayRefreshRate ] ;
36+ max_refresh_rate_ = DisplayLinkManager. displayRefreshRate ;
3337}
3438
3539VsyncWaiterIOS::~VsyncWaiterIOS () {
3943}
4044
4145void VsyncWaiterIOS::AwaitVSync () {
42- double new_max_refresh_rate = [ DisplayLinkManager displayRefreshRate ] ;
46+ double new_max_refresh_rate = DisplayLinkManager. displayRefreshRate ;
4347 if (fabs (new_max_refresh_rate - max_refresh_rate_) > kRefreshRateDiffToIgnore ) {
4448 max_refresh_rate_ = new_max_refresh_rate;
4549 [client_ setMaxRefreshRate: max_refresh_rate_];
4953
5054// |VariableRefreshRateReporter|
5155double VsyncWaiterIOS::GetRefreshRate () const {
52- return [ client_ getRefreshRate ] ;
56+ return client_. refreshRate ;
5357}
5458
5559} // namespace flutter
5660
5761@implementation VSyncClient {
58- flutter::VsyncWaiter::Callback callback_ ;
62+ flutter::VsyncWaiter::Callback _callback ;
5963 CADisplayLink * _displayLink;
60- double current_refresh_rate_;
6164}
6265
6366- (instancetype )initWithTaskRunner : (fml::RefPtr<fml::TaskRunner>)task_runner
6467 callback : (flutter::VsyncWaiter::Callback)callback {
6568 self = [super init ];
6669
6770 if (self) {
68- current_refresh_rate_ = [ DisplayLinkManager displayRefreshRate ] ;
71+ _refreshRate = DisplayLinkManager. displayRefreshRate ;
6972 _allowPauseAfterVsync = YES ;
70- callback_ = std::move (callback);
73+ _callback = std::move (callback);
7174 _displayLink = [CADisplayLink displayLinkWithTarget: self selector: @selector (onDisplayLink: )];
7275 _displayLink.paused = YES ;
7376
74- [self setMaxRefreshRate: [ DisplayLinkManager displayRefreshRate ] ];
77+ [self setMaxRefreshRate: DisplayLinkManager. displayRefreshRate];
7578
7679 // Strongly retain the the captured link until it is added to the runloop.
7780 CADisplayLink * localDisplayLink = _displayLink;
7881 task_runner->PostTask ([localDisplayLink]() {
79- [localDisplayLink addToRunLoop: [ NSRunLoop currentRunLoop ] forMode: NSRunLoopCommonModes ];
82+ [localDisplayLink addToRunLoop: NSRunLoop . currentRunLoop forMode: NSRunLoopCommonModes ];
8083 });
8184 }
8285
@@ -119,28 +122,20 @@ - (void)onDisplayLink:(CADisplayLink*)link {
119122 std::unique_ptr<flutter::FrameTimingsRecorder> recorder =
120123 std::make_unique<flutter::FrameTimingsRecorder>();
121124
122- current_refresh_rate_ = round (1 / (frame_target_time - frame_start_time).ToSecondsF ());
125+ _refreshRate = round (1 / (frame_target_time - frame_start_time).ToSecondsF ());
123126
124127 recorder->RecordVsync (frame_start_time, frame_target_time);
125128 if (_allowPauseAfterVsync) {
126129 link.paused = YES ;
127130 }
128- callback_ (std::move (recorder));
131+ _callback (std::move (recorder));
129132}
130133
131134- (void )invalidate {
132135 [_displayLink invalidate ];
133136 _displayLink = nil ; // Break retain cycle.
134137}
135138
136- - (void )dealloc {
137- [_displayLink invalidate ];
138- }
139-
140- - (double )getRefreshRate {
141- return current_refresh_rate_;
142- }
143-
144139- (CADisplayLink *)getDisplayLink {
145140 return _displayLink;
146141}
@@ -164,15 +159,15 @@ + (double)displayRefreshRate {
164159 return preferredFPS;
165160 }
166161
167- return [ UIScreen mainScreen ] .maximumFramesPerSecond ;
162+ return UIScreen. mainScreen .maximumFramesPerSecond ;
168163}
169164
170165- (void )onDisplayLink : (CADisplayLink *)link {
171166 // no-op.
172167}
173168
174169+ (BOOL )maxRefreshRateEnabledOnIPhone {
175- return [[[ NSBundle mainBundle ] objectForInfoDictionaryKey: @" CADisableMinimumFrameDurationOnPhone" ]
170+ return [[NSBundle . mainBundle objectForInfoDictionaryKey: @" CADisableMinimumFrameDurationOnPhone" ]
176171 boolValue ];
177172}
178173
0 commit comments