OLD | NEW |
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 "components/scheduler/renderer/web_view_scheduler_impl.h" | 5 #include "components/scheduler/renderer/web_view_scheduler_impl.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/test/simple_test_tick_clock.h" | 9 #include "base/test/simple_test_tick_clock.h" |
10 #include "cc/test/ordered_simple_task_runner.h" | 10 #include "cc/test/ordered_simple_task_runner.h" |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 BLINK_FROM_HERE, new RunOrderTask(index_ + 1, out_run_order_)); | 308 BLINK_FROM_HERE, new RunOrderTask(index_ + 1, out_run_order_)); |
309 } | 309 } |
310 | 310 |
311 private: | 311 private: |
312 int index_; | 312 int index_; |
313 blink::WebTaskRunner* task_runner_; // NOT OWNED | 313 blink::WebTaskRunner* task_runner_; // NOT OWNED |
314 std::vector<int>* out_run_order_; // NOT OWNED | 314 std::vector<int>* out_run_order_; // NOT OWNED |
315 }; | 315 }; |
316 } | 316 } |
317 | 317 |
318 TEST_F(WebViewSchedulerImplTest, VirtualTime_DelayedAndImmediateTaskOrdering) { | 318 TEST_F(WebViewSchedulerImplTest, VirtualTime_NotAllowedToAdvance) { |
319 std::vector<int> run_order; | 319 std::vector<int> run_order; |
320 | 320 |
321 web_view_scheduler_->setAllowVirtualTimeToAdvance(false); | 321 web_view_scheduler_->setAllowVirtualTimeToAdvance(false); |
322 web_view_scheduler_->enableVirtualTime(); | 322 web_view_scheduler_->enableVirtualTime(); |
323 | 323 |
324 web_frame_scheduler_->timerTaskRunner()->postTask( | 324 web_frame_scheduler_->timerTaskRunner()->postTask( |
325 BLINK_FROM_HERE, new RunOrderTask(0, &run_order)); | 325 BLINK_FROM_HERE, new RunOrderTask(0, &run_order)); |
326 | 326 |
327 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 327 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
328 BLINK_FROM_HERE, | 328 BLINK_FROM_HERE, |
329 new DelayedRunOrderTask(1, web_frame_scheduler_->timerTaskRunner(), | 329 new DelayedRunOrderTask(1, web_frame_scheduler_->timerTaskRunner(), |
330 &run_order), | 330 &run_order), |
331 2.0); | 331 2.0); |
332 | 332 |
333 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 333 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
334 BLINK_FROM_HERE, | 334 BLINK_FROM_HERE, |
335 new DelayedRunOrderTask(3, web_frame_scheduler_->timerTaskRunner(), | 335 new DelayedRunOrderTask(3, web_frame_scheduler_->timerTaskRunner(), |
336 &run_order), | 336 &run_order), |
337 4.0); | 337 4.0); |
338 | 338 |
339 mock_task_runner_->RunUntilIdle(); | 339 mock_task_runner_->RunUntilIdle(); |
340 EXPECT_TRUE(run_order.empty()); | 340 |
| 341 // Immediate tasks are allowed to run even if delayed tasks are not. |
| 342 EXPECT_THAT(run_order, ElementsAre(0)); |
| 343 } |
| 344 |
| 345 TEST_F(WebViewSchedulerImplTest, VirtualTime_AllowedToAdvance) { |
| 346 std::vector<int> run_order; |
341 | 347 |
342 web_view_scheduler_->setAllowVirtualTimeToAdvance(true); | 348 web_view_scheduler_->setAllowVirtualTimeToAdvance(true); |
| 349 web_view_scheduler_->enableVirtualTime(); |
| 350 |
| 351 web_frame_scheduler_->timerTaskRunner()->postTask( |
| 352 BLINK_FROM_HERE, new RunOrderTask(0, &run_order)); |
| 353 |
| 354 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
| 355 BLINK_FROM_HERE, |
| 356 new DelayedRunOrderTask(1, web_frame_scheduler_->timerTaskRunner(), |
| 357 &run_order), |
| 358 2.0); |
| 359 |
| 360 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
| 361 BLINK_FROM_HERE, |
| 362 new DelayedRunOrderTask(3, web_frame_scheduler_->timerTaskRunner(), |
| 363 &run_order), |
| 364 4.0); |
| 365 |
343 mock_task_runner_->RunUntilIdle(); | 366 mock_task_runner_->RunUntilIdle(); |
344 | 367 |
345 EXPECT_THAT(run_order, ElementsAre(0, 1, 2, 3, 4)); | 368 EXPECT_THAT(run_order, ElementsAre(0, 1, 2, 3, 4)); |
346 } | 369 } |
347 | 370 |
348 class WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling | 371 class WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling |
349 : public WebViewSchedulerImplTest { | 372 : public WebViewSchedulerImplTest { |
350 public: | 373 public: |
351 WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() {} | 374 WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() {} |
352 ~WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() override {} | 375 ~WebViewSchedulerImplTestWithDisabledBackgroundTimerThrottling() override {} |
(...skipping 17 matching lines...) Expand all Loading... |
370 | 393 |
371 TEST_F(WebViewSchedulerImplTest, VirtualTimeSettings_NewWebFrameScheduler) { | 394 TEST_F(WebViewSchedulerImplTest, VirtualTimeSettings_NewWebFrameScheduler) { |
372 std::vector<int> run_order; | 395 std::vector<int> run_order; |
373 | 396 |
374 web_view_scheduler_->setAllowVirtualTimeToAdvance(false); | 397 web_view_scheduler_->setAllowVirtualTimeToAdvance(false); |
375 web_view_scheduler_->enableVirtualTime(); | 398 web_view_scheduler_->enableVirtualTime(); |
376 | 399 |
377 scoped_ptr<WebFrameSchedulerImpl> web_frame_scheduler = | 400 scoped_ptr<WebFrameSchedulerImpl> web_frame_scheduler = |
378 web_view_scheduler_->createWebFrameSchedulerImpl(); | 401 web_view_scheduler_->createWebFrameSchedulerImpl(); |
379 | 402 |
380 web_frame_scheduler->timerTaskRunner()->postTask( | 403 web_frame_scheduler->timerTaskRunner()->postDelayedTask( |
381 BLINK_FROM_HERE, new RunOrderTask(1, &run_order)); | 404 BLINK_FROM_HERE, new RunOrderTask(1, &run_order), 0.1); |
382 | 405 |
383 mock_task_runner_->RunUntilIdle(); | 406 mock_task_runner_->RunUntilIdle(); |
384 EXPECT_TRUE(run_order.empty()); | 407 EXPECT_TRUE(run_order.empty()); |
385 | 408 |
386 web_view_scheduler_->setAllowVirtualTimeToAdvance(true); | 409 web_view_scheduler_->setAllowVirtualTimeToAdvance(true); |
387 mock_task_runner_->RunUntilIdle(); | 410 mock_task_runner_->RunUntilIdle(); |
388 | 411 |
389 EXPECT_THAT(run_order, ElementsAre(1)); | 412 EXPECT_THAT(run_order, ElementsAre(1)); |
390 } | 413 } |
391 | 414 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 // it will prevent further tasks from running (i.e. the RepeatingTask) by | 478 // it will prevent further tasks from running (i.e. the RepeatingTask) by |
456 // deleting the WebFrameScheduler. | 479 // deleting the WebFrameScheduler. |
457 timer_task_runner->postDelayedTask(BLINK_FROM_HERE, delete_frame_task, | 480 timer_task_runner->postDelayedTask(BLINK_FROM_HERE, delete_frame_task, |
458 9990.0); | 481 9990.0); |
459 | 482 |
460 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100)); | 483 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100)); |
461 EXPECT_EQ(10, run_count); | 484 EXPECT_EQ(10, run_count); |
462 } | 485 } |
463 | 486 |
464 } // namespace scheduler | 487 } // namespace scheduler |
OLD | NEW |