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

Side by Side Diff: components/scheduler/renderer/renderer_scheduler_impl_unittest.cc

Issue 1165853002: Pipe impl_latency_takes_priority_ to the RenderScheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/renderer_scheduler_impl.h" 5 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "cc/output/begin_frame_args.h" 8 #include "cc/output/begin_frame_args.h"
9 #include "cc/test/ordered_simple_task_runner.h" 9 #include "cc/test/ordered_simple_task_runner.h"
10 #include "cc/test/test_now_source.h" 10 #include "cc/test/test_now_source.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 deadlines->push_back(deadline); 94 deadlines->push_back(deadline);
95 (*run_count)++; 95 (*run_count)++;
96 clock->AdvanceNow(advance_time); 96 clock->AdvanceNow(advance_time);
97 } 97 }
98 98
99 void WillBeginFrameIdleTask(RendererScheduler* scheduler, 99 void WillBeginFrameIdleTask(RendererScheduler* scheduler,
100 scoped_refptr<cc::TestNowSource> clock, 100 scoped_refptr<cc::TestNowSource> clock,
101 base::TimeTicks deadline) { 101 base::TimeTicks deadline) {
102 scheduler->WillBeginFrame(cc::BeginFrameArgs::Create( 102 scheduler->WillBeginFrame(cc::BeginFrameArgs::Create(
103 BEGINFRAME_FROM_HERE, clock->Now(), base::TimeTicks(), 103 BEGINFRAME_FROM_HERE, clock->Now(), base::TimeTicks(),
104 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 104 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
105 true));
105 } 106 }
106 107
107 void UpdateClockToDeadlineIdleTestTask( 108 void UpdateClockToDeadlineIdleTestTask(
108 cc::TestNowSource* clock, 109 cc::TestNowSource* clock,
109 int* run_count, 110 int* run_count,
110 base::TimeTicks deadline) { 111 base::TimeTicks deadline) {
111 clock->SetNow(deadline); 112 clock->SetNow(deadline);
112 (*run_count)++; 113 (*run_count)++;
113 } 114 }
114 115
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 200 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
200 if (mock_task_runner_.get()) 201 if (mock_task_runner_.get())
201 mock_task_runner_->RunUntilIdle(); 202 mock_task_runner_->RunUntilIdle();
202 else 203 else
203 message_loop_->RunUntilIdle(); 204 message_loop_->RunUntilIdle();
204 } 205 }
205 206
206 void DoMainFrame() { 207 void DoMainFrame() {
207 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 208 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
208 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 209 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
209 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 210 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
211 true));
210 scheduler_->DidCommitFrameToCompositor(); 212 scheduler_->DidCommitFrameToCompositor();
211 } 213 }
212 214
213 void EnableIdleTasks() { DoMainFrame(); } 215 void EnableIdleTasks() { DoMainFrame(); }
214 216
215 Policy CurrentPolicy() { return scheduler_->current_policy_; } 217 Policy CurrentPolicy() { return scheduler_->current_policy_; }
216 218
219 bool BeginMainFrameOnCriticalPath() {
220 return scheduler_->begin_main_frame_on_critical_path_;
221 }
222
217 // Helper for posting several tasks of specific types. |task_descriptor| is a 223 // Helper for posting several tasks of specific types. |task_descriptor| is a
218 // string with space delimited task identifiers. The first letter of each 224 // string with space delimited task identifiers. The first letter of each
219 // task identifier specifies the task type: 225 // task identifier specifies the task type:
220 // - 'D': Default task 226 // - 'D': Default task
221 // - 'C': Compositor task 227 // - 'C': Compositor task
222 // - 'L': Loading task 228 // - 'L': Loading task
223 // - 'I': Idle task 229 // - 'I': Idle task
224 // - 'T': Timer task 230 // - 'T': Timer task
225 void PostTestTasks(std::vector<std::string>* run_order, 231 void PostTestTasks(std::vector<std::string>* run_order,
226 const std::string& task_descriptor) { 232 const std::string& task_descriptor) {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 387
382 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(100)); 388 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(100));
383 idle_task_runner_->PostIdleTask( 389 idle_task_runner_->PostIdleTask(
384 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 390 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
385 391
386 RunUntilIdle(); 392 RunUntilIdle();
387 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. 393 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame.
388 394
389 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 395 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
390 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 396 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
391 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 397 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
398 true));
392 RunUntilIdle(); 399 RunUntilIdle();
393 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. 400 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor.
394 401
395 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1200)); 402 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1200));
396 scheduler_->DidCommitFrameToCompositor(); 403 scheduler_->DidCommitFrameToCompositor();
397 RunUntilIdle(); 404 RunUntilIdle();
398 EXPECT_EQ(0, run_count); // We missed the deadline. 405 EXPECT_EQ(0, run_count); // We missed the deadline.
399 406
400 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 407 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
401 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 408 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
402 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 409 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
410 true));
403 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800)); 411 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800));
404 scheduler_->DidCommitFrameToCompositor(); 412 scheduler_->DidCommitFrameToCompositor();
405 RunUntilIdle(); 413 RunUntilIdle();
406 EXPECT_EQ(1, run_count); 414 EXPECT_EQ(1, run_count);
407 EXPECT_EQ(expected_deadline, deadline_in_task); 415 EXPECT_EQ(expected_deadline, deadline_in_task);
408 } 416 }
409 417
410 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { 418 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) {
411 int run_count = 0; 419 int run_count = 0;
412 420
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { 523 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) {
516 int run_count = 0; 524 int run_count = 0;
517 525
518 base::TimeTicks deadline_in_task; 526 base::TimeTicks deadline_in_task;
519 idle_task_runner_->PostIdleTask( 527 idle_task_runner_->PostIdleTask(
520 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 528 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
521 529
522 // Trigger the beginning of an idle period for 1000ms. 530 // Trigger the beginning of an idle period for 1000ms.
523 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 531 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
524 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 532 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
525 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 533 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
534 true));
526 DoMainFrame(); 535 DoMainFrame();
527 536
528 // End the idle period early (after 500ms), and send a WillBeginFrame which 537 // End the idle period early (after 500ms), and send a WillBeginFrame which
529 // specifies that the next idle period should end 1000ms from now. 538 // specifies that the next idle period should end 1000ms from now.
530 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(500)); 539 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(500));
531 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 540 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
532 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 541 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
533 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 542 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
543 true));
534 544
535 RunUntilIdle(); 545 RunUntilIdle();
536 EXPECT_EQ(0, run_count); // Not currently in an idle period. 546 EXPECT_EQ(0, run_count); // Not currently in an idle period.
537 547
538 // Trigger the start of the idle period before the task to end the previous 548 // Trigger the start of the idle period before the task to end the previous
539 // idle period has been triggered. 549 // idle period has been triggered.
540 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(400)); 550 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(400));
541 scheduler_->DidCommitFrameToCompositor(); 551 scheduler_->DidCommitFrameToCompositor();
542 552
543 // Post a task which simulates running until after the previous end idle 553 // Post a task which simulates running until after the previous end idle
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), 1547 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(),
1538 &can_exceed_idle_deadline, &run_count)); 1548 &can_exceed_idle_deadline, &run_count));
1539 RunUntilIdle(); 1549 RunUntilIdle();
1540 EXPECT_EQ(3, run_count); 1550 EXPECT_EQ(3, run_count);
1541 EXPECT_TRUE(can_exceed_idle_deadline); 1551 EXPECT_TRUE(can_exceed_idle_deadline);
1542 1552
1543 // Next long idle period will be for the maximum time, so 1553 // Next long idle period will be for the maximum time, so
1544 // CanExceedIdleDeadlineIfRequired should return true. 1554 // CanExceedIdleDeadlineIfRequired should return true.
1545 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 1555 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1546 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 1556 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
1547 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 1557 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
1558 true));
1548 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); 1559 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired());
1549 } 1560 }
1550 1561
1551 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { 1562 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) {
1552 int run_count = 0; 1563 int run_count = 0;
1553 1564
1554 max_idle_task_reposts = 2; 1565 max_idle_task_reposts = 2;
1555 idle_task_runner_->PostIdleTask( 1566 idle_task_runner_->PostIdleTask(
1556 FROM_HERE, 1567 FROM_HERE,
1557 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1568 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1635 1646
1636 TEST_F(RendererSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) { 1647 TEST_F(RendererSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) {
1637 // This should not DCHECK because there was no corresponding compositor side 1648 // This should not DCHECK because there was no corresponding compositor side
1638 // call to DidHandleInputEventOnCompositorThread with 1649 // call to DidHandleInputEventOnCompositorThread with
1639 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the 1650 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the
1640 // compositor to not be there and we don't want to make debugging impossible. 1651 // compositor to not be there and we don't want to make debugging impossible.
1641 scheduler_->DidHandleInputEventOnMainThread( 1652 scheduler_->DidHandleInputEventOnMainThread(
1642 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 1653 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
1643 } 1654 }
1644 1655
1656 TEST_F(RendererSchedulerImplTest, BeginMainFrameOnCriticalPath) {
1657 ASSERT_FALSE(BeginMainFrameOnCriticalPath());
1658
1659 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1660 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
1661 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
1662 true));
1663 ASSERT_TRUE(BeginMainFrameOnCriticalPath());
1664
1665 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1666 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
1667 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL,
1668 false));
1669 ASSERT_FALSE(BeginMainFrameOnCriticalPath());
1670 }
1671
1645 } // namespace scheduler 1672 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698