122 const uintptr_t kWarmUpBaton = 0xFFFFFFFF;
125 CFTimeInterval timestamp;
126 CFTimeInterval targetTimestamp;
129 __block std::vector<Entry> entries;
132 initWithDisplayLink:displayLink
133 block:^(CFTimeInterval timestamp, CFTimeInterval targetTimestamp,
135 entries.push_back({timestamp, targetTimestamp, baton});
136 if (baton == kWarmUpBaton) {
140 CFRunLoopStop(CFRunLoopGetCurrent());
143 [waiter waitForVSync:kWarmUpBaton];
146 CFTimeInterval now = CACurrentMediaTime();
150 EXPECT_EQ(displayLink.
paused, YES);
152 [waiter waitForVSync:1];
155 [waiter waitForVSync:2];
160 [waiter waitForVSync:3];
165 EXPECT_FALSE(displayLink.
paused);
170 CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.02, NO);
171 ASSERT_TRUE(displayLink.
paused);
173 EXPECT_EQ(entries.size(),
size_t(4));
176 EXPECT_TRUE(fabs(entries[0].timestamp - now) < 0.001);
177 EXPECT_TRUE(fabs(entries[0].targetTimestamp - now) < 0.001);
178 EXPECT_EQ(entries[0].baton, kWarmUpBaton);
182 EXPECT_EQ(entries[1].baton,
size_t(1));
185 EXPECT_EQ(entries[2].baton,
size_t(2));
188 EXPECT_EQ(entries[3].baton,
size_t(3));