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

Side by Side Diff: cc/scheduler/delay_based_time_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/delay_based_time_source.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('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/delay_based_time_source.h" 5 #include "cc/scheduler/delay_based_time_source.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/test/test_simple_task_runner.h" 9 #include "base/test/test_simple_task_runner.h"
10 #include "cc/test/scheduler_test_common.h" 10 #include "cc/test/scheduler_test_common.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace cc { 13 namespace cc {
14 namespace { 14 namespace {
15 15
16 base::TimeDelta Interval() { 16 base::TimeDelta Interval() {
17 return base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond / 17 return base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond /
18 60); 18 60);
19 } 19 }
20 20
21 TEST(DelayBasedTimeSourceTest, TaskPostedAndTickCalled) { 21 TEST(DelayBasedTimeSourceTest, TaskPostedAndTickCalled) {
22 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 22 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
23 new base::TestSimpleTaskRunner; 23 new base::TestSimpleTaskRunner;
24 FakeDelayBasedTimeSourceClient client; 24 FakeDelayBasedTimeSourceClient client;
25 std::unique_ptr<FakeDelayBasedTimeSource> timer = 25 std::unique_ptr<FakeDelayBasedTimeSource> timer(
26 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 26 new FakeDelayBasedTimeSource(task_runner.get()));
27 timer->SetClient(&client); 27 timer->SetClient(&client);
28 28 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
29 timer->SetActive(true); 29 timer->SetActive(true);
30 EXPECT_TRUE(timer->Active()); 30 EXPECT_TRUE(timer->Active());
31 EXPECT_TRUE(task_runner->HasPendingTask()); 31 EXPECT_TRUE(task_runner->HasPendingTask());
32 32
33 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(16)); 33 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(16));
34 task_runner->RunPendingTasks(); 34 task_runner->RunPendingTasks();
35 EXPECT_TRUE(timer->Active()); 35 EXPECT_TRUE(timer->Active());
36 EXPECT_TRUE(client.TickCalled()); 36 EXPECT_TRUE(client.TickCalled());
37 } 37 }
38 38
39 TEST(DelayBasedTimeSourceTest, TickNotCalledWithTaskPosted) { 39 TEST(DelayBasedTimeSourceTest, TickNotCalledWithTaskPosted) {
40 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 40 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
41 new base::TestSimpleTaskRunner; 41 new base::TestSimpleTaskRunner;
42 FakeDelayBasedTimeSourceClient client; 42 FakeDelayBasedTimeSourceClient client;
43 std::unique_ptr<FakeDelayBasedTimeSource> timer = 43 std::unique_ptr<FakeDelayBasedTimeSource> timer(
44 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 44 new FakeDelayBasedTimeSource(task_runner.get()));
45 timer->SetClient(&client); 45 timer->SetClient(&client);
46 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
46 timer->SetActive(true); 47 timer->SetActive(true);
47 EXPECT_TRUE(task_runner->HasPendingTask()); 48 EXPECT_TRUE(task_runner->HasPendingTask());
48 timer->SetActive(false); 49 timer->SetActive(false);
49 task_runner->RunPendingTasks(); 50 task_runner->RunPendingTasks();
50 EXPECT_FALSE(client.TickCalled()); 51 EXPECT_FALSE(client.TickCalled());
51 } 52 }
52 53
53 TEST(DelayBasedTimeSourceTest, StartTwiceEnqueuesOneTask) { 54 TEST(DelayBasedTimeSourceTest, StartTwiceEnqueuesOneTask) {
54 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 55 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
55 new base::TestSimpleTaskRunner; 56 new base::TestSimpleTaskRunner;
56 FakeDelayBasedTimeSourceClient client; 57 FakeDelayBasedTimeSourceClient client;
57 std::unique_ptr<FakeDelayBasedTimeSource> timer = 58 std::unique_ptr<FakeDelayBasedTimeSource> timer(
58 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 59 new FakeDelayBasedTimeSource(task_runner.get()));
59 timer->SetClient(&client); 60 timer->SetClient(&client);
61 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
60 timer->SetActive(true); 62 timer->SetActive(true);
61 EXPECT_TRUE(task_runner->HasPendingTask()); 63 EXPECT_TRUE(task_runner->HasPendingTask());
62 task_runner->ClearPendingTasks(); 64 task_runner->ClearPendingTasks();
63 timer->SetActive(true); 65 timer->SetActive(true);
64 EXPECT_FALSE(task_runner->HasPendingTask()); 66 EXPECT_FALSE(task_runner->HasPendingTask());
65 } 67 }
66 68
67 TEST(DelayBasedTimeSourceTest, StartWhenRunningDoesntTick) { 69 TEST(DelayBasedTimeSourceTest, StartWhenRunningDoesntTick) {
68 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 70 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
69 new base::TestSimpleTaskRunner; 71 new base::TestSimpleTaskRunner;
70 FakeDelayBasedTimeSourceClient client; 72 FakeDelayBasedTimeSourceClient client;
71 std::unique_ptr<FakeDelayBasedTimeSource> timer = 73 std::unique_ptr<FakeDelayBasedTimeSource> timer(
72 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 74 new FakeDelayBasedTimeSource(task_runner.get()));
73 timer->SetClient(&client); 75 timer->SetClient(&client);
76 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
74 timer->SetActive(true); 77 timer->SetActive(true);
75 EXPECT_TRUE(task_runner->HasPendingTask()); 78 EXPECT_TRUE(task_runner->HasPendingTask());
76 task_runner->RunPendingTasks(); 79 task_runner->RunPendingTasks();
77 task_runner->ClearPendingTasks(); 80 task_runner->ClearPendingTasks();
78 timer->SetActive(true); 81 timer->SetActive(true);
79 EXPECT_FALSE(task_runner->HasPendingTask()); 82 EXPECT_FALSE(task_runner->HasPendingTask());
80 } 83 }
81 84
82 // At 60Hz, when the tick returns at exactly the requested next time, make sure 85 // At 60Hz, when the tick returns at exactly the requested next time, make sure
83 // a 16ms next delay is posted. 86 // a 16ms next delay is posted.
84 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenExactlyOnRequestedTime) { 87 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenExactlyOnRequestedTime) {
85 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 88 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
86 new base::TestSimpleTaskRunner; 89 new base::TestSimpleTaskRunner;
87 FakeDelayBasedTimeSourceClient client; 90 FakeDelayBasedTimeSourceClient client;
88 std::unique_ptr<FakeDelayBasedTimeSource> timer = 91 std::unique_ptr<FakeDelayBasedTimeSource> timer(
89 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 92 new FakeDelayBasedTimeSource(task_runner.get()));
90 timer->SetClient(&client); 93 timer->SetClient(&client);
94 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
91 timer->SetActive(true); 95 timer->SetActive(true);
92 // Run the first tick. 96 // Run the first tick.
93 task_runner->RunPendingTasks(); 97 task_runner->RunPendingTasks();
94 98
95 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 99 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
96 100
97 timer->SetNow(timer->Now() + Interval()); 101 timer->SetNow(timer->Now() + Interval());
98 task_runner->RunPendingTasks(); 102 task_runner->RunPendingTasks();
99 103
100 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 104 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
101 } 105 }
102 106
103 // At 60Hz, when the tick returns at slightly after the requested next time, 107 // At 60Hz, when the tick returns at slightly after the requested next time,
104 // make sure a 16ms next delay is posted. 108 // make sure a 16ms next delay is posted.
105 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenSlightlyAfterRequestedTime) { 109 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenSlightlyAfterRequestedTime) {
106 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 110 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
107 new base::TestSimpleTaskRunner; 111 new base::TestSimpleTaskRunner;
108 FakeDelayBasedTimeSourceClient client; 112 FakeDelayBasedTimeSourceClient client;
109 std::unique_ptr<FakeDelayBasedTimeSource> timer = 113 std::unique_ptr<FakeDelayBasedTimeSource> timer(
110 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 114 new FakeDelayBasedTimeSource(task_runner.get()));
111 timer->SetClient(&client); 115 timer->SetClient(&client);
116 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
112 timer->SetActive(true); 117 timer->SetActive(true);
113 // Run the first tick. 118 // Run the first tick.
114 task_runner->RunPendingTasks(); 119 task_runner->RunPendingTasks();
115 120
116 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 121 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
117 122
118 timer->SetNow(timer->Now() + Interval() + 123 timer->SetNow(timer->Now() + Interval() +
119 base::TimeDelta::FromMicroseconds(1)); 124 base::TimeDelta::FromMicroseconds(1));
120 task_runner->RunPendingTasks(); 125 task_runner->RunPendingTasks();
121 126
122 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 127 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
123 } 128 }
124 129
125 // At 60Hz, when the tick returns at exactly 2*interval after the requested next 130 // At 60Hz, when the tick returns at exactly 2*interval after the requested next
126 // time, make sure we don't tick unnecessarily. 131 // time, make sure we don't tick unnecessarily.
127 TEST(DelayBasedTimeSourceTest, 132 TEST(DelayBasedTimeSourceTest,
128 NextDelaySaneWhenExactlyTwiceAfterRequestedTime) { 133 NextDelaySaneWhenExactlyTwiceAfterRequestedTime) {
129 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 134 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
130 new base::TestSimpleTaskRunner; 135 new base::TestSimpleTaskRunner;
131 FakeDelayBasedTimeSourceClient client; 136 FakeDelayBasedTimeSourceClient client;
132 std::unique_ptr<FakeDelayBasedTimeSource> timer = 137 std::unique_ptr<FakeDelayBasedTimeSource> timer(
133 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 138 new FakeDelayBasedTimeSource(task_runner.get()));
134 timer->SetClient(&client); 139 timer->SetClient(&client);
140 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
135 timer->SetActive(true); 141 timer->SetActive(true);
136 // Run the first tick. 142 // Run the first tick.
137 task_runner->RunPendingTasks(); 143 task_runner->RunPendingTasks();
138 144
139 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 145 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
140 146
141 timer->SetNow(timer->Now() + 2 * Interval()); 147 timer->SetNow(timer->Now() + 2 * Interval());
142 task_runner->RunPendingTasks(); 148 task_runner->RunPendingTasks();
143 149
144 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 150 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
145 } 151 }
146 152
147 // At 60Hz, when the tick returns at 2*interval and a bit after the requested 153 // At 60Hz, when the tick returns at 2*interval and a bit after the requested
148 // next time, make sure a 16ms next delay is posted. 154 // next time, make sure a 16ms next delay is posted.
149 TEST(DelayBasedTimeSourceTest, 155 TEST(DelayBasedTimeSourceTest,
150 NextDelaySaneWhenSlightlyAfterTwiceRequestedTime) { 156 NextDelaySaneWhenSlightlyAfterTwiceRequestedTime) {
151 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 157 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
152 new base::TestSimpleTaskRunner; 158 new base::TestSimpleTaskRunner;
153 FakeDelayBasedTimeSourceClient client; 159 FakeDelayBasedTimeSourceClient client;
154 std::unique_ptr<FakeDelayBasedTimeSource> timer = 160 std::unique_ptr<FakeDelayBasedTimeSource> timer(
155 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 161 new FakeDelayBasedTimeSource(task_runner.get()));
156 timer->SetClient(&client); 162 timer->SetClient(&client);
163 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
157 timer->SetActive(true); 164 timer->SetActive(true);
158 // Run the first tick. 165 // Run the first tick.
159 task_runner->RunPendingTasks(); 166 task_runner->RunPendingTasks();
160 167
161 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 168 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
162 169
163 timer->SetNow(timer->Now() + 2 * Interval() + 170 timer->SetNow(timer->Now() + 2 * Interval() +
164 base::TimeDelta::FromMicroseconds(1)); 171 base::TimeDelta::FromMicroseconds(1));
165 task_runner->RunPendingTasks(); 172 task_runner->RunPendingTasks();
166 173
167 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 174 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
168 } 175 }
169 176
170 // At 60Hz, when the tick returns halfway to the next frame time, make sure 177 // At 60Hz, when the tick returns halfway to the next frame time, make sure
171 // a correct next delay value is posted. 178 // a correct next delay value is posted.
172 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenHalfAfterRequestedTime) { 179 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenHalfAfterRequestedTime) {
173 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 180 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
174 new base::TestSimpleTaskRunner; 181 new base::TestSimpleTaskRunner;
175 FakeDelayBasedTimeSourceClient client; 182 FakeDelayBasedTimeSourceClient client;
176 std::unique_ptr<FakeDelayBasedTimeSource> timer = 183 std::unique_ptr<FakeDelayBasedTimeSource> timer(
177 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 184 new FakeDelayBasedTimeSource(task_runner.get()));
178 timer->SetClient(&client); 185 timer->SetClient(&client);
186 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
179 timer->SetActive(true); 187 timer->SetActive(true);
180 // Run the first tick. 188 // Run the first tick.
181 task_runner->RunPendingTasks(); 189 task_runner->RunPendingTasks();
182 190
183 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 191 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
184 192
185 timer->SetNow(timer->Now() + Interval() + 193 timer->SetNow(timer->Now() + Interval() +
186 base::TimeDelta::FromMilliseconds(8)); 194 base::TimeDelta::FromMilliseconds(8));
187 task_runner->RunPendingTasks(); 195 task_runner->RunPendingTasks();
188 196
189 EXPECT_EQ(8, task_runner->NextPendingTaskDelay().InMilliseconds()); 197 EXPECT_EQ(8, task_runner->NextPendingTaskDelay().InMilliseconds());
190 } 198 }
191 199
192 TEST(DelayBasedTimeSourceTest, JitteryRuntimeWithFutureTimebases) { 200 TEST(DelayBasedTimeSourceTest, JitteryRuntimeWithFutureTimebases) {
193 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 201 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
194 new base::TestSimpleTaskRunner; 202 new base::TestSimpleTaskRunner;
195 FakeDelayBasedTimeSourceClient client; 203 FakeDelayBasedTimeSourceClient client;
196 std::unique_ptr<FakeDelayBasedTimeSource> timer = 204 std::unique_ptr<FakeDelayBasedTimeSource> timer(
197 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 205 new FakeDelayBasedTimeSource(task_runner.get()));
198 timer->SetClient(&client); 206 timer->SetClient(&client);
207 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
199 timer->SetActive(true); 208 timer->SetActive(true);
200 209
201 // Run the first tick. 210 // Run the first tick.
202 task_runner->RunPendingTasks(); 211 task_runner->RunPendingTasks();
203 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 212 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
204 213
205 base::TimeTicks future_timebase = timer->Now() + Interval() * 10; 214 base::TimeTicks future_timebase = timer->Now() + Interval() * 10;
206 215
207 // 1ms jitter 216 // 1ms jitter
208 base::TimeDelta jitter1 = base::TimeDelta::FromMilliseconds(1); 217 base::TimeDelta jitter1 = base::TimeDelta::FromMilliseconds(1);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 task_runner->RunPendingTasks(); 306 task_runner->RunPendingTasks();
298 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 307 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
299 } 308 }
300 309
301 TEST(DelayBasedTimeSourceTest, AchievesTargetRateWithNoNoise) { 310 TEST(DelayBasedTimeSourceTest, AchievesTargetRateWithNoNoise) {
302 int num_iterations = 10; 311 int num_iterations = 10;
303 312
304 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 313 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
305 new base::TestSimpleTaskRunner; 314 new base::TestSimpleTaskRunner;
306 FakeDelayBasedTimeSourceClient client; 315 FakeDelayBasedTimeSourceClient client;
307 std::unique_ptr<FakeDelayBasedTimeSource> timer = 316 std::unique_ptr<FakeDelayBasedTimeSource> timer(
308 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 317 new FakeDelayBasedTimeSource(task_runner.get()));
309 timer->SetClient(&client); 318 timer->SetClient(&client);
319 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
310 timer->SetActive(true); 320 timer->SetActive(true);
311 321
312 double total_frame_time = 0.0; 322 double total_frame_time = 0.0;
313 for (int i = 0; i < num_iterations; ++i) { 323 for (int i = 0; i < num_iterations; ++i) {
314 int64_t delay_ms = task_runner->NextPendingTaskDelay().InMilliseconds(); 324 int64_t delay_ms = task_runner->NextPendingTaskDelay().InMilliseconds();
315 325
316 // accumulate the "delay" 326 // accumulate the "delay"
317 total_frame_time += delay_ms / 1000.0; 327 total_frame_time += delay_ms / 1000.0;
318 328
319 // Run the callback exactly when asked 329 // Run the callback exactly when asked
320 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(delay_ms)); 330 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(delay_ms));
321 task_runner->RunPendingTasks(); 331 task_runner->RunPendingTasks();
322 } 332 }
323 double average_interval = 333 double average_interval =
324 total_frame_time / static_cast<double>(num_iterations); 334 total_frame_time / static_cast<double>(num_iterations);
325 EXPECT_NEAR(1.0 / 60.0, average_interval, 0.1); 335 EXPECT_NEAR(1.0 / 60.0, average_interval, 0.1);
326 } 336 }
327 337
328 TEST(DelayBasedTimeSourceTest, TestDeactivateWhilePending) { 338 TEST(DelayBasedTimeSourceTest, TestDeactivateWhilePending) {
329 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 339 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
330 new base::TestSimpleTaskRunner; 340 new base::TestSimpleTaskRunner;
331 FakeDelayBasedTimeSourceClient client; 341 FakeDelayBasedTimeSourceClient client;
332 std::unique_ptr<FakeDelayBasedTimeSource> timer = 342 std::unique_ptr<FakeDelayBasedTimeSource> timer(
333 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 343 new FakeDelayBasedTimeSource(task_runner.get()));
334 timer->SetClient(&client); 344 timer->SetClient(&client);
345 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
335 timer->SetActive(true); // Should post a task. 346 timer->SetActive(true); // Should post a task.
336 timer->SetActive(false); 347 timer->SetActive(false);
337 timer = NULL; 348 timer = NULL;
338 // Should run the posted task without crashing. 349 // Should run the posted task without crashing.
339 EXPECT_TRUE(task_runner->HasPendingTask()); 350 EXPECT_TRUE(task_runner->HasPendingTask());
340 task_runner->RunPendingTasks(); 351 task_runner->RunPendingTasks();
341 } 352 }
342 353
343 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateBeforeNextTickTime) { 354 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateBeforeNextTickTime) {
344 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 355 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
345 new base::TestSimpleTaskRunner; 356 new base::TestSimpleTaskRunner;
346 FakeDelayBasedTimeSourceClient client; 357 FakeDelayBasedTimeSourceClient client;
347 std::unique_ptr<FakeDelayBasedTimeSource> timer = 358 std::unique_ptr<FakeDelayBasedTimeSource> timer(
348 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 359 new FakeDelayBasedTimeSource(task_runner.get()));
349 timer->SetClient(&client); 360 timer->SetClient(&client);
361 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
350 362
351 // Should run the activate task, and pick up a new timebase. 363 // Should run the activate task, and pick up a new timebase.
352 timer->SetActive(true); 364 timer->SetActive(true);
353 task_runner->RunPendingTasks(); 365 task_runner->RunPendingTasks();
354 366
355 // Stop the timer 367 // Stop the timer
356 timer->SetActive(false); 368 timer->SetActive(false);
357 369
358 // Task will be pending anyway, run it 370 // Task will be pending anyway, run it
359 task_runner->RunPendingTasks(); 371 task_runner->RunPendingTasks();
360 372
361 // Start the timer again, but before the next tick time the timer previously 373 // Start the timer again, but before the next tick time the timer previously
362 // planned on using. That same tick time should still be targeted. 374 // planned on using. That same tick time should still be targeted.
363 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(4)); 375 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(4));
364 timer->SetActive(true); 376 timer->SetActive(true);
365 EXPECT_EQ(12, task_runner->NextPendingTaskDelay().InMilliseconds()); 377 EXPECT_EQ(12, task_runner->NextPendingTaskDelay().InMilliseconds());
366 } 378 }
367 379
368 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateAfterNextTickTime) { 380 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateAfterNextTickTime) {
369 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 381 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
370 new base::TestSimpleTaskRunner; 382 new base::TestSimpleTaskRunner;
371 FakeDelayBasedTimeSourceClient client; 383 FakeDelayBasedTimeSourceClient client;
372 std::unique_ptr<FakeDelayBasedTimeSource> timer = 384 std::unique_ptr<FakeDelayBasedTimeSource> timer(
373 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 385 new FakeDelayBasedTimeSource(task_runner.get()));
374 timer->SetClient(&client); 386 timer->SetClient(&client);
387 timer->SetTimebaseAndInterval(base::TimeTicks(), Interval());
375 388
376 // Should run the activate task, and pick up a new timebase. 389 // Should run the activate task, and pick up a new timebase.
377 timer->SetActive(true); 390 timer->SetActive(true);
378 task_runner->RunPendingTasks(); 391 task_runner->RunPendingTasks();
379 392
380 // Stop the timer. 393 // Stop the timer.
381 timer->SetActive(false); 394 timer->SetActive(false);
382 395
383 // Task will be pending anyway, run it. 396 // Task will be pending anyway, run it.
384 task_runner->RunPendingTasks(); 397 task_runner->RunPendingTasks();
385 398
386 // Start the timer again, but before the next tick time the timer previously 399 // Start the timer again, but before the next tick time the timer previously
387 // planned on using. That same tick time should still be targeted. 400 // planned on using. That same tick time should still be targeted.
388 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(20)); 401 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(20));
389 timer->SetActive(true); 402 timer->SetActive(true);
390 EXPECT_EQ(13, task_runner->NextPendingTaskDelay().InMilliseconds()); 403 EXPECT_EQ(13, task_runner->NextPendingTaskDelay().InMilliseconds());
391 } 404 }
392 405
393 } // namespace 406 } // namespace
394 } // namespace cc 407 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/delay_based_time_source.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698