5#import <OCMock/OCMock.h>
6#import <XCTest/XCTest.h>
12#import "flutter/shell/platform/darwin/ios/InternalFlutterSwift/InternalFlutterSwift.h"
31- (void)testSnapDurationWithValidDuration {
33 CFTimeInterval duration = 0.016667;
35 XCTAssertEqualWithAccuracy(snapped, 1.0 / 60.0, 0.0001);
40 XCTAssertEqualWithAccuracy(snapped, 1.0 / 120.0, 0.0001);
43- (void)testSnapDurationWithInvalidDuration {
46 XCTAssertEqualWithAccuracy(snapped, 1.0 / 120.0, 0.0001);
50 XCTAssertEqualWithAccuracy(snapped, 1.0 / 80.0, 0.0001);
53- (void)testSnapDurationWithZeroMaxRefreshRateFallback {
56 XCTAssertEqualWithAccuracy(snapped, 1.0 / 60.0, 0.0001);
59 XCTAssertEqualWithAccuracy(snapped, 1.0 / 60.0, 0.0001);
62- (void)testConstructorUsesInjectedDisplayLinkManagerRefreshRate {
63 id mockDisplayLinkManager = OCMPartialMock([FlutterDisplayLinkManager shared]);
64 [
self addTeardownBlock:^{
65 [mockDisplayLinkManager stopMocking];
67 double maxFrameRate = 120;
68 (void)[[[mockDisplayLinkManager stub] andReturnValue:@(maxFrameRate)] displayRefreshRate];
71 auto waiter = std::make_unique<flutter::VsyncWaiterIOS>(taskRunners, mockDisplayLinkManager);
73 XCTAssertEqual(waiter->GetMaxRefreshRateForTesting(), maxFrameRate);
76- (void)testAwaitVSyncPicksUpRefreshRateChangesFromInjectedDisplayLinkManager {
77 id mockDisplayLinkManager = OCMPartialMock([FlutterDisplayLinkManager shared]);
78 [
self addTeardownBlock:^{
79 [mockDisplayLinkManager stopMocking];
84 double initialFrameRate = 60;
85 __block
double refreshRate = initialFrameRate;
86 OCMStub([mockDisplayLinkManager displayRefreshRate]).andDo(^(NSInvocation* invocation) {
87 [invocation setReturnValue:&refreshRate];
91 auto waiter = std::make_unique<flutter::VsyncWaiterIOS>(taskRunners, mockDisplayLinkManager);
92 XCTAssertEqual(waiter->GetMaxRefreshRateForTesting(), initialFrameRate);
94 double updatedFrameRate = 120;
95 refreshRate = updatedFrameRate;
98 XCTAssertEqual(waiter->GetMaxRefreshRateForTesting(), updatedFrameRate);
static CFTimeInterval SnapDuration(CFTimeInterval duration, double max_refresh_rate)
static void EnsureInitializedForCurrentThread()
fml::RefPtr< fml::TaskRunner > GetTaskRunner() const
static FML_EMBEDDER_ONLY MessageLoop & GetCurrent()
FlutterFMLTaskRunners * CreateTestTaskRunners(NSString *label)