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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc

Issue 2876513002: Use WTF::TimeDelta to specify delays on WebTaskRunner (Closed)
Patch Set: mac fix Created 3 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "platform/scheduler/renderer/web_view_scheduler_impl.h" 5 #include "platform/scheduler/renderer/web_view_scheduler_impl.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 return WTF::Bind(&RunRepeatingTask, WTF::Passed(std::move(task_runner)), 88 return WTF::Bind(&RunRepeatingTask, WTF::Passed(std::move(task_runner)),
89 WTF::Unretained(run_count)); 89 WTF::Unretained(run_count));
90 } 90 }
91 91
92 void RunRepeatingTask(RefPtr<blink::WebTaskRunner> task_runner, 92 void RunRepeatingTask(RefPtr<blink::WebTaskRunner> task_runner,
93 int* run_count) { 93 int* run_count) {
94 ++*run_count; 94 ++*run_count;
95 blink::WebTaskRunner* task_runner_ptr = task_runner.Get(); 95 blink::WebTaskRunner* task_runner_ptr = task_runner.Get();
96 task_runner_ptr->PostDelayedTask( 96 task_runner_ptr->PostDelayedTask(
97 BLINK_FROM_HERE, MakeRepeatingTask(std::move(task_runner), run_count), 97 BLINK_FROM_HERE, MakeRepeatingTask(std::move(task_runner), run_count),
98 1.0); 98 TimeDelta::FromMilliseconds(1));
99 } 99 }
100 100
101 } // namespace 101 } // namespace
102 102
103 TEST_F(WebViewSchedulerImplTest, RepeatingTimer_PageInForeground) { 103 TEST_F(WebViewSchedulerImplTest, RepeatingTimer_PageInForeground) {
104 web_view_scheduler_->SetPageVisible(true); 104 web_view_scheduler_->SetPageVisible(true);
105 105
106 int run_count = 0; 106 int run_count = 0;
107 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 107 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
108 BLINK_FROM_HERE, 108 BLINK_FROM_HERE,
109 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), 109 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count),
110 1.0); 110 TimeDelta::FromMilliseconds(1));
111 111
112 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 112 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
113 EXPECT_EQ(1000, run_count); 113 EXPECT_EQ(1000, run_count);
114 } 114 }
115 115
116 TEST_F(WebViewSchedulerImplTest, 116 TEST_F(WebViewSchedulerImplTest,
117 RepeatingTimer_PageInBackgroundThenForeground) { 117 RepeatingTimer_PageInBackgroundThenForeground) {
118 web_view_scheduler_->SetPageVisible(false); 118 web_view_scheduler_->SetPageVisible(false);
119 119
120 int run_count = 0; 120 int run_count = 0;
121 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 121 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
122 BLINK_FROM_HERE, 122 BLINK_FROM_HERE,
123 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), 123 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count),
124 1.0); 124 TimeDelta::FromMilliseconds(1));
125 125
126 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 126 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
127 EXPECT_EQ(1000, run_count); 127 EXPECT_EQ(1000, run_count);
128 128
129 // The task queue isn't throttled at all until it's been in the background for 129 // The task queue isn't throttled at all until it's been in the background for
130 // a 10 second grace period. 130 // a 10 second grace period.
131 clock_->Advance(base::TimeDelta::FromSeconds(10)); 131 clock_->Advance(base::TimeDelta::FromSeconds(10));
132 132
133 run_count = 0; 133 run_count = 0;
134 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 134 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
(...skipping 15 matching lines...) Expand all
150 150
151 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler = 151 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler =
152 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr); 152 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr);
153 blink::WebTaskRunner* timer_task_runner = 153 blink::WebTaskRunner* timer_task_runner =
154 web_frame_scheduler->TimerTaskRunner().Get(); 154 web_frame_scheduler->TimerTaskRunner().Get();
155 155
156 int run_count = 0; 156 int run_count = 0;
157 timer_task_runner->PostDelayedTask( 157 timer_task_runner->PostDelayedTask(
158 BLINK_FROM_HERE, 158 BLINK_FROM_HERE,
159 MakeRepeatingTask(web_frame_scheduler->TimerTaskRunner(), &run_count), 159 MakeRepeatingTask(web_frame_scheduler->TimerTaskRunner(), &run_count),
160 1.0); 160 TimeDelta::FromMilliseconds(1));
161 161
162 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 162 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
163 EXPECT_EQ(1000, run_count); 163 EXPECT_EQ(1000, run_count);
164 164
165 // The task queue isn't throttled at all until it's been in the background for 165 // The task queue isn't throttled at all until it's been in the background for
166 // a 10 second grace period. 166 // a 10 second grace period.
167 clock_->Advance(base::TimeDelta::FromSeconds(10)); 167 clock_->Advance(base::TimeDelta::FromSeconds(10));
168 168
169 run_count = 0; 169 run_count = 0;
170 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 170 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
(...skipping 10 matching lines...) Expand all
181 // due to run before the 1s period started. 181 // due to run before the 1s period started.
182 } 182 }
183 183
184 TEST_F(WebViewSchedulerImplTest, RepeatingLoadingTask_PageInBackground) { 184 TEST_F(WebViewSchedulerImplTest, RepeatingLoadingTask_PageInBackground) {
185 web_view_scheduler_->SetPageVisible(false); 185 web_view_scheduler_->SetPageVisible(false);
186 186
187 int run_count = 0; 187 int run_count = 0;
188 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask( 188 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask(
189 BLINK_FROM_HERE, 189 BLINK_FROM_HERE,
190 MakeRepeatingTask(web_frame_scheduler_->LoadingTaskRunner(), &run_count), 190 MakeRepeatingTask(web_frame_scheduler_->LoadingTaskRunner(), &run_count),
191 1.0); 191 TimeDelta::FromMilliseconds(1));
192 192
193 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 193 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
194 EXPECT_EQ(1000, run_count); // Loading tasks should not be throttled 194 EXPECT_EQ(1000, run_count); // Loading tasks should not be throttled
195 } 195 }
196 196
197 TEST_F(WebViewSchedulerImplTest, RepeatingTimers_OneBackgroundOneForeground) { 197 TEST_F(WebViewSchedulerImplTest, RepeatingTimers_OneBackgroundOneForeground) {
198 std::unique_ptr<WebViewSchedulerImpl> web_view_scheduler2( 198 std::unique_ptr<WebViewSchedulerImpl> web_view_scheduler2(
199 new WebViewSchedulerImpl(nullptr, nullptr, scheduler_.get(), false)); 199 new WebViewSchedulerImpl(nullptr, nullptr, scheduler_.get(), false));
200 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler2 = 200 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler2 =
201 web_view_scheduler2->CreateWebFrameSchedulerImpl(nullptr); 201 web_view_scheduler2->CreateWebFrameSchedulerImpl(nullptr);
202 202
203 web_view_scheduler_->SetPageVisible(true); 203 web_view_scheduler_->SetPageVisible(true);
204 web_view_scheduler2->SetPageVisible(false); 204 web_view_scheduler2->SetPageVisible(false);
205 205
206 // Advance past the no-throttling grace period. 206 // Advance past the no-throttling grace period.
207 clock_->Advance(base::TimeDelta::FromSeconds(10)); 207 clock_->Advance(base::TimeDelta::FromSeconds(10));
208 208
209 int run_count1 = 0; 209 int run_count1 = 0;
210 int run_count2 = 0; 210 int run_count2 = 0;
211 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 211 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
212 BLINK_FROM_HERE, 212 BLINK_FROM_HERE,
213 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count1), 213 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count1),
214 1.0); 214 TimeDelta::FromMilliseconds(1));
215 web_frame_scheduler2->TimerTaskRunner()->PostDelayedTask( 215 web_frame_scheduler2->TimerTaskRunner()->PostDelayedTask(
216 BLINK_FROM_HERE, 216 BLINK_FROM_HERE,
217 MakeRepeatingTask(web_frame_scheduler2->TimerTaskRunner(), &run_count2), 217 MakeRepeatingTask(web_frame_scheduler2->TimerTaskRunner(), &run_count2),
218 1.0); 218 TimeDelta::FromMilliseconds(1));
219 219
220 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 220 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
221 EXPECT_EQ(1000, run_count1); 221 EXPECT_EQ(1000, run_count1);
222 EXPECT_EQ(1, run_count2); 222 EXPECT_EQ(1, run_count2);
223 } 223 }
224 224
225 namespace { 225 namespace {
226 226
227 void RunVirtualTimeRecorderTask(base::SimpleTestTickClock* clock, 227 void RunVirtualTimeRecorderTask(base::SimpleTestTickClock* clock,
228 RefPtr<blink::WebTaskRunner> web_task_runner, 228 RefPtr<blink::WebTaskRunner> web_task_runner,
(...skipping 25 matching lines...) Expand all
254 ->MonotonicallyIncreasingVirtualTimeSeconds() * 254 ->MonotonicallyIncreasingVirtualTimeSeconds() *
255 1000.0; 255 1000.0;
256 256
257 web_view_scheduler_->EnableVirtualTime(); 257 web_view_scheduler_->EnableVirtualTime();
258 258
259 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 259 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
260 BLINK_FROM_HERE, 260 BLINK_FROM_HERE,
261 MakeVirtualTimeRecorderTask(clock_.get(), 261 MakeVirtualTimeRecorderTask(clock_.get(),
262 web_frame_scheduler_->TimerTaskRunner(), 262 web_frame_scheduler_->TimerTaskRunner(),
263 &real_times, &virtual_times_ms), 263 &real_times, &virtual_times_ms),
264 2.0); 264 TimeDelta::FromMilliseconds(2));
265 265
266 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 266 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
267 BLINK_FROM_HERE, 267 BLINK_FROM_HERE,
268 MakeVirtualTimeRecorderTask(clock_.get(), 268 MakeVirtualTimeRecorderTask(clock_.get(),
269 web_frame_scheduler_->TimerTaskRunner(), 269 web_frame_scheduler_->TimerTaskRunner(),
270 &real_times, &virtual_times_ms), 270 &real_times, &virtual_times_ms),
271 20.0); 271 TimeDelta::FromMilliseconds(20));
272 272
273 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 273 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
274 BLINK_FROM_HERE, 274 BLINK_FROM_HERE,
275 MakeVirtualTimeRecorderTask(clock_.get(), 275 MakeVirtualTimeRecorderTask(clock_.get(),
276 web_frame_scheduler_->TimerTaskRunner(), 276 web_frame_scheduler_->TimerTaskRunner(),
277 &real_times, &virtual_times_ms), 277 &real_times, &virtual_times_ms),
278 200.0); 278 TimeDelta::FromMilliseconds(200));
279 279
280 mock_task_runner_->RunUntilIdle(); 280 mock_task_runner_->RunUntilIdle();
281 281
282 EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time, 282 EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time,
283 initial_real_time)); 283 initial_real_time));
284 EXPECT_THAT(virtual_times_ms, ElementsAre(initial_virtual_time_ms + 2, 284 EXPECT_THAT(virtual_times_ms, ElementsAre(initial_virtual_time_ms + 2,
285 initial_virtual_time_ms + 20, 285 initial_virtual_time_ms + 20,
286 initial_virtual_time_ms + 200)); 286 initial_virtual_time_ms + 200));
287 } 287 }
288 288
289 TEST_F(WebViewSchedulerImplTest, VirtualTime_LoadingTaskFastForwarding) { 289 TEST_F(WebViewSchedulerImplTest, VirtualTime_LoadingTaskFastForwarding) {
290 std::vector<base::TimeTicks> real_times; 290 std::vector<base::TimeTicks> real_times;
291 std::vector<size_t> virtual_times_ms; 291 std::vector<size_t> virtual_times_ms;
292 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); 292 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
293 size_t initial_virtual_time_ms = 293 size_t initial_virtual_time_ms =
294 web_frame_scheduler_->TimerTaskRunner() 294 web_frame_scheduler_->TimerTaskRunner()
295 ->MonotonicallyIncreasingVirtualTimeSeconds() * 295 ->MonotonicallyIncreasingVirtualTimeSeconds() *
296 1000.0; 296 1000.0;
297 297
298 web_view_scheduler_->EnableVirtualTime(); 298 web_view_scheduler_->EnableVirtualTime();
299 299
300 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask( 300 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask(
301 BLINK_FROM_HERE, 301 BLINK_FROM_HERE,
302 MakeVirtualTimeRecorderTask(clock_.get(), 302 MakeVirtualTimeRecorderTask(clock_.get(),
303 web_frame_scheduler_->LoadingTaskRunner(), 303 web_frame_scheduler_->LoadingTaskRunner(),
304 &real_times, &virtual_times_ms), 304 &real_times, &virtual_times_ms),
305 2.0); 305 TimeDelta::FromMilliseconds(2));
306 306
307 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask( 307 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask(
308 BLINK_FROM_HERE, 308 BLINK_FROM_HERE,
309 MakeVirtualTimeRecorderTask(clock_.get(), 309 MakeVirtualTimeRecorderTask(clock_.get(),
310 web_frame_scheduler_->LoadingTaskRunner(), 310 web_frame_scheduler_->LoadingTaskRunner(),
311 &real_times, &virtual_times_ms), 311 &real_times, &virtual_times_ms),
312 20.0); 312 TimeDelta::FromMilliseconds(20));
313 313
314 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask( 314 web_frame_scheduler_->LoadingTaskRunner()->PostDelayedTask(
315 BLINK_FROM_HERE, 315 BLINK_FROM_HERE,
316 MakeVirtualTimeRecorderTask(clock_.get(), 316 MakeVirtualTimeRecorderTask(clock_.get(),
317 web_frame_scheduler_->LoadingTaskRunner(), 317 web_frame_scheduler_->LoadingTaskRunner(),
318 &real_times, &virtual_times_ms), 318 &real_times, &virtual_times_ms),
319 200.0); 319 TimeDelta::FromMilliseconds(200));
320 320
321 mock_task_runner_->RunUntilIdle(); 321 mock_task_runner_->RunUntilIdle();
322 322
323 EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time, 323 EXPECT_THAT(real_times, ElementsAre(initial_real_time, initial_real_time,
324 initial_real_time)); 324 initial_real_time));
325 EXPECT_THAT(virtual_times_ms, ElementsAre(initial_virtual_time_ms + 2, 325 EXPECT_THAT(virtual_times_ms, ElementsAre(initial_virtual_time_ms + 2,
326 initial_virtual_time_ms + 20, 326 initial_virtual_time_ms + 20,
327 initial_virtual_time_ms + 200)); 327 initial_virtual_time_ms + 200));
328 } 328 }
329 329
330 TEST_F(WebViewSchedulerImplTest, 330 TEST_F(WebViewSchedulerImplTest,
331 RepeatingTimer_PageInBackground_MeansNothingForVirtualTime) { 331 RepeatingTimer_PageInBackground_MeansNothingForVirtualTime) {
332 web_view_scheduler_->EnableVirtualTime(); 332 web_view_scheduler_->EnableVirtualTime();
333 web_view_scheduler_->SetPageVisible(false); 333 web_view_scheduler_->SetPageVisible(false);
334 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); 334 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
335 335
336 int run_count = 0; 336 int run_count = 0;
337 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 337 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
338 BLINK_FROM_HERE, 338 BLINK_FROM_HERE,
339 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), 339 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count),
340 1.0); 340 TimeDelta::FromMilliseconds(1));
341 341
342 mock_task_runner_->RunTasksWhile(mock_task_runner_->TaskRunCountBelow(2000)); 342 mock_task_runner_->RunTasksWhile(mock_task_runner_->TaskRunCountBelow(2000));
343 // Virtual time means page visibility is ignored. 343 // Virtual time means page visibility is ignored.
344 EXPECT_EQ(1999, run_count); 344 EXPECT_EQ(1999, run_count);
345 345
346 // The global tick clock has not moved, yet we ran a large number of "delayed" 346 // The global tick clock has not moved, yet we ran a large number of "delayed"
347 // tasks despite calling setPageVisible(false). 347 // tasks despite calling setPageVisible(false).
348 EXPECT_EQ(initial_real_time, scheduler_->tick_clock()->NowTicks()); 348 EXPECT_EQ(initial_real_time, scheduler_->tick_clock()->NowTicks());
349 } 349 }
350 350
(...skipping 21 matching lines...) Expand all
372 372
373 web_frame_scheduler_->TimerTaskRunner()->PostTask( 373 web_frame_scheduler_->TimerTaskRunner()->PostTask(
374 BLINK_FROM_HERE, 374 BLINK_FROM_HERE,
375 WTF::Bind(&RunOrderTask, 0, WTF::Unretained(&run_order))); 375 WTF::Bind(&RunOrderTask, 0, WTF::Unretained(&run_order)));
376 376
377 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 377 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
378 BLINK_FROM_HERE, 378 BLINK_FROM_HERE,
379 WTF::Bind(&DelayedRunOrderTask, 1, 379 WTF::Bind(&DelayedRunOrderTask, 1,
380 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), 380 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()),
381 WTF::Unretained(&run_order)), 381 WTF::Unretained(&run_order)),
382 2.0); 382 TimeDelta::FromMilliseconds(2));
383 383
384 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 384 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
385 BLINK_FROM_HERE, 385 BLINK_FROM_HERE,
386 WTF::Bind(&DelayedRunOrderTask, 3, 386 WTF::Bind(&DelayedRunOrderTask, 3,
387 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), 387 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()),
388 WTF::Unretained(&run_order)), 388 WTF::Unretained(&run_order)),
389 4.0); 389 TimeDelta::FromMilliseconds(4));
390 390
391 mock_task_runner_->RunUntilIdle(); 391 mock_task_runner_->RunUntilIdle();
392 392
393 // No timer tasks are allowed to run. 393 // No timer tasks are allowed to run.
394 EXPECT_THAT(run_order, ElementsAre()); 394 EXPECT_THAT(run_order, ElementsAre());
395 } 395 }
396 396
397 TEST_F(WebViewSchedulerImplTest, VirtualTime_AllowedToAdvance) { 397 TEST_F(WebViewSchedulerImplTest, VirtualTime_AllowedToAdvance) {
398 std::vector<int> run_order; 398 std::vector<int> run_order;
399 399
400 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::ADVANCE); 400 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::ADVANCE);
401 web_view_scheduler_->EnableVirtualTime(); 401 web_view_scheduler_->EnableVirtualTime();
402 402
403 web_frame_scheduler_->TimerTaskRunner()->PostTask( 403 web_frame_scheduler_->TimerTaskRunner()->PostTask(
404 BLINK_FROM_HERE, 404 BLINK_FROM_HERE,
405 WTF::Bind(&RunOrderTask, 0, WTF::Unretained(&run_order))); 405 WTF::Bind(&RunOrderTask, 0, WTF::Unretained(&run_order)));
406 406
407 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 407 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
408 BLINK_FROM_HERE, 408 BLINK_FROM_HERE,
409 WTF::Bind(&DelayedRunOrderTask, 1, 409 WTF::Bind(&DelayedRunOrderTask, 1,
410 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), 410 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()),
411 WTF::Unretained(&run_order)), 411 WTF::Unretained(&run_order)),
412 2.0); 412 TimeDelta::FromMilliseconds(2));
413 413
414 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 414 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
415 BLINK_FROM_HERE, 415 BLINK_FROM_HERE,
416 WTF::Bind(&DelayedRunOrderTask, 3, 416 WTF::Bind(&DelayedRunOrderTask, 3,
417 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), 417 WTF::Passed(web_frame_scheduler_->TimerTaskRunner()),
418 WTF::Unretained(&run_order)), 418 WTF::Unretained(&run_order)),
419 4.0); 419 TimeDelta::FromMilliseconds(4));
420 420
421 mock_task_runner_->RunUntilIdle(); 421 mock_task_runner_->RunUntilIdle();
422 422
423 EXPECT_THAT(run_order, ElementsAre(0, 1, 2, 3, 4)); 423 EXPECT_THAT(run_order, ElementsAre(0, 1, 2, 3, 4));
424 } 424 }
425 425
426 class WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling 426 class WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling
427 : public WebViewSchedulerImplTest { 427 : public WebViewSchedulerImplTest {
428 public: 428 public:
429 WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() {} 429 WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() {}
430 ~WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() override {} 430 ~WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() override {}
431 431
432 bool DisableBackgroundTimerThrottling() const override { return true; } 432 bool DisableBackgroundTimerThrottling() const override { return true; }
433 }; 433 };
434 434
435 TEST_F(WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling, 435 TEST_F(WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling,
436 RepeatingTimer_PageInBackground) { 436 RepeatingTimer_PageInBackground) {
437 web_view_scheduler_->SetPageVisible(false); 437 web_view_scheduler_->SetPageVisible(false);
438 438
439 int run_count = 0; 439 int run_count = 0;
440 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 440 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
441 BLINK_FROM_HERE, 441 BLINK_FROM_HERE,
442 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), 442 MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count),
443 1.0); 443 TimeDelta::FromMilliseconds(1));
444 444
445 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 445 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
446 EXPECT_EQ(1000, run_count); 446 EXPECT_EQ(1000, run_count);
447 } 447 }
448 448
449 TEST_F(WebViewSchedulerImplTest, VirtualTimeSettings_NewWebFrameScheduler) { 449 TEST_F(WebViewSchedulerImplTest, VirtualTimeSettings_NewWebFrameScheduler) {
450 std::vector<int> run_order; 450 std::vector<int> run_order;
451 451
452 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE); 452 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE);
453 web_view_scheduler_->EnableVirtualTime(); 453 web_view_scheduler_->EnableVirtualTime();
454 454
455 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler = 455 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler =
456 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr); 456 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr);
457 457
458 web_frame_scheduler->TimerTaskRunner()->PostDelayedTask( 458 web_frame_scheduler->TimerTaskRunner()->PostDelayedTask(
459 BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 1, WTF::Unretained(&run_order)), 459 BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 1, WTF::Unretained(&run_order)),
460 1); 460 TimeDelta::FromMilliseconds(1));
461 461
462 mock_task_runner_->RunUntilIdle(); 462 mock_task_runner_->RunUntilIdle();
463 EXPECT_TRUE(run_order.empty()); 463 EXPECT_TRUE(run_order.empty());
464 464
465 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::ADVANCE); 465 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::ADVANCE);
466 mock_task_runner_->RunUntilIdle(); 466 mock_task_runner_->RunUntilIdle();
467 467
468 EXPECT_THAT(run_order, ElementsAre(1)); 468 EXPECT_THAT(run_order, ElementsAre(1));
469 } 469 }
470 470
471 namespace { 471 namespace {
472 472
473 template <typename T> 473 template <typename T>
474 std::unique_ptr<WTF::Closure> MakeDeletionTask(T* obj) { 474 std::unique_ptr<WTF::Closure> MakeDeletionTask(T* obj) {
475 return WTF::Bind([](T* obj) { delete obj; }, WTF::Unretained(obj)); 475 return WTF::Bind([](T* obj) { delete obj; }, WTF::Unretained(obj));
476 } 476 }
477 477
478 } // namespace 478 } // namespace
479 479
480 TEST_F(WebViewSchedulerImplTest, DeleteWebFrameSchedulers_InTask) { 480 TEST_F(WebViewSchedulerImplTest, DeleteWebFrameSchedulers_InTask) {
481 for (int i = 0; i < 10; i++) { 481 for (int i = 0; i < 10; i++) {
482 WebFrameSchedulerImpl* web_frame_scheduler = 482 WebFrameSchedulerImpl* web_frame_scheduler =
483 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr).release(); 483 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr).release();
484 web_frame_scheduler->TimerTaskRunner()->PostDelayedTask( 484 web_frame_scheduler->TimerTaskRunner()->PostDelayedTask(
485 BLINK_FROM_HERE, MakeDeletionTask(web_frame_scheduler), 1); 485 BLINK_FROM_HERE, MakeDeletionTask(web_frame_scheduler),
486 TimeDelta::FromMilliseconds(1));
486 } 487 }
487 mock_task_runner_->RunUntilIdle(); 488 mock_task_runner_->RunUntilIdle();
488 } 489 }
489 490
490 TEST_F(WebViewSchedulerImplTest, DeleteWebViewScheduler_InTask) { 491 TEST_F(WebViewSchedulerImplTest, DeleteWebViewScheduler_InTask) {
491 web_frame_scheduler_->TimerTaskRunner()->PostTask( 492 web_frame_scheduler_->TimerTaskRunner()->PostTask(
492 BLINK_FROM_HERE, MakeDeletionTask(web_view_scheduler_.release())); 493 BLINK_FROM_HERE, MakeDeletionTask(web_view_scheduler_.release()));
493 mock_task_runner_->RunUntilIdle(); 494 mock_task_runner_->RunUntilIdle();
494 } 495 }
495 496
496 TEST_F(WebViewSchedulerImplTest, DeleteThrottledQueue_InTask) { 497 TEST_F(WebViewSchedulerImplTest, DeleteThrottledQueue_InTask) {
497 web_view_scheduler_->SetPageVisible(false); 498 web_view_scheduler_->SetPageVisible(false);
498 499
499 // The task queue isn't throttled at all until it's been in the background for 500 // The task queue isn't throttled at all until it's been in the background for
500 // a 10 second grace period. 501 // a 10 second grace period.
501 clock_->Advance(base::TimeDelta::FromSeconds(10)); 502 clock_->Advance(base::TimeDelta::FromSeconds(10));
502 503
503 WebFrameSchedulerImpl* web_frame_scheduler = 504 WebFrameSchedulerImpl* web_frame_scheduler =
504 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr).release(); 505 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr).release();
505 RefPtr<blink::WebTaskRunner> timer_task_runner = 506 RefPtr<blink::WebTaskRunner> timer_task_runner =
506 web_frame_scheduler->TimerTaskRunner(); 507 web_frame_scheduler->TimerTaskRunner();
507 508
508 int run_count = 0; 509 int run_count = 0;
509 timer_task_runner->PostDelayedTask( 510 timer_task_runner->PostDelayedTask(
510 BLINK_FROM_HERE, MakeRepeatingTask(timer_task_runner, &run_count), 1.0); 511 BLINK_FROM_HERE, MakeRepeatingTask(timer_task_runner, &run_count),
512 TimeDelta::FromMilliseconds(1));
511 513
512 // Note this will run at time t = 10s since we start at time t = 5000us, and 514 // Note this will run at time t = 10s since we start at time t = 5000us, and
513 // it will prevent further tasks from running (i.e. the RepeatingTask) by 515 // it will prevent further tasks from running (i.e. the RepeatingTask) by
514 // deleting the WebFrameScheduler. 516 // deleting the WebFrameScheduler.
515 timer_task_runner->PostDelayedTask( 517 timer_task_runner->PostDelayedTask(BLINK_FROM_HERE,
516 BLINK_FROM_HERE, MakeDeletionTask(web_frame_scheduler), 9990.0); 518 MakeDeletionTask(web_frame_scheduler),
519 TimeDelta::FromMilliseconds(9990));
517 520
518 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100)); 521 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100));
519 EXPECT_EQ(10, run_count); 522 EXPECT_EQ(10, run_count);
520 } 523 }
521 524
522 TEST_F(WebViewSchedulerImplTest, VirtualTimePolicy_DETERMINISTIC_LOADING) { 525 TEST_F(WebViewSchedulerImplTest, VirtualTimePolicy_DETERMINISTIC_LOADING) {
523 web_view_scheduler_->SetVirtualTimePolicy( 526 web_view_scheduler_->SetVirtualTimePolicy(
524 VirtualTimePolicy::DETERMINISTIC_LOADING); 527 VirtualTimePolicy::DETERMINISTIC_LOADING);
525 // Initially virtual time is not allowed to advance until we have seen at 528 // Initially virtual time is not allowed to advance until we have seen at
526 // least one load. 529 // least one load.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 EXPECT_TRUE(web_view_scheduler_->VirtualTimeAllowedToAdvance()); 609 EXPECT_TRUE(web_view_scheduler_->VirtualTimeAllowedToAdvance());
607 } 610 }
608 611
609 TEST_F(WebViewSchedulerImplTest, SuspendTimersWhileVirtualTimeIsPaused) { 612 TEST_F(WebViewSchedulerImplTest, SuspendTimersWhileVirtualTimeIsPaused) {
610 std::vector<int> run_order; 613 std::vector<int> run_order;
611 614
612 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler = 615 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler =
613 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr); 616 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr);
614 web_frame_scheduler->TimerTaskRunner()->PostDelayedTask( 617 web_frame_scheduler->TimerTaskRunner()->PostDelayedTask(
615 BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 1, WTF::Unretained(&run_order)), 618 BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 1, WTF::Unretained(&run_order)),
616 0); 619 TimeDelta());
617 620
618 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE); 621 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE);
619 web_view_scheduler_->EnableVirtualTime(); 622 web_view_scheduler_->EnableVirtualTime();
620 623
621 mock_task_runner_->RunUntilIdle(); 624 mock_task_runner_->RunUntilIdle();
622 EXPECT_TRUE(run_order.empty()); 625 EXPECT_TRUE(run_order.empty());
623 626
624 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::ADVANCE); 627 web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::ADVANCE);
625 mock_task_runner_->RunUntilIdle(); 628 mock_task_runner_->RunUntilIdle();
626 629
627 EXPECT_THAT(run_order, ElementsAre(1)); 630 EXPECT_THAT(run_order, ElementsAre(1));
628 } 631 }
629 632
630 TEST_F(WebViewSchedulerImplTest, VirtualTimeBudgetExhaustedCallback) { 633 TEST_F(WebViewSchedulerImplTest, VirtualTimeBudgetExhaustedCallback) {
631 std::vector<base::TimeTicks> real_times; 634 std::vector<base::TimeTicks> real_times;
632 std::vector<size_t> virtual_times_ms; 635 std::vector<size_t> virtual_times_ms;
633 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); 636 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
634 size_t initial_virtual_time_ms = 637 size_t initial_virtual_time_ms =
635 web_frame_scheduler_->TimerTaskRunner() 638 web_frame_scheduler_->TimerTaskRunner()
636 ->MonotonicallyIncreasingVirtualTimeSeconds() * 639 ->MonotonicallyIncreasingVirtualTimeSeconds() *
637 1000.0; 640 1000.0;
638 641
639 web_view_scheduler_->EnableVirtualTime(); 642 web_view_scheduler_->EnableVirtualTime();
640 643
641 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 644 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
642 BLINK_FROM_HERE, 645 BLINK_FROM_HERE,
643 MakeVirtualTimeRecorderTask(clock_.get(), 646 MakeVirtualTimeRecorderTask(clock_.get(),
644 web_frame_scheduler_->TimerTaskRunner(), 647 web_frame_scheduler_->TimerTaskRunner(),
645 &real_times, &virtual_times_ms), 648 &real_times, &virtual_times_ms),
646 1.0); 649 TimeDelta::FromMilliseconds(1));
647 650
648 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 651 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
649 BLINK_FROM_HERE, 652 BLINK_FROM_HERE,
650 MakeVirtualTimeRecorderTask(clock_.get(), 653 MakeVirtualTimeRecorderTask(clock_.get(),
651 web_frame_scheduler_->TimerTaskRunner(), 654 web_frame_scheduler_->TimerTaskRunner(),
652 &real_times, &virtual_times_ms), 655 &real_times, &virtual_times_ms),
653 2.0); 656 TimeDelta::FromMilliseconds(2));
654 657
655 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 658 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
656 BLINK_FROM_HERE, 659 BLINK_FROM_HERE,
657 MakeVirtualTimeRecorderTask(clock_.get(), 660 MakeVirtualTimeRecorderTask(clock_.get(),
658 web_frame_scheduler_->TimerTaskRunner(), 661 web_frame_scheduler_->TimerTaskRunner(),
659 &real_times, &virtual_times_ms), 662 &real_times, &virtual_times_ms),
660 5.0); 663 TimeDelta::FromMilliseconds(5));
661 664
662 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 665 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask(
663 BLINK_FROM_HERE, 666 BLINK_FROM_HERE,
664 MakeVirtualTimeRecorderTask(clock_.get(), 667 MakeVirtualTimeRecorderTask(clock_.get(),
665 web_frame_scheduler_->TimerTaskRunner(), 668 web_frame_scheduler_->TimerTaskRunner(),
666 &real_times, &virtual_times_ms), 669 &real_times, &virtual_times_ms),
667 7.0); 670 TimeDelta::FromMilliseconds(7));
668 671
669 web_view_scheduler_->GrantVirtualTimeBudget( 672 web_view_scheduler_->GrantVirtualTimeBudget(
670 base::TimeDelta::FromMilliseconds(5), 673 base::TimeDelta::FromMilliseconds(5),
671 WTF::Bind( 674 WTF::Bind(
672 [](WebViewScheduler* scheduler) { 675 [](WebViewScheduler* scheduler) {
673 scheduler->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE); 676 scheduler->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE);
674 }, 677 },
675 WTF::Unretained(web_view_scheduler_.get()))); 678 WTF::Unretained(web_view_scheduler_.get())));
676 679
677 mock_task_runner_->RunUntilIdle(); 680 mock_task_runner_->RunUntilIdle();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 FakeWebViewSchedulerSettings web_view_scheduler_settings; 721 FakeWebViewSchedulerSettings web_view_scheduler_settings;
719 web_view_scheduler_.reset(new WebViewSchedulerImpl( 722 web_view_scheduler_.reset(new WebViewSchedulerImpl(
720 nullptr, &web_view_scheduler_settings, scheduler_.get(), false)); 723 nullptr, &web_view_scheduler_settings, scheduler_.get(), false));
721 web_frame_scheduler_ = 724 web_frame_scheduler_ =
722 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr); 725 web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr);
723 web_view_scheduler_->SetPageVisible(false); 726 web_view_scheduler_->SetPageVisible(false);
724 727
725 mock_task_runner_->RunUntilTime(base::TimeTicks() + 728 mock_task_runner_->RunUntilTime(base::TimeTicks() +
726 base::TimeDelta::FromMilliseconds(2500)); 729 base::TimeDelta::FromMilliseconds(2500));
727 730
728 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 731 web_frame_scheduler_->TimerTaskRunner()
729 BLINK_FROM_HERE, base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 732 ->ToSingleThreadTaskRunner()
730 1); 733 ->PostDelayedTask(
731 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 734 BLINK_FROM_HERE,
732 BLINK_FROM_HERE, base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 735 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
733 1); 736 TimeDelta::FromMilliseconds(1));
737 web_frame_scheduler_->TimerTaskRunner()
738 ->ToSingleThreadTaskRunner()
739 ->PostDelayedTask(
740 BLINK_FROM_HERE,
741 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
742 TimeDelta::FromMilliseconds(1));
734 743
735 mock_task_runner_->RunUntilTime(base::TimeTicks() + 744 mock_task_runner_->RunUntilTime(base::TimeTicks() +
736 base::TimeDelta::FromMilliseconds(3500)); 745 base::TimeDelta::FromMilliseconds(3500));
737 746
738 // Check that these tasks are initially unthrottled. 747 // Check that these tasks are initially unthrottled.
739 EXPECT_THAT( 748 EXPECT_THAT(
740 run_times, 749 run_times,
741 ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(2501), 750 ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(2501),
742 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2751))); 751 base::TimeTicks() + base::TimeDelta::FromMilliseconds(2751)));
743 run_times.clear(); 752 run_times.clear();
744 753
745 mock_task_runner_->RunUntilTime(base::TimeTicks() + 754 mock_task_runner_->RunUntilTime(base::TimeTicks() +
746 base::TimeDelta::FromMilliseconds(11500)); 755 base::TimeDelta::FromMilliseconds(11500));
747 756
748 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 757 web_frame_scheduler_->TimerTaskRunner()
749 BLINK_FROM_HERE, base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 758 ->ToSingleThreadTaskRunner()
750 1); 759 ->PostDelayedTask(
751 web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( 760 BLINK_FROM_HERE,
752 BLINK_FROM_HERE, base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 761 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
753 1); 762 TimeDelta::FromMilliseconds(1));
763 web_frame_scheduler_->TimerTaskRunner()
764 ->ToSingleThreadTaskRunner()
765 ->PostDelayedTask(
766 BLINK_FROM_HERE,
767 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
768 TimeDelta::FromMilliseconds(1));
754 769
755 mock_task_runner_->RunUntilIdle(); 770 mock_task_runner_->RunUntilIdle();
756 771
757 // After the grace period has passed, tasks should be aligned and have budget 772 // After the grace period has passed, tasks should be aligned and have budget
758 // based throttling. 773 // based throttling.
759 EXPECT_THAT( 774 EXPECT_THAT(
760 run_times, 775 run_times,
761 ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(12), 776 ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(12),
762 base::TimeTicks() + base::TimeDelta::FromSeconds(26))); 777 base::TimeTicks() + base::TimeDelta::FromSeconds(26)));
763 } 778 }
(...skipping 13 matching lines...) Expand all
777 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler2 = 792 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler2 =
778 web_view_scheduler->CreateWebFrameSchedulerImpl(nullptr); 793 web_view_scheduler->CreateWebFrameSchedulerImpl(nullptr);
779 794
780 web_view_scheduler->SetPageVisible(false); 795 web_view_scheduler->SetPageVisible(false);
781 796
782 // Wait for 20s to avoid initial throttling delay. 797 // Wait for 20s to avoid initial throttling delay.
783 mock_task_runner_->RunUntilTime(base::TimeTicks() + 798 mock_task_runner_->RunUntilTime(base::TimeTicks() +
784 base::TimeDelta::FromMilliseconds(20500)); 799 base::TimeDelta::FromMilliseconds(20500));
785 800
786 for (size_t i = 0; i < 3; ++i) { 801 for (size_t i = 0; i < 3; ++i) {
787 web_frame_scheduler1->TimerTaskRunner()->PostDelayedTask( 802 web_frame_scheduler1->TimerTaskRunner()
788 BLINK_FROM_HERE, 803 ->ToSingleThreadTaskRunner()
789 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1); 804 ->PostDelayedTask(
805 BLINK_FROM_HERE,
806 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
807 TimeDelta::FromMilliseconds(1));
790 } 808 }
791 809
792 mock_task_runner_->RunUntilTime(base::TimeTicks() + 810 mock_task_runner_->RunUntilTime(base::TimeTicks() +
793 base::TimeDelta::FromMilliseconds(55500)); 811 base::TimeDelta::FromMilliseconds(55500));
794 812
795 // Check that tasks are throttled. 813 // Check that tasks are throttled.
796 EXPECT_THAT( 814 EXPECT_THAT(
797 run_times, 815 run_times,
798 ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(21), 816 ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(21),
799 base::TimeTicks() + base::TimeDelta::FromSeconds(26), 817 base::TimeTicks() + base::TimeDelta::FromSeconds(26),
800 base::TimeTicks() + base::TimeDelta::FromSeconds(51))); 818 base::TimeTicks() + base::TimeDelta::FromSeconds(51)));
801 run_times.clear(); 819 run_times.clear();
802 820
803 std::unique_ptr<WebFrameScheduler::ActiveConnectionHandle> 821 std::unique_ptr<WebFrameScheduler::ActiveConnectionHandle>
804 websocket_connection = web_frame_scheduler1->OnActiveConnectionCreated(); 822 websocket_connection = web_frame_scheduler1->OnActiveConnectionCreated();
805 823
806 for (size_t i = 0; i < 3; ++i) { 824 for (size_t i = 0; i < 3; ++i) {
807 web_frame_scheduler1->TimerTaskRunner()->PostDelayedTask( 825 web_frame_scheduler1->TimerTaskRunner()
808 BLINK_FROM_HERE, 826 ->ToSingleThreadTaskRunner()
809 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1); 827 ->PostDelayedTask(
828 BLINK_FROM_HERE,
829 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
830 TimeDelta::FromMilliseconds(1));
810 } 831 }
811 832
812 mock_task_runner_->RunUntilTime(base::TimeTicks() + 833 mock_task_runner_->RunUntilTime(base::TimeTicks() +
813 base::TimeDelta::FromMilliseconds(58500)); 834 base::TimeDelta::FromMilliseconds(58500));
814 835
815 // Check that the timer task queue from the first frame is aligned, 836 // Check that the timer task queue from the first frame is aligned,
816 // but not throttled. 837 // but not throttled.
817 EXPECT_THAT( 838 EXPECT_THAT(
818 run_times, 839 run_times,
819 ElementsAre( 840 ElementsAre(
820 base::TimeTicks() + base::TimeDelta::FromMilliseconds(56000), 841 base::TimeTicks() + base::TimeDelta::FromMilliseconds(56000),
821 base::TimeTicks() + base::TimeDelta::FromMilliseconds(56250), 842 base::TimeTicks() + base::TimeDelta::FromMilliseconds(56250),
822 base::TimeTicks() + base::TimeDelta::FromMilliseconds(56500))); 843 base::TimeTicks() + base::TimeDelta::FromMilliseconds(56500)));
823 run_times.clear(); 844 run_times.clear();
824 845
825 for (size_t i = 0; i < 3; ++i) { 846 for (size_t i = 0; i < 3; ++i) {
826 web_frame_scheduler2->TimerTaskRunner()->PostDelayedTask( 847 web_frame_scheduler2->TimerTaskRunner()
827 BLINK_FROM_HERE, 848 ->ToSingleThreadTaskRunner()
828 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1); 849 ->PostDelayedTask(
850 BLINK_FROM_HERE,
851 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
852 TimeDelta::FromMilliseconds(1));
829 } 853 }
830 854
831 mock_task_runner_->RunUntilTime(base::TimeTicks() + 855 mock_task_runner_->RunUntilTime(base::TimeTicks() +
832 base::TimeDelta::FromMilliseconds(59500)); 856 base::TimeDelta::FromMilliseconds(59500));
833 857
834 // Check that the second frame scheduler becomes unthrottled. 858 // Check that the second frame scheduler becomes unthrottled.
835 EXPECT_THAT( 859 EXPECT_THAT(
836 run_times, 860 run_times,
837 ElementsAre( 861 ElementsAre(
838 base::TimeTicks() + base::TimeDelta::FromMilliseconds(59000), 862 base::TimeTicks() + base::TimeDelta::FromMilliseconds(59000),
839 base::TimeTicks() + base::TimeDelta::FromMilliseconds(59250), 863 base::TimeTicks() + base::TimeDelta::FromMilliseconds(59250),
840 base::TimeTicks() + base::TimeDelta::FromMilliseconds(59500))); 864 base::TimeTicks() + base::TimeDelta::FromMilliseconds(59500)));
841 run_times.clear(); 865 run_times.clear();
842 866
843 websocket_connection.reset(); 867 websocket_connection.reset();
844 868
845 // Wait for 10s to enable throttling back. 869 // Wait for 10s to enable throttling back.
846 mock_task_runner_->RunUntilTime(base::TimeTicks() + 870 mock_task_runner_->RunUntilTime(base::TimeTicks() +
847 base::TimeDelta::FromMilliseconds(70500)); 871 base::TimeDelta::FromMilliseconds(70500));
848 872
849 for (size_t i = 0; i < 3; ++i) { 873 for (size_t i = 0; i < 3; ++i) {
850 web_frame_scheduler1->TimerTaskRunner()->PostDelayedTask( 874 web_frame_scheduler1->TimerTaskRunner()
851 BLINK_FROM_HERE, 875 ->ToSingleThreadTaskRunner()
852 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), 1); 876 ->PostDelayedTask(
877 BLINK_FROM_HERE,
878 base::Bind(&ExpensiveTestTask, clock_.get(), &run_times),
879 TimeDelta::FromMilliseconds(1));
853 } 880 }
854 881
855 mock_task_runner_->RunUntilIdle(); 882 mock_task_runner_->RunUntilIdle();
856 883
857 // WebSocket is closed, budget-based throttling now applies. 884 // WebSocket is closed, budget-based throttling now applies.
858 EXPECT_THAT( 885 EXPECT_THAT(
859 run_times, 886 run_times,
860 ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(84), 887 ElementsAre(base::TimeTicks() + base::TimeDelta::FromSeconds(84),
861 base::TimeTicks() + base::TimeDelta::FromSeconds(109), 888 base::TimeTicks() + base::TimeDelta::FromSeconds(109),
862 base::TimeTicks() + base::TimeDelta::FromSeconds(134))); 889 base::TimeTicks() + base::TimeDelta::FromSeconds(134)));
863 } 890 }
864 891
865 } // namespace scheduler 892 } // namespace scheduler
866 } // namespace blink 893 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698