Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(225)

Side by Side Diff: cc/scheduler/begin_frame_source_unittest.cc

Issue 2061273002: cc: Make BackToBackBeginFrameSource a SyntheticBeginFrameSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: syntheticbeginframesource: delete-DEBUG_FRAMES Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/delay_based_time_source.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/scheduler/begin_frame_source.h" 5 #include "cc/scheduler/begin_frame_source.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "cc/test/begin_frame_args_test.h" 11 #include "cc/test/begin_frame_args_test.h"
12 #include "cc/test/begin_frame_source_test.h" 12 #include "cc/test/begin_frame_source_test.h"
13 #include "cc/test/scheduler_test_common.h" 13 #include "cc/test/scheduler_test_common.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 using testing::Mock;
18 using testing::StrictMock; 17 using testing::StrictMock;
19 18
20 namespace cc { 19 namespace cc {
21 namespace { 20 namespace {
22 21
23 // BeginFrameObserverBase testing --------------------------------------- 22 class BackToBackBeginFrameSourceTest : public ::testing::Test {
24 class MockMinimalBeginFrameObserverBase : public BeginFrameObserverBase {
25 public:
26 MOCK_METHOD1(OnBeginFrameDerivedImpl, bool(const BeginFrameArgs&));
27 MOCK_METHOD1(OnBeginFrameSourcePausedChanged, void(bool));
28 int64_t dropped_begin_frame_args() const { return dropped_begin_frame_args_; }
29 };
30
31 TEST(BeginFrameObserverBaseTest, OnBeginFrameImplementation) {
32 using ::testing::Return;
33 MockMinimalBeginFrameObserverBase obs;
34 ::testing::InSequence ordered; // These calls should be ordered
35
36 // Initial conditions
37 EXPECT_EQ(BeginFrameArgs(), obs.LastUsedBeginFrameArgs());
38 EXPECT_EQ(0, obs.dropped_begin_frame_args());
39
40 #ifndef NDEBUG
41 EXPECT_DEATH({ obs.OnBeginFrame(BeginFrameArgs()); }, "");
42 #endif
43
44 BeginFrameArgs args1 =
45 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300);
46 EXPECT_CALL(obs, OnBeginFrameDerivedImpl(args1)).WillOnce(Return(true));
47 obs.OnBeginFrame(args1);
48 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs());
49 EXPECT_EQ(0, obs.dropped_begin_frame_args());
50
51 #ifndef NDEBUG
52 EXPECT_DEATH({
53 obs.OnBeginFrame(CreateBeginFrameArgsForTesting(
54 BEGINFRAME_FROM_HERE, 50, 200, 300));
55 },
56 "");
57 #endif
58
59 // Returning false shouldn't update the LastUsedBeginFrameArgs value.
60 BeginFrameArgs args2 =
61 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 200, 300, 400);
62 EXPECT_CALL(obs, OnBeginFrameDerivedImpl(args2)).WillOnce(Return(false));
63 obs.OnBeginFrame(args2);
64 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs());
65 EXPECT_EQ(1, obs.dropped_begin_frame_args());
66
67 BeginFrameArgs args3 =
68 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 150, 300, 400);
69 EXPECT_CALL(obs, OnBeginFrameDerivedImpl(args3)).WillOnce(Return(true));
70 obs.OnBeginFrame(args3);
71 EXPECT_EQ(args3, obs.LastUsedBeginFrameArgs());
72 EXPECT_EQ(1, obs.dropped_begin_frame_args());
73 }
74
75 // BeginFrameSource testing ----------------------------------------------
76 TEST(BeginFrameSourceBaseTest, ObserverManipulation) {
77 MockBeginFrameObserver obs;
78 MockBeginFrameObserver otherObs;
79 FakeBeginFrameSource source;
80
81 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
82 source.AddObserver(&obs);
83 EXPECT_TRUE(source.has_observers());
84
85 #ifndef NDEBUG
86 // Adding an observer when it already exists should DCHECK fail.
87 EXPECT_DEATH({ source.AddObserver(&obs); }, "");
88
89 // Removing wrong observer should DCHECK fail.
90 EXPECT_DEATH({ source.RemoveObserver(&otherObs); }, "");
91
92 // Removing an observer when there is no observer should DCHECK fail.
93 EXPECT_DEATH(
94 {
95 source.RemoveObserver(&obs);
96 source.RemoveObserver(&obs);
97 },
98 "");
99 #endif
100
101 source.RemoveObserver(&obs);
102 EXPECT_FALSE(source.has_observers());
103
104 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(otherObs, false);
105 source.AddObserver(&otherObs);
106 EXPECT_TRUE(source.has_observers());
107 source.RemoveObserver(&otherObs);
108 EXPECT_FALSE(source.has_observers());
109 }
110
111 TEST(BeginFrameSourceBaseTest, Observer) {
112 FakeBeginFrameSource source;
113 MockBeginFrameObserver obs;
114 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
115 source.AddObserver(&obs);
116 EXPECT_BEGIN_FRAME_USED(obs, 100, 200, 300);
117 EXPECT_BEGIN_FRAME_DROP(obs, 400, 600, 300);
118 EXPECT_BEGIN_FRAME_DROP(obs, 450, 650, 300);
119 EXPECT_BEGIN_FRAME_USED(obs, 700, 900, 300);
120
121 SEND_BEGIN_FRAME_USED(source, 100, 200, 300);
122 SEND_BEGIN_FRAME_DROP(source, 400, 600, 300);
123 SEND_BEGIN_FRAME_DROP(source, 450, 650, 300);
124 SEND_BEGIN_FRAME_USED(source, 700, 900, 300);
125 }
126
127 TEST(BeginFrameSourceBaseTest, NoObserver) {
128 FakeBeginFrameSource source;
129 SEND_BEGIN_FRAME_DROP(source, 100, 200, 300);
130 }
131
132 TEST(BeginFrameSourceBaseTest, SetBeginFrameSourcePaused) {
133 FakeBeginFrameSource source;
134 MockBeginFrameObserver obs;
135 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
136 source.AddObserver(&obs);
137
138 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, true);
139 source.SetBeginFrameSourcePaused(true);
140 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
141 source.SetBeginFrameSourcePaused(false);
142 }
143
144 TEST(BeginFrameSourceBaseTest, MultipleObservers) {
145 FakeBeginFrameSource source;
146 StrictMock<MockBeginFrameObserver> obs1, obs2;
147
148 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
149 source.AddObserver(&obs1);
150
151 EXPECT_BEGIN_FRAME_USED(obs1, 100, 200, 100);
152 SEND_BEGIN_FRAME_USED(source, 100, 200, 100);
153
154 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
155 source.AddObserver(&obs2);
156
157 EXPECT_BEGIN_FRAME_USED(obs1, 200, 300, 100);
158 EXPECT_BEGIN_FRAME_USED(obs2, 200, 300, 100);
159 SEND_BEGIN_FRAME_USED(source, 200, 300, 100);
160
161 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, true);
162 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, true);
163 source.SetBeginFrameSourcePaused(true);
164
165 source.RemoveObserver(&obs1);
166
167 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
168 source.SetBeginFrameSourcePaused(false);
169
170 EXPECT_BEGIN_FRAME_USED(obs2, 300, 400, 100);
171 SEND_BEGIN_FRAME_USED(source, 300, 400, 100);
172
173 source.RemoveObserver(&obs2);
174 }
175
176 // BackToBackBeginFrameSource testing -----------------------------------------
177 class TestBackToBackBeginFrameSource : public BackToBackBeginFrameSource {
178 public:
179 TestBackToBackBeginFrameSource(base::SimpleTestTickClock* now_src,
180 base::SingleThreadTaskRunner* task_runner)
181 : BackToBackBeginFrameSource(task_runner), now_src_(now_src) {}
182
183 protected: 23 protected:
184 base::TimeTicks Now() override { return now_src_->NowTicks(); }
185
186 // Not owned.
187 base::SimpleTestTickClock* now_src_;
188 };
189
190 class BackToBackBeginFrameSourceTest : public ::testing::Test {
191 public:
192 static const int64_t kDeadline; 24 static const int64_t kDeadline;
193 static const int64_t kInterval; 25 static const int64_t kInterval;
194 26
195 std::unique_ptr<base::SimpleTestTickClock> now_src_;
196 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
197 std::unique_ptr<TestBackToBackBeginFrameSource> source_;
198 std::unique_ptr<MockBeginFrameObserver> obs_;
199
200 void SetUp() override { 27 void SetUp() override {
201 now_src_.reset(new base::SimpleTestTickClock()); 28 now_src_.reset(new base::SimpleTestTickClock());
202 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); 29 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
203 task_runner_ = 30 task_runner_ =
204 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); 31 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false));
205 source_.reset( 32 std::unique_ptr<TestDelayBasedTimeSource> time_source(
206 new TestBackToBackBeginFrameSource(now_src_.get(), task_runner_.get())); 33 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get()));
207 obs_ = 34 source_.reset(new BackToBackBeginFrameSource(std::move(time_source)));
208 base::WrapUnique(new ::testing::StrictMock<MockBeginFrameObserver>()); 35 obs_ = base::WrapUnique(new ::testing::StrictMock<MockBeginFrameObserver>);
209 } 36 }
210 37
211 void TearDown() override { obs_.reset(); } 38 void TearDown() override { obs_.reset(); }
39
40 std::unique_ptr<base::SimpleTestTickClock> now_src_;
41 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
42 std::unique_ptr<BackToBackBeginFrameSource> source_;
43 std::unique_ptr<MockBeginFrameObserver> obs_;
212 }; 44 };
213 45
214 const int64_t BackToBackBeginFrameSourceTest::kDeadline = 46 const int64_t BackToBackBeginFrameSourceTest::kDeadline =
215 BeginFrameArgs::DefaultInterval().ToInternalValue(); 47 BeginFrameArgs::DefaultInterval().ToInternalValue();
216 48
217 const int64_t BackToBackBeginFrameSourceTest::kInterval = 49 const int64_t BackToBackBeginFrameSourceTest::kInterval =
218 BeginFrameArgs::DefaultInterval().ToInternalValue(); 50 BeginFrameArgs::DefaultInterval().ToInternalValue();
219 51
220 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) { 52 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) {
221 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 53 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
(...skipping 11 matching lines...) Expand all
233 TEST_F(BackToBackBeginFrameSourceTest, 65 TEST_F(BackToBackBeginFrameSourceTest,
234 DidFinishFrameThenRemoveObserverProducesNoFrame) { 66 DidFinishFrameThenRemoveObserverProducesNoFrame) {
235 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 67 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
236 source_->AddObserver(obs_.get()); 68 source_->AddObserver(obs_.get());
237 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 69 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
238 task_runner_->RunPendingTasks(); 70 task_runner_->RunPendingTasks();
239 71
240 source_->RemoveObserver(obs_.get()); 72 source_->RemoveObserver(obs_.get());
241 source_->DidFinishFrame(obs_.get(), 0); 73 source_->DidFinishFrame(obs_.get(), 0);
242 74
75 // Verify no BeginFrame is sent to |obs_|. There is a pending task in the
76 // task_runner_ as a BeginFrame was posted, but it gets aborted since |obs_|
77 // is removed.
78 task_runner_->RunPendingTasks();
243 EXPECT_FALSE(task_runner_->HasPendingTasks()); 79 EXPECT_FALSE(task_runner_->HasPendingTasks());
244 } 80 }
245 81
246 TEST_F(BackToBackBeginFrameSourceTest, 82 TEST_F(BackToBackBeginFrameSourceTest,
247 RemoveObserverThenDidFinishFrameProducesNoFrame) { 83 RemoveObserverThenDidFinishFrameProducesNoFrame) {
248 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 84 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
249 source_->AddObserver(obs_.get()); 85 source_->AddObserver(obs_.get());
250 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 86 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
251 task_runner_->RunPendingTasks(); 87 task_runner_->RunPendingTasks();
252 88
(...skipping 16 matching lines...) Expand all
269 source_->RemoveObserver(obs_.get()); 105 source_->RemoveObserver(obs_.get());
270 106
271 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 107 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
272 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 108 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
273 source_->AddObserver(obs_.get()); 109 source_->AddObserver(obs_.get());
274 110
275 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 111 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
276 source_->DidFinishFrame(obs_.get(), 0); 112 source_->DidFinishFrame(obs_.get(), 0);
277 113
278 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 114 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
279 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); 115 // The begin frame is posted at the time when the observer was added,
116 // so it ignores changes to "now" afterward.
117 EXPECT_BEGIN_FRAME_USED(*obs_, 1110, 1110 + kDeadline, kInterval);
280 EXPECT_TRUE(task_runner_->HasPendingTasks()); 118 EXPECT_TRUE(task_runner_->HasPendingTasks());
281 task_runner_->RunPendingTasks(); 119 task_runner_->RunPendingTasks();
282 } 120 }
283 121
284 TEST_F(BackToBackBeginFrameSourceTest, 122 TEST_F(BackToBackBeginFrameSourceTest,
285 DidFinishFrameThenTogglingObserverProducesCorrectFrame) { 123 DidFinishFrameThenTogglingObserverProducesCorrectFrame) {
286 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 124 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
287 source_->AddObserver(obs_.get()); 125 source_->AddObserver(obs_.get());
288 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 126 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
289 task_runner_->RunPendingTasks(); 127 task_runner_->RunPendingTasks();
290 128
291 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 129 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
292 source_->DidFinishFrame(obs_.get(), 0); 130 source_->DidFinishFrame(obs_.get(), 0);
293 131
294 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 132 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
295 source_->RemoveObserver(obs_.get()); 133 source_->RemoveObserver(obs_.get());
296 134
297 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 135 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
298 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 136 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
299 source_->AddObserver(obs_.get()); 137 source_->AddObserver(obs_.get());
300 138
301 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 139 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
302 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); 140 // Ticks at the time at which the observer was added, ignoring the
141 // last change to "now".
142 EXPECT_BEGIN_FRAME_USED(*obs_, 1120, 1120 + kDeadline, kInterval);
303 EXPECT_TRUE(task_runner_->HasPendingTasks()); 143 EXPECT_TRUE(task_runner_->HasPendingTasks());
304 task_runner_->RunPendingTasks(); 144 task_runner_->RunPendingTasks();
305 } 145 }
306 146
307 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) { 147 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) {
308 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 148 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
309 source_->AddObserver(obs_.get()); 149 source_->AddObserver(obs_.get());
310 source_->RemoveObserver(obs_.get()); 150 source_->RemoveObserver(obs_.get());
311 source_->DidFinishFrame(obs_.get(), 0); 151 source_->DidFinishFrame(obs_.get(), 0);
312 EXPECT_FALSE(task_runner_->RunPendingTasks()); 152 EXPECT_FALSE(task_runner_->RunPendingTasks());
313 } 153 }
314 154
315 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) { 155 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) {
316 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 156 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
317 source_->AddObserver(obs_.get()); 157 source_->AddObserver(obs_.get());
318 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 158 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
159 // Runs the pending begin frame.
319 task_runner_->RunPendingTasks(); 160 task_runner_->RunPendingTasks();
161 // While running the begin frame, the next frame was cancelled, this
162 // runs the next frame, sees it was cancelled, and goes to sleep.
163 task_runner_->RunPendingTasks();
164 EXPECT_FALSE(task_runner_->HasPendingTasks());
320 165
321 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 166 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
322 167
323 source_->DidFinishFrame(obs_.get(), 3); 168 source_->DidFinishFrame(obs_.get(), 3);
324 EXPECT_FALSE(task_runner_->HasPendingTasks()); 169 EXPECT_FALSE(task_runner_->HasPendingTasks());
325 source_->DidFinishFrame(obs_.get(), 2); 170 source_->DidFinishFrame(obs_.get(), 2);
326 EXPECT_FALSE(task_runner_->HasPendingTasks()); 171 EXPECT_FALSE(task_runner_->HasPendingTasks());
327 source_->DidFinishFrame(obs_.get(), 1); 172 source_->DidFinishFrame(obs_.get(), 1);
328 EXPECT_FALSE(task_runner_->HasPendingTasks()); 173 EXPECT_FALSE(task_runner_->HasPendingTasks());
329 174
(...skipping 26 matching lines...) Expand all
356 201
357 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) { 202 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) {
358 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 203 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
359 source_->AddObserver(obs_.get()); 204 source_->AddObserver(obs_.get());
360 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); 205 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
361 task_runner_->RunPendingTasks(); 206 task_runner_->RunPendingTasks();
362 207
363 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 208 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
364 source_->DidFinishFrame(obs_.get(), 0); 209 source_->DidFinishFrame(obs_.get(), 0);
365 now_src_->Advance(base::TimeDelta::FromMicroseconds(50)); 210 now_src_->Advance(base::TimeDelta::FromMicroseconds(50));
366 EXPECT_BEGIN_FRAME_USED(*obs_, 1150, 1150 + kDeadline, kInterval); 211 // Ticks at the time the last frame finished, so ignores the last change to
212 // "now".
213 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval);
367 214
368 EXPECT_TRUE(task_runner_->HasPendingTasks()); 215 EXPECT_TRUE(task_runner_->HasPendingTasks());
369 task_runner_->RunPendingTasks(); 216 task_runner_->RunPendingTasks();
370 } 217 }
371 218
372 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) { 219 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) {
373 StrictMock<MockBeginFrameObserver> obs1, obs2; 220 StrictMock<MockBeginFrameObserver> obs1, obs2;
374 221
375 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 222 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
376 source_->AddObserver(&obs1); 223 source_->AddObserver(&obs1);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); 258 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval);
412 task_runner_->RunPendingTasks(); 259 task_runner_->RunPendingTasks();
413 260
414 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 261 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
415 source_->DidFinishFrame(&obs1, 0); 262 source_->DidFinishFrame(&obs1, 0);
416 EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval); 263 EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval);
417 task_runner_->RunPendingTasks(); 264 task_runner_->RunPendingTasks();
418 265
419 source_->DidFinishFrame(&obs1, 0); 266 source_->DidFinishFrame(&obs1, 0);
420 source_->RemoveObserver(&obs1); 267 source_->RemoveObserver(&obs1);
268 // Finishing the frame for |obs1| posts a begin frame task, which will be
269 // aborted since |obs1| is removed. Clear that from the task runner.
270 task_runner_->RunPendingTasks();
421 271
422 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 272 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
423 source_->DidFinishFrame(&obs2, 0); 273 source_->DidFinishFrame(&obs2, 0);
424 EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval); 274 EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval);
425 task_runner_->RunPendingTasks(); 275 task_runner_->RunPendingTasks();
426 276
427 source_->DidFinishFrame(&obs2, 0); 277 source_->DidFinishFrame(&obs2, 0);
428 source_->RemoveObserver(&obs2); 278 source_->RemoveObserver(&obs2);
429 } 279 }
430 280
431 // SyntheticBeginFrameSource testing ------------------------------------------ 281 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) {
432 class SyntheticBeginFrameSourceTest : public ::testing::Test { 282 StrictMock<MockBeginFrameObserver> obs1, obs2;
283
284 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
285 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
286 source_->AddObserver(&obs1);
287 source_->AddObserver(&obs2);
288 EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval);
289 EXPECT_BEGIN_FRAME_USED(obs2, 1000, 1000 + kDeadline, kInterval);
290 task_runner_->RunPendingTasks();
291
292 // |obs1| finishes first.
293 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
294 source_->DidFinishFrame(&obs1, 0);
295
296 // |obs2| finishes also, before getting to the newly posted begin frame.
297 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
298 source_->DidFinishFrame(&obs2, 0);
299
300 // Because the begin frame source already ticked when |obs1| finished,
301 // we see it as the frame time for both observers.
302 EXPECT_BEGIN_FRAME_USED(obs1, 1100, 1100 + kDeadline, kInterval);
303 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval);
304 task_runner_->RunPendingTasks();
305
306 source_->DidFinishFrame(&obs1, 0);
307 source_->RemoveObserver(&obs1);
308 source_->DidFinishFrame(&obs2, 0);
309 source_->RemoveObserver(&obs2);
310 }
311
312 // DelayBasedBeginFrameSource testing ------------------------------------------
313 class DelayBasedBeginFrameSourceTest : public ::testing::Test {
433 public: 314 public:
434 std::unique_ptr<base::SimpleTestTickClock> now_src_; 315 std::unique_ptr<base::SimpleTestTickClock> now_src_;
435 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 316 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
436 std::unique_ptr<TestSyntheticBeginFrameSource> source_; 317 std::unique_ptr<DelayBasedBeginFrameSource> source_;
437 std::unique_ptr<MockBeginFrameObserver> obs_; 318 std::unique_ptr<MockBeginFrameObserver> obs_;
438 319
439 void SetUp() override { 320 void SetUp() override {
440 now_src_.reset(new base::SimpleTestTickClock()); 321 now_src_.reset(new base::SimpleTestTickClock());
441 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); 322 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
442 task_runner_ = 323 task_runner_ =
443 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); 324 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false));
444 source_.reset(new TestSyntheticBeginFrameSource( 325 std::unique_ptr<DelayBasedTimeSource> time_source(
445 now_src_.get(), task_runner_.get(), 326 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get()));
446 base::TimeDelta::FromMicroseconds(10000))); 327 time_source->SetTimebaseAndInterval(
447 obs_ = base::WrapUnique(new MockBeginFrameObserver()); 328 base::TimeTicks(), base::TimeDelta::FromMicroseconds(10000));
329 source_.reset(new DelayBasedBeginFrameSource(std::move(time_source)));
330 obs_.reset(new MockBeginFrameObserver);
448 } 331 }
449 332
450 void TearDown() override { obs_.reset(); } 333 void TearDown() override { obs_.reset(); }
451 }; 334 };
452 335
453 TEST_F(SyntheticBeginFrameSourceTest, 336 TEST_F(DelayBasedBeginFrameSourceTest,
454 AddObserverCallsOnBeginFrameWithMissedTick) { 337 AddObserverCallsOnBeginFrameWithMissedTick) {
455 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010)); 338 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010));
456 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 339 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
457 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 10000, 20000, 10000); 340 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 10000, 20000, 10000);
458 source_->AddObserver(obs_.get()); // Should cause the last tick to be sent 341 source_->AddObserver(obs_.get()); // Should cause the last tick to be sent
459 // No tasks should need to be run for this to occur. 342 // No tasks should need to be run for this to occur.
460 } 343 }
461 344
462 TEST_F(SyntheticBeginFrameSourceTest, AddObserverCallsCausesOnBeginFrame) { 345 TEST_F(DelayBasedBeginFrameSourceTest, AddObserverCallsCausesOnBeginFrame) {
463 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 346 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
464 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000); 347 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000);
465 source_->AddObserver(obs_.get()); 348 source_->AddObserver(obs_.get());
466 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue()); 349 EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue());
467 350
468 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 351 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
469 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010)); 352 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010));
470 task_runner_->RunPendingTasks(); 353 task_runner_->RunPendingTasks();
471 } 354 }
472 355
473 TEST_F(SyntheticBeginFrameSourceTest, BasicOperation) { 356 TEST_F(DelayBasedBeginFrameSourceTest, BasicOperation) {
474 task_runner_->SetAutoAdvanceNowToPendingTasks(true); 357 task_runner_->SetAutoAdvanceNowToPendingTasks(true);
475 358
476 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 359 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
477 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000); 360 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000);
478 source_->AddObserver(obs_.get()); 361 source_->AddObserver(obs_.get());
479 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 362 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
480 EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000); 363 EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000);
481 EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000); 364 EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000);
482 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001)); 365 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001));
483 366
484 source_->RemoveObserver(obs_.get()); 367 source_->RemoveObserver(obs_.get());
485 // No new frames.... 368 // No new frames....
486 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000)); 369 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000));
487 } 370 }
488 371
489 TEST_F(SyntheticBeginFrameSourceTest, VSyncChanges) { 372 TEST_F(DelayBasedBeginFrameSourceTest, VSyncChanges) {
490 task_runner_->SetAutoAdvanceNowToPendingTasks(true); 373 task_runner_->SetAutoAdvanceNowToPendingTasks(true);
491 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 374 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
492 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000); 375 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000);
493 source_->AddObserver(obs_.get()); 376 source_->AddObserver(obs_.get());
494 377
495 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000); 378 EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
496 EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000); 379 EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000);
497 EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000); 380 EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000);
498 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001)); 381 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001));
499 382
500 // Update the vsync information 383 // Update the vsync information
501 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(27500), 384 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(27500),
502 base::TimeDelta::FromMicroseconds(10001)); 385 base::TimeDelta::FromMicroseconds(10001));
503 386
504 EXPECT_BEGIN_FRAME_USED(*obs_, 40000, 47502, 10001); 387 EXPECT_BEGIN_FRAME_USED(*obs_, 40000, 47502, 10001);
505 EXPECT_BEGIN_FRAME_USED(*obs_, 47502, 57503, 10001); 388 EXPECT_BEGIN_FRAME_USED(*obs_, 47502, 57503, 10001);
506 EXPECT_BEGIN_FRAME_USED(*obs_, 57503, 67504, 10001); 389 EXPECT_BEGIN_FRAME_USED(*obs_, 57503, 67504, 10001);
507 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000)); 390 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000));
508 } 391 }
509 392
510 TEST_F(SyntheticBeginFrameSourceTest, AuthoritativeVSyncChanges) { 393 TEST_F(DelayBasedBeginFrameSourceTest, AuthoritativeVSyncChanges) {
511 task_runner_->SetAutoAdvanceNowToPendingTasks(true); 394 task_runner_->SetAutoAdvanceNowToPendingTasks(true);
512 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(500), 395 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(500),
513 base::TimeDelta::FromMicroseconds(10000)); 396 base::TimeDelta::FromMicroseconds(10000));
514 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 397 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
515 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 500, 10500, 10000); 398 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 500, 10500, 10000);
516 source_->AddObserver(obs_.get()); 399 source_->AddObserver(obs_.get());
517 400
518 EXPECT_BEGIN_FRAME_USED(*obs_, 10500, 20500, 10000); 401 EXPECT_BEGIN_FRAME_USED(*obs_, 10500, 20500, 10000);
519 EXPECT_BEGIN_FRAME_USED(*obs_, 20500, 30500, 10000); 402 EXPECT_BEGIN_FRAME_USED(*obs_, 20500, 30500, 10000);
520 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(20501)); 403 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(20501));
521 404
522 // This will keep the same timebase, so 500, 9999 405 // This will keep the same timebase, so 500, 9999
523 source_->SetAuthoritativeVSyncInterval( 406 source_->SetAuthoritativeVSyncInterval(
524 base::TimeDelta::FromMicroseconds(9999)); 407 base::TimeDelta::FromMicroseconds(9999));
525 EXPECT_BEGIN_FRAME_USED(*obs_, 30500, 40496, 9999); 408 EXPECT_BEGIN_FRAME_USED(*obs_, 30500, 40496, 9999);
526 EXPECT_BEGIN_FRAME_USED(*obs_, 40496, 50495, 9999); 409 EXPECT_BEGIN_FRAME_USED(*obs_, 40496, 50495, 9999);
527 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(40497)); 410 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(40497));
528 411
529 // Change the vsync params, but the new interval will be ignored. 412 // Change the vsync params, but the new interval will be ignored.
530 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(400), 413 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(400),
531 base::TimeDelta::FromMicroseconds(1)); 414 base::TimeDelta::FromMicroseconds(1));
532 EXPECT_BEGIN_FRAME_USED(*obs_, 50495, 60394, 9999); 415 EXPECT_BEGIN_FRAME_USED(*obs_, 50495, 60394, 9999);
533 EXPECT_BEGIN_FRAME_USED(*obs_, 60394, 70393, 9999); 416 EXPECT_BEGIN_FRAME_USED(*obs_, 60394, 70393, 9999);
534 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60395)); 417 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60395));
535 } 418 }
536 419
537 TEST_F(SyntheticBeginFrameSourceTest, MultipleObservers) { 420 TEST_F(DelayBasedBeginFrameSourceTest, MultipleObservers) {
538 StrictMock<MockBeginFrameObserver> obs1, obs2; 421 StrictMock<MockBeginFrameObserver> obs1, obs2;
539 422
540 // now_src_ starts off at 1000. 423 // now_src_ starts off at 1000.
541 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(9010)); 424 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(9010));
542 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 425 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
543 EXPECT_BEGIN_FRAME_USED_MISSED(obs1, 10000, 20000, 10000); 426 EXPECT_BEGIN_FRAME_USED_MISSED(obs1, 10000, 20000, 10000);
544 source_->AddObserver(&obs1); // Should cause the last tick to be sent 427 source_->AddObserver(&obs1); // Should cause the last tick to be sent
545 // No tasks should need to be run for this to occur. 428 // No tasks should need to be run for this to occur.
546 429
547 EXPECT_BEGIN_FRAME_USED(obs1, 20000, 30000, 10000); 430 EXPECT_BEGIN_FRAME_USED(obs1, 20000, 30000, 10000);
(...skipping 11 matching lines...) Expand all
559 source_->RemoveObserver(&obs1); 442 source_->RemoveObserver(&obs1);
560 443
561 EXPECT_BEGIN_FRAME_USED(obs2, 40000, 50000, 10000); 444 EXPECT_BEGIN_FRAME_USED(obs2, 40000, 50000, 10000);
562 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000)); 445 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
563 446
564 source_->RemoveObserver(&obs2); 447 source_->RemoveObserver(&obs2);
565 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(50000)); 448 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(50000));
566 EXPECT_FALSE(task_runner_->HasPendingTasks()); 449 EXPECT_FALSE(task_runner_->HasPendingTasks());
567 } 450 }
568 451
569 TEST_F(SyntheticBeginFrameSourceTest, DoubleTick) { 452 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTick) {
570 StrictMock<MockBeginFrameObserver> obs; 453 StrictMock<MockBeginFrameObserver> obs;
571 454
572 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 455 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
573 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000); 456 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000);
574 source_->AddObserver(&obs); 457 source_->AddObserver(&obs);
575 458
576 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000), 459 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000),
577 base::TimeDelta::FromInternalValue(10000)); 460 base::TimeDelta::FromInternalValue(10000));
578 now_src_->Advance(base::TimeDelta::FromInternalValue(4000)); 461 now_src_->Advance(base::TimeDelta::FromInternalValue(4000));
579 462
580 // No begin frame received. 463 // No begin frame received.
581 task_runner_->RunPendingTasks(); 464 task_runner_->RunPendingTasks();
582 465
583 // Begin frame received. 466 // Begin frame received.
584 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000), 467 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000),
585 base::TimeDelta::FromInternalValue(10000)); 468 base::TimeDelta::FromInternalValue(10000));
586 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); 469 now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
587 EXPECT_BEGIN_FRAME_USED(obs, 10000, 20000, 10000); 470 EXPECT_BEGIN_FRAME_USED(obs, 10000, 20000, 10000);
588 task_runner_->RunPendingTasks(); 471 task_runner_->RunPendingTasks();
589 } 472 }
590 473
591 TEST_F(SyntheticBeginFrameSourceTest, DoubleTickMissedFrame) { 474 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTickMissedFrame) {
592 StrictMock<MockBeginFrameObserver> obs; 475 StrictMock<MockBeginFrameObserver> obs;
593 476
594 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 477 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
595 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000); 478 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000);
596 source_->AddObserver(&obs); 479 source_->AddObserver(&obs);
597 source_->RemoveObserver(&obs); 480 source_->RemoveObserver(&obs);
598 481
599 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000), 482 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000),
600 base::TimeDelta::FromInternalValue(10000)); 483 base::TimeDelta::FromInternalValue(10000));
601 now_src_->Advance(base::TimeDelta::FromInternalValue(4000)); 484 now_src_->Advance(base::TimeDelta::FromInternalValue(4000));
602 485
603 // No missed frame received. 486 // No missed frame received.
604 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 487 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
605 source_->AddObserver(&obs); 488 source_->AddObserver(&obs);
606 source_->RemoveObserver(&obs); 489 source_->RemoveObserver(&obs);
607 490
608 // Missed frame received. 491 // Missed frame received.
609 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000), 492 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000),
610 base::TimeDelta::FromInternalValue(10000)); 493 base::TimeDelta::FromInternalValue(10000));
611 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); 494 now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
612 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 495 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
613 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000); 496 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000);
614 source_->AddObserver(&obs); 497 source_->AddObserver(&obs);
615 source_->RemoveObserver(&obs); 498 source_->RemoveObserver(&obs);
616 } 499 }
617 500
618 } // namespace 501 } // namespace
619 } // namespace cc 502 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/delay_based_time_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698