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

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

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase Created 4 years, 8 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.h ('k') | cc/scheduler/scheduler.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/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 scoped_ptr<FakeDelayBasedTimeSource> timer = 25 std::unique_ptr<FakeDelayBasedTimeSource> timer =
26 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 26 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
27 timer->SetClient(&client); 27 timer->SetClient(&client);
28 28
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 scoped_ptr<FakeDelayBasedTimeSource> timer = 43 std::unique_ptr<FakeDelayBasedTimeSource> timer =
44 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 44 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
45 timer->SetClient(&client); 45 timer->SetClient(&client);
46 timer->SetActive(true); 46 timer->SetActive(true);
47 EXPECT_TRUE(task_runner->HasPendingTask()); 47 EXPECT_TRUE(task_runner->HasPendingTask());
48 timer->SetActive(false); 48 timer->SetActive(false);
49 task_runner->RunPendingTasks(); 49 task_runner->RunPendingTasks();
50 EXPECT_FALSE(client.TickCalled()); 50 EXPECT_FALSE(client.TickCalled());
51 } 51 }
52 52
53 TEST(DelayBasedTimeSourceTest, StartTwiceEnqueuesOneTask) { 53 TEST(DelayBasedTimeSourceTest, StartTwiceEnqueuesOneTask) {
54 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 54 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
55 new base::TestSimpleTaskRunner; 55 new base::TestSimpleTaskRunner;
56 FakeDelayBasedTimeSourceClient client; 56 FakeDelayBasedTimeSourceClient client;
57 scoped_ptr<FakeDelayBasedTimeSource> timer = 57 std::unique_ptr<FakeDelayBasedTimeSource> timer =
58 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 58 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
59 timer->SetClient(&client); 59 timer->SetClient(&client);
60 timer->SetActive(true); 60 timer->SetActive(true);
61 EXPECT_TRUE(task_runner->HasPendingTask()); 61 EXPECT_TRUE(task_runner->HasPendingTask());
62 task_runner->ClearPendingTasks(); 62 task_runner->ClearPendingTasks();
63 timer->SetActive(true); 63 timer->SetActive(true);
64 EXPECT_FALSE(task_runner->HasPendingTask()); 64 EXPECT_FALSE(task_runner->HasPendingTask());
65 } 65 }
66 66
67 TEST(DelayBasedTimeSourceTest, StartWhenRunningDoesntTick) { 67 TEST(DelayBasedTimeSourceTest, StartWhenRunningDoesntTick) {
68 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 68 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
69 new base::TestSimpleTaskRunner; 69 new base::TestSimpleTaskRunner;
70 FakeDelayBasedTimeSourceClient client; 70 FakeDelayBasedTimeSourceClient client;
71 scoped_ptr<FakeDelayBasedTimeSource> timer = 71 std::unique_ptr<FakeDelayBasedTimeSource> timer =
72 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 72 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
73 timer->SetClient(&client); 73 timer->SetClient(&client);
74 timer->SetActive(true); 74 timer->SetActive(true);
75 EXPECT_TRUE(task_runner->HasPendingTask()); 75 EXPECT_TRUE(task_runner->HasPendingTask());
76 task_runner->RunPendingTasks(); 76 task_runner->RunPendingTasks();
77 task_runner->ClearPendingTasks(); 77 task_runner->ClearPendingTasks();
78 timer->SetActive(true); 78 timer->SetActive(true);
79 EXPECT_FALSE(task_runner->HasPendingTask()); 79 EXPECT_FALSE(task_runner->HasPendingTask());
80 } 80 }
81 81
82 // At 60Hz, when the tick returns at exactly the requested next time, make sure 82 // At 60Hz, when the tick returns at exactly the requested next time, make sure
83 // a 16ms next delay is posted. 83 // a 16ms next delay is posted.
84 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenExactlyOnRequestedTime) { 84 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenExactlyOnRequestedTime) {
85 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 85 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
86 new base::TestSimpleTaskRunner; 86 new base::TestSimpleTaskRunner;
87 FakeDelayBasedTimeSourceClient client; 87 FakeDelayBasedTimeSourceClient client;
88 scoped_ptr<FakeDelayBasedTimeSource> timer = 88 std::unique_ptr<FakeDelayBasedTimeSource> timer =
89 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 89 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
90 timer->SetClient(&client); 90 timer->SetClient(&client);
91 timer->SetActive(true); 91 timer->SetActive(true);
92 // Run the first tick. 92 // Run the first tick.
93 task_runner->RunPendingTasks(); 93 task_runner->RunPendingTasks();
94 94
95 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 95 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
96 96
97 timer->SetNow(timer->Now() + Interval()); 97 timer->SetNow(timer->Now() + Interval());
98 task_runner->RunPendingTasks(); 98 task_runner->RunPendingTasks();
99 99
100 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 100 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
101 } 101 }
102 102
103 // At 60Hz, when the tick returns at slightly after the requested next time, 103 // At 60Hz, when the tick returns at slightly after the requested next time,
104 // make sure a 16ms next delay is posted. 104 // make sure a 16ms next delay is posted.
105 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenSlightlyAfterRequestedTime) { 105 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenSlightlyAfterRequestedTime) {
106 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 106 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
107 new base::TestSimpleTaskRunner; 107 new base::TestSimpleTaskRunner;
108 FakeDelayBasedTimeSourceClient client; 108 FakeDelayBasedTimeSourceClient client;
109 scoped_ptr<FakeDelayBasedTimeSource> timer = 109 std::unique_ptr<FakeDelayBasedTimeSource> timer =
110 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 110 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
111 timer->SetClient(&client); 111 timer->SetClient(&client);
112 timer->SetActive(true); 112 timer->SetActive(true);
113 // Run the first tick. 113 // Run the first tick.
114 task_runner->RunPendingTasks(); 114 task_runner->RunPendingTasks();
115 115
116 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 116 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
117 117
118 timer->SetNow(timer->Now() + Interval() + 118 timer->SetNow(timer->Now() + Interval() +
119 base::TimeDelta::FromMicroseconds(1)); 119 base::TimeDelta::FromMicroseconds(1));
120 task_runner->RunPendingTasks(); 120 task_runner->RunPendingTasks();
121 121
122 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 122 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
123 } 123 }
124 124
125 // At 60Hz, when the tick returns at exactly 2*interval after the requested next 125 // At 60Hz, when the tick returns at exactly 2*interval after the requested next
126 // time, make sure we don't tick unnecessarily. 126 // time, make sure we don't tick unnecessarily.
127 TEST(DelayBasedTimeSourceTest, 127 TEST(DelayBasedTimeSourceTest,
128 NextDelaySaneWhenExactlyTwiceAfterRequestedTime) { 128 NextDelaySaneWhenExactlyTwiceAfterRequestedTime) {
129 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 129 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
130 new base::TestSimpleTaskRunner; 130 new base::TestSimpleTaskRunner;
131 FakeDelayBasedTimeSourceClient client; 131 FakeDelayBasedTimeSourceClient client;
132 scoped_ptr<FakeDelayBasedTimeSource> timer = 132 std::unique_ptr<FakeDelayBasedTimeSource> timer =
133 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 133 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
134 timer->SetClient(&client); 134 timer->SetClient(&client);
135 timer->SetActive(true); 135 timer->SetActive(true);
136 // Run the first tick. 136 // Run the first tick.
137 task_runner->RunPendingTasks(); 137 task_runner->RunPendingTasks();
138 138
139 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 139 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
140 140
141 timer->SetNow(timer->Now() + 2 * Interval()); 141 timer->SetNow(timer->Now() + 2 * Interval());
142 task_runner->RunPendingTasks(); 142 task_runner->RunPendingTasks();
143 143
144 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 144 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
145 } 145 }
146 146
147 // At 60Hz, when the tick returns at 2*interval and a bit after the requested 147 // 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. 148 // next time, make sure a 16ms next delay is posted.
149 TEST(DelayBasedTimeSourceTest, 149 TEST(DelayBasedTimeSourceTest,
150 NextDelaySaneWhenSlightlyAfterTwiceRequestedTime) { 150 NextDelaySaneWhenSlightlyAfterTwiceRequestedTime) {
151 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 151 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
152 new base::TestSimpleTaskRunner; 152 new base::TestSimpleTaskRunner;
153 FakeDelayBasedTimeSourceClient client; 153 FakeDelayBasedTimeSourceClient client;
154 scoped_ptr<FakeDelayBasedTimeSource> timer = 154 std::unique_ptr<FakeDelayBasedTimeSource> timer =
155 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 155 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
156 timer->SetClient(&client); 156 timer->SetClient(&client);
157 timer->SetActive(true); 157 timer->SetActive(true);
158 // Run the first tick. 158 // Run the first tick.
159 task_runner->RunPendingTasks(); 159 task_runner->RunPendingTasks();
160 160
161 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 161 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
162 162
163 timer->SetNow(timer->Now() + 2 * Interval() + 163 timer->SetNow(timer->Now() + 2 * Interval() +
164 base::TimeDelta::FromMicroseconds(1)); 164 base::TimeDelta::FromMicroseconds(1));
165 task_runner->RunPendingTasks(); 165 task_runner->RunPendingTasks();
166 166
167 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 167 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
168 } 168 }
169 169
170 // At 60Hz, when the tick returns halfway to the next frame time, make sure 170 // At 60Hz, when the tick returns halfway to the next frame time, make sure
171 // a correct next delay value is posted. 171 // a correct next delay value is posted.
172 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenHalfAfterRequestedTime) { 172 TEST(DelayBasedTimeSourceTest, NextDelaySaneWhenHalfAfterRequestedTime) {
173 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 173 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
174 new base::TestSimpleTaskRunner; 174 new base::TestSimpleTaskRunner;
175 FakeDelayBasedTimeSourceClient client; 175 FakeDelayBasedTimeSourceClient client;
176 scoped_ptr<FakeDelayBasedTimeSource> timer = 176 std::unique_ptr<FakeDelayBasedTimeSource> timer =
177 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 177 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
178 timer->SetClient(&client); 178 timer->SetClient(&client);
179 timer->SetActive(true); 179 timer->SetActive(true);
180 // Run the first tick. 180 // Run the first tick.
181 task_runner->RunPendingTasks(); 181 task_runner->RunPendingTasks();
182 182
183 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 183 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
184 184
185 timer->SetNow(timer->Now() + Interval() + 185 timer->SetNow(timer->Now() + Interval() +
186 base::TimeDelta::FromMilliseconds(8)); 186 base::TimeDelta::FromMilliseconds(8));
187 task_runner->RunPendingTasks(); 187 task_runner->RunPendingTasks();
188 188
189 EXPECT_EQ(8, task_runner->NextPendingTaskDelay().InMilliseconds()); 189 EXPECT_EQ(8, task_runner->NextPendingTaskDelay().InMilliseconds());
190 } 190 }
191 191
192 TEST(DelayBasedTimeSourceTest, HandlesSignificantTimebaseChangesImmediately) { 192 TEST(DelayBasedTimeSourceTest, HandlesSignificantTimebaseChangesImmediately) {
193 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 193 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
194 new base::TestSimpleTaskRunner; 194 new base::TestSimpleTaskRunner;
195 FakeDelayBasedTimeSourceClient client; 195 FakeDelayBasedTimeSourceClient client;
196 scoped_ptr<FakeDelayBasedTimeSource> timer = 196 std::unique_ptr<FakeDelayBasedTimeSource> timer =
197 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 197 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
198 timer->SetClient(&client); 198 timer->SetClient(&client);
199 timer->SetActive(true); 199 timer->SetActive(true);
200 // Run the first tick. 200 // Run the first tick.
201 task_runner->RunPendingTasks(); 201 task_runner->RunPendingTasks();
202 202
203 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 203 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
204 204
205 // Tick, then shift timebase by +7ms. 205 // Tick, then shift timebase by +7ms.
206 timer->SetNow(timer->Now() + Interval()); 206 timer->SetNow(timer->Now() + Interval());
(...skipping 23 matching lines...) Expand all
230 timer->SetTimebaseAndInterval(base::TimeTicks() + Interval(), Interval()); 230 timer->SetTimebaseAndInterval(base::TimeTicks() + Interval(), Interval());
231 231
232 EXPECT_FALSE(client.TickCalled()); // Make sure pending tasks were canceled. 232 EXPECT_FALSE(client.TickCalled()); // Make sure pending tasks were canceled.
233 EXPECT_EQ(16 - 7, task_runner->NextPendingTaskDelay().InMilliseconds()); 233 EXPECT_EQ(16 - 7, task_runner->NextPendingTaskDelay().InMilliseconds());
234 } 234 }
235 235
236 TEST(DelayBasedTimeSourceTest, HanldlesSignificantIntervalChangesImmediately) { 236 TEST(DelayBasedTimeSourceTest, HanldlesSignificantIntervalChangesImmediately) {
237 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 237 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
238 new base::TestSimpleTaskRunner; 238 new base::TestSimpleTaskRunner;
239 FakeDelayBasedTimeSourceClient client; 239 FakeDelayBasedTimeSourceClient client;
240 scoped_ptr<FakeDelayBasedTimeSource> timer = 240 std::unique_ptr<FakeDelayBasedTimeSource> timer =
241 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 241 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
242 timer->SetClient(&client); 242 timer->SetClient(&client);
243 timer->SetActive(true); 243 timer->SetActive(true);
244 // Run the first tick. 244 // Run the first tick.
245 task_runner->RunPendingTasks(); 245 task_runner->RunPendingTasks();
246 246
247 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 247 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
248 248
249 // Tick, then double the interval. 249 // Tick, then double the interval.
250 timer->SetNow(timer->Now() + Interval()); 250 timer->SetNow(timer->Now() + Interval());
(...skipping 21 matching lines...) Expand all
272 timer->SetTimebaseAndInterval(base::TimeTicks() + Interval() * 3, Interval()); 272 timer->SetTimebaseAndInterval(base::TimeTicks() + Interval() * 3, Interval());
273 273
274 EXPECT_FALSE(client.TickCalled()); // Make sure pending tasks were canceled. 274 EXPECT_FALSE(client.TickCalled()); // Make sure pending tasks were canceled.
275 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 275 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
276 } 276 }
277 277
278 TEST(DelayBasedTimeSourceTest, JitteryRuntimeWithFutureTimebases) { 278 TEST(DelayBasedTimeSourceTest, JitteryRuntimeWithFutureTimebases) {
279 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 279 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
280 new base::TestSimpleTaskRunner; 280 new base::TestSimpleTaskRunner;
281 FakeDelayBasedTimeSourceClient client; 281 FakeDelayBasedTimeSourceClient client;
282 scoped_ptr<FakeDelayBasedTimeSource> timer = 282 std::unique_ptr<FakeDelayBasedTimeSource> timer =
283 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 283 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
284 timer->SetClient(&client); 284 timer->SetClient(&client);
285 timer->SetActive(true); 285 timer->SetActive(true);
286 286
287 // Run the first tick. 287 // Run the first tick.
288 task_runner->RunPendingTasks(); 288 task_runner->RunPendingTasks();
289 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 289 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
290 290
291 base::TimeTicks future_timebase = timer->Now() + Interval() * 10; 291 base::TimeTicks future_timebase = timer->Now() + Interval() * 10;
292 292
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 task_runner->RunPendingTasks(); 383 task_runner->RunPendingTasks();
384 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds()); 384 EXPECT_EQ(16, task_runner->NextPendingTaskDelay().InMilliseconds());
385 } 385 }
386 386
387 TEST(DelayBasedTimeSourceTest, AchievesTargetRateWithNoNoise) { 387 TEST(DelayBasedTimeSourceTest, AchievesTargetRateWithNoNoise) {
388 int num_iterations = 10; 388 int num_iterations = 10;
389 389
390 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 390 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
391 new base::TestSimpleTaskRunner; 391 new base::TestSimpleTaskRunner;
392 FakeDelayBasedTimeSourceClient client; 392 FakeDelayBasedTimeSourceClient client;
393 scoped_ptr<FakeDelayBasedTimeSource> timer = 393 std::unique_ptr<FakeDelayBasedTimeSource> timer =
394 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 394 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
395 timer->SetClient(&client); 395 timer->SetClient(&client);
396 timer->SetActive(true); 396 timer->SetActive(true);
397 397
398 double total_frame_time = 0.0; 398 double total_frame_time = 0.0;
399 for (int i = 0; i < num_iterations; ++i) { 399 for (int i = 0; i < num_iterations; ++i) {
400 int64_t delay_ms = task_runner->NextPendingTaskDelay().InMilliseconds(); 400 int64_t delay_ms = task_runner->NextPendingTaskDelay().InMilliseconds();
401 401
402 // accumulate the "delay" 402 // accumulate the "delay"
403 total_frame_time += delay_ms / 1000.0; 403 total_frame_time += delay_ms / 1000.0;
404 404
405 // Run the callback exactly when asked 405 // Run the callback exactly when asked
406 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(delay_ms)); 406 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(delay_ms));
407 task_runner->RunPendingTasks(); 407 task_runner->RunPendingTasks();
408 } 408 }
409 double average_interval = 409 double average_interval =
410 total_frame_time / static_cast<double>(num_iterations); 410 total_frame_time / static_cast<double>(num_iterations);
411 EXPECT_NEAR(1.0 / 60.0, average_interval, 0.1); 411 EXPECT_NEAR(1.0 / 60.0, average_interval, 0.1);
412 } 412 }
413 413
414 TEST(DelayBasedTimeSourceTest, TestDeactivateWhilePending) { 414 TEST(DelayBasedTimeSourceTest, TestDeactivateWhilePending) {
415 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 415 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
416 new base::TestSimpleTaskRunner; 416 new base::TestSimpleTaskRunner;
417 FakeDelayBasedTimeSourceClient client; 417 FakeDelayBasedTimeSourceClient client;
418 scoped_ptr<FakeDelayBasedTimeSource> timer = 418 std::unique_ptr<FakeDelayBasedTimeSource> timer =
419 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 419 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
420 timer->SetClient(&client); 420 timer->SetClient(&client);
421 timer->SetActive(true); // Should post a task. 421 timer->SetActive(true); // Should post a task.
422 timer->SetActive(false); 422 timer->SetActive(false);
423 timer = NULL; 423 timer = NULL;
424 // Should run the posted task without crashing. 424 // Should run the posted task without crashing.
425 EXPECT_TRUE(task_runner->HasPendingTask()); 425 EXPECT_TRUE(task_runner->HasPendingTask());
426 task_runner->RunPendingTasks(); 426 task_runner->RunPendingTasks();
427 } 427 }
428 428
429 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateBeforeNextTickTime) { 429 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateBeforeNextTickTime) {
430 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 430 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
431 new base::TestSimpleTaskRunner; 431 new base::TestSimpleTaskRunner;
432 FakeDelayBasedTimeSourceClient client; 432 FakeDelayBasedTimeSourceClient client;
433 scoped_ptr<FakeDelayBasedTimeSource> timer = 433 std::unique_ptr<FakeDelayBasedTimeSource> timer =
434 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 434 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
435 timer->SetClient(&client); 435 timer->SetClient(&client);
436 436
437 // Should run the activate task, and pick up a new timebase. 437 // Should run the activate task, and pick up a new timebase.
438 timer->SetActive(true); 438 timer->SetActive(true);
439 task_runner->RunPendingTasks(); 439 task_runner->RunPendingTasks();
440 440
441 // Stop the timer 441 // Stop the timer
442 timer->SetActive(false); 442 timer->SetActive(false);
443 443
444 // Task will be pending anyway, run it 444 // Task will be pending anyway, run it
445 task_runner->RunPendingTasks(); 445 task_runner->RunPendingTasks();
446 446
447 // Start the timer again, but before the next tick time the timer previously 447 // Start the timer again, but before the next tick time the timer previously
448 // planned on using. That same tick time should still be targeted. 448 // planned on using. That same tick time should still be targeted.
449 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(4)); 449 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(4));
450 timer->SetActive(true); 450 timer->SetActive(true);
451 EXPECT_EQ(12, task_runner->NextPendingTaskDelay().InMilliseconds()); 451 EXPECT_EQ(12, task_runner->NextPendingTaskDelay().InMilliseconds());
452 } 452 }
453 453
454 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateAfterNextTickTime) { 454 TEST(DelayBasedTimeSourceTest, TestDeactivateAndReactivateAfterNextTickTime) {
455 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 455 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
456 new base::TestSimpleTaskRunner; 456 new base::TestSimpleTaskRunner;
457 FakeDelayBasedTimeSourceClient client; 457 FakeDelayBasedTimeSourceClient client;
458 scoped_ptr<FakeDelayBasedTimeSource> timer = 458 std::unique_ptr<FakeDelayBasedTimeSource> timer =
459 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get()); 459 FakeDelayBasedTimeSource::Create(Interval(), task_runner.get());
460 timer->SetClient(&client); 460 timer->SetClient(&client);
461 461
462 // Should run the activate task, and pick up a new timebase. 462 // Should run the activate task, and pick up a new timebase.
463 timer->SetActive(true); 463 timer->SetActive(true);
464 task_runner->RunPendingTasks(); 464 task_runner->RunPendingTasks();
465 465
466 // Stop the timer. 466 // Stop the timer.
467 timer->SetActive(false); 467 timer->SetActive(false);
468 468
469 // Task will be pending anyway, run it. 469 // Task will be pending anyway, run it.
470 task_runner->RunPendingTasks(); 470 task_runner->RunPendingTasks();
471 471
472 // Start the timer again, but before the next tick time the timer previously 472 // Start the timer again, but before the next tick time the timer previously
473 // planned on using. That same tick time should still be targeted. 473 // planned on using. That same tick time should still be targeted.
474 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(20)); 474 timer->SetNow(timer->Now() + base::TimeDelta::FromMilliseconds(20));
475 timer->SetActive(true); 475 timer->SetActive(true);
476 EXPECT_EQ(13, task_runner->NextPendingTaskDelay().InMilliseconds()); 476 EXPECT_EQ(13, task_runner->NextPendingTaskDelay().InMilliseconds());
477 } 477 }
478 478
479 } // namespace 479 } // namespace
480 } // namespace cc 480 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/delay_based_time_source.h ('k') | cc/scheduler/scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698