Flutter Engine
 
Loading...
Searching...
No Matches
VSyncClient Class Reference

#include <vsync_waiter_ios.h>

Inheritance diagram for VSyncClient:

Instance Methods

(instancetype) - initWithTaskRunner:callback:
 
(void) - await
 
(void) - pause
 
(void) - invalidate
 Call invalidate before releasing this object to remove from runloops.
 
(void) - setMaxRefreshRate:
 

Properties

BOOL allowPauseAfterVsync
 Default value is YES. Vsync client will pause vsync callback after receiving a vsync signal. Setting this property to NO can avoid this and vsync client will trigger vsync callback continuously.
 

Detailed Description

Definition at line 47 of file vsync_waiter_ios.h.

Method Documentation

◆ await

- (void) await

Definition at line 68 of file vsync_waiter_ios.mm.

108 {
109 _displayLink.paused = NO;
110}
CADisplayLink * _displayLink

Referenced by flutter::VsyncWaiterIOS::AwaitVSync.

◆ initWithTaskRunner:callback:

- (instancetype) initWithTaskRunner: (fml::RefPtr<fml::TaskRunner>)  task_runner
callback: (flutter::VsyncWaiter::Callback callback 

Definition at line 68 of file vsync_waiter_ios.mm.

72 callback:(flutter::VsyncWaiter::Callback)callback {
73 FML_DCHECK(task_runner);
74
75 if (self = [super init]) {
77 _allowPauseAfterVsync = YES;
78 _callback = std::move(callback);
79 _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onDisplayLink:)];
80 _displayLink.paused = YES;
81
82 [self setMaxRefreshRate:DisplayLinkManager.displayRefreshRate];
83
84 // Strongly retain the the captured link until it is added to the runloop.
85 CADisplayLink* localDisplayLink = _displayLink;
86 task_runner->PostTask([localDisplayLink]() {
87 [localDisplayLink addToRunLoop:NSRunLoop.currentRunLoop forMode:NSRunLoopCommonModes];
88 });
89 }
90
91 return self;
92}
FlutterDesktopBinaryReply callback
#define FML_DCHECK(condition)
Definition logging.h:122
std::function< void(MTLRenderPipelineDescriptor *)> Callback

◆ invalidate

- (void) invalidate

Call invalidate before releasing this object to remove from runloops.

Definition at line 68 of file vsync_waiter_ios.mm.

139 {
140 [_displayLink invalidate];
141 _displayLink = nil; // Break retain cycle.
142}

Referenced by flutter::VsyncWaiterIOS::~VsyncWaiterIOS.

◆ pause

- (void) pause

Definition at line 68 of file vsync_waiter_ios.mm.

112 {
113 _displayLink.paused = YES;
114}

◆ setMaxRefreshRate:

- (void) setMaxRefreshRate: (double)  refreshRate

Definition at line 68 of file vsync_waiter_ios.mm.

94 :(double)refreshRate {
96 return;
97 }
98 double maxFrameRate = fmax(refreshRate, 60);
99 double minFrameRate = fmax(maxFrameRate / 2, 60);
100 if (@available(iOS 15.0, *)) {
101 _displayLink.preferredFrameRateRange =
102 CAFrameRateRangeMake(minFrameRate, maxFrameRate, maxFrameRate);
103 } else {
104 _displayLink.preferredFramesPerSecond = maxFrameRate;
105 }
106}

Referenced by flutter::VsyncWaiterIOS::AwaitVSync.

Property Documentation

◆ allowPauseAfterVsync

- (BOOL) allowPauseAfterVsync
readwritenonatomicassign

Default value is YES. Vsync client will pause vsync callback after receiving a vsync signal. Setting this property to NO can avoid this and vsync client will trigger vsync callback continuously.

Parameters
allowPauseAfterVsyncAllow vsync client to pause after receiving a vsync signal.

Definition at line 57 of file vsync_waiter_ios.h.


The documentation for this class was generated from the following files: