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

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

Issue 1132753008: Replaced TestNowSource with SimpleTestTickClock. (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 "base/test/simple_test_tick_clock.h"
8 #include "cc/output/begin_frame_args.h" 9 #include "cc/output/begin_frame_args.h"
9 #include "cc/test/ordered_simple_task_runner.h" 10 #include "cc/test/ordered_simple_task_runner.h"
10 #include "cc/test/test_now_source.h"
11 #include "components/scheduler/child/nestable_task_runner_for_test.h" 11 #include "components/scheduler/child/nestable_task_runner_for_test.h"
12 #include "components/scheduler/child/scheduler_message_loop_delegate.h" 12 #include "components/scheduler/child/scheduler_message_loop_delegate.h"
13 #include "components/scheduler/child/test_time_source.h" 13 #include "components/scheduler/child/test_time_source.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 namespace scheduler { 17 namespace scheduler {
18 18
19 namespace { 19 namespace {
20 class FakeInputEvent : public blink::WebInputEvent { 20 class FakeInputEvent : public blink::WebInputEvent {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 idle_task_runner->PostIdleTask( 74 idle_task_runner->PostIdleTask(
75 FROM_HERE, base::Bind(&RepostingIdleTestTask, 75 FROM_HERE, base::Bind(&RepostingIdleTestTask,
76 base::Unretained(idle_task_runner), run_count)); 76 base::Unretained(idle_task_runner), run_count));
77 } 77 }
78 (*run_count)++; 78 (*run_count)++;
79 } 79 }
80 80
81 void RepostingUpdateClockIdleTestTask( 81 void RepostingUpdateClockIdleTestTask(
82 SingleThreadIdleTaskRunner* idle_task_runner, 82 SingleThreadIdleTaskRunner* idle_task_runner,
83 int* run_count, 83 int* run_count,
84 scoped_refptr<cc::TestNowSource> clock, 84 base::SimpleTestTickClock* clock,
85 base::TimeDelta advance_time, 85 base::TimeDelta advance_time,
86 std::vector<base::TimeTicks>* deadlines, 86 std::vector<base::TimeTicks>* deadlines,
87 base::TimeTicks deadline) { 87 base::TimeTicks deadline) {
88 if ((*run_count + 1) < max_idle_task_reposts) { 88 if ((*run_count + 1) < max_idle_task_reposts) {
89 idle_task_runner->PostIdleTask( 89 idle_task_runner->PostIdleTask(
90 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, 90 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask,
91 base::Unretained(idle_task_runner), run_count, 91 base::Unretained(idle_task_runner), run_count,
92 clock, advance_time, deadlines)); 92 clock, advance_time, deadlines));
93 } 93 }
94 deadlines->push_back(deadline); 94 deadlines->push_back(deadline);
95 (*run_count)++; 95 (*run_count)++;
96 clock->AdvanceNow(advance_time); 96 clock->Advance(advance_time);
97 } 97 }
98 98
99 void WillBeginFrameIdleTask(RendererScheduler* scheduler, 99 void WillBeginFrameIdleTask(RendererScheduler* scheduler,
100 scoped_refptr<cc::TestNowSource> clock, 100 base::SimpleTestTickClock* 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->NowTicks(), base::TimeTicks(),
104 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 104 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
105 } 105 }
106 106
107 void UpdateClockToDeadlineIdleTestTask( 107 void UpdateClockToDeadlineIdleTestTask(base::SimpleTestTickClock* clock,
108 cc::TestNowSource* clock, 108 int* run_count,
109 int* run_count, 109 base::TimeTicks deadline) {
110 base::TimeTicks deadline) { 110 clock->Advance(deadline - clock->NowTicks());
111 clock->SetNow(deadline);
112 (*run_count)++; 111 (*run_count)++;
113 } 112 }
114 113
115 void PostingYieldingTestTask(RendererSchedulerImpl* scheduler, 114 void PostingYieldingTestTask(RendererSchedulerImpl* scheduler,
116 base::SingleThreadTaskRunner* task_runner, 115 base::SingleThreadTaskRunner* task_runner,
117 bool simulate_input, 116 bool simulate_input,
118 bool* should_yield_before, 117 bool* should_yield_before,
119 bool* should_yield_after) { 118 bool* should_yield_after) {
120 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork(); 119 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork();
121 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); 120 task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 // Lets gtest print human readable Policy values. 177 // Lets gtest print human readable Policy values.
179 ::std::ostream& operator<<(::std::ostream& os, 178 ::std::ostream& operator<<(::std::ostream& os,
180 const RendererSchedulerImplForTest::Policy& policy) { 179 const RendererSchedulerImplForTest::Policy& policy) {
181 return os << RendererSchedulerImplForTest::PolicyToString(policy); 180 return os << RendererSchedulerImplForTest::PolicyToString(policy);
182 } 181 }
183 182
184 class RendererSchedulerImplTest : public testing::Test { 183 class RendererSchedulerImplTest : public testing::Test {
185 public: 184 public:
186 using Policy = RendererSchedulerImpl::Policy; 185 using Policy = RendererSchedulerImpl::Policy;
187 186
188 RendererSchedulerImplTest() : clock_(cc::TestNowSource::Create(5000)) {} 187 RendererSchedulerImplTest() : clock_(new base::SimpleTestTickClock()) {
188 clock_->Advance(base::TimeDelta::FromMicroseconds(5000));
189 }
189 190
190 RendererSchedulerImplTest(base::MessageLoop* message_loop) 191 RendererSchedulerImplTest(base::MessageLoop* message_loop)
191 : clock_(cc::TestNowSource::Create(5000)), message_loop_(message_loop) {} 192 : clock_(new base::SimpleTestTickClock()), message_loop_(message_loop) {
193 clock_->Advance(base::TimeDelta::FromMicroseconds(5000));
194 }
192 195
193 ~RendererSchedulerImplTest() override {} 196 ~RendererSchedulerImplTest() override {}
194 197
195 void SetUp() override { 198 void SetUp() override {
196 if (message_loop_) { 199 if (message_loop_) {
197 nestable_task_runner_ = 200 nestable_task_runner_ =
198 SchedulerMessageLoopDelegate::Create(message_loop_.get()); 201 SchedulerMessageLoopDelegate::Create(message_loop_.get());
199 } else { 202 } else {
200 mock_task_runner_ = 203 mock_task_runner_ = make_scoped_refptr(
201 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(clock_, false)); 204 new cc::OrderedSimpleTaskRunner(clock_.get(), false));
202 nestable_task_runner_ = 205 nestable_task_runner_ =
203 NestableTaskRunnerForTest::Create(mock_task_runner_); 206 NestableTaskRunnerForTest::Create(mock_task_runner_);
204 } 207 }
205 Initialize(make_scoped_ptr( 208 Initialize(make_scoped_ptr(
206 new RendererSchedulerImplForTest(nestable_task_runner_))); 209 new RendererSchedulerImplForTest(nestable_task_runner_)));
207 } 210 }
208 211
209 void Initialize(scoped_ptr<RendererSchedulerImplForTest> scheduler) { 212 void Initialize(scoped_ptr<RendererSchedulerImplForTest> scheduler) {
210 scheduler_ = scheduler.Pass(); 213 scheduler_ = scheduler.Pass();
211 default_task_runner_ = scheduler_->DefaultTaskRunner(); 214 default_task_runner_ = scheduler_->DefaultTaskRunner();
212 compositor_task_runner_ = scheduler_->CompositorTaskRunner(); 215 compositor_task_runner_ = scheduler_->CompositorTaskRunner();
213 loading_task_runner_ = scheduler_->LoadingTaskRunner(); 216 loading_task_runner_ = scheduler_->LoadingTaskRunner();
214 idle_task_runner_ = scheduler_->IdleTaskRunner(); 217 idle_task_runner_ = scheduler_->IdleTaskRunner();
215 timer_task_runner_ = scheduler_->TimerTaskRunner(); 218 timer_task_runner_ = scheduler_->TimerTaskRunner();
216 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 219 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
217 make_scoped_ptr(new TestTimeSource(clock_))); 220 make_scoped_ptr(new TestTimeSource(clock_.get())));
218 scheduler_->GetSchedulerHelperForTesting() 221 scheduler_->GetSchedulerHelperForTesting()
219 ->GetTaskQueueManagerForTesting() 222 ->GetTaskQueueManagerForTesting()
220 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 223 ->SetTimeSourceForTesting(
224 make_scoped_ptr(new TestTimeSource(clock_.get())));
221 } 225 }
222 226
223 void TearDown() override { 227 void TearDown() override {
224 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 228 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
225 scheduler_->Shutdown(); 229 scheduler_->Shutdown();
226 if (mock_task_runner_.get()) { 230 if (mock_task_runner_.get()) {
227 // Check that all tests stop posting tasks. 231 // Check that all tests stop posting tasks.
228 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 232 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
229 while (mock_task_runner_->RunUntilIdle()) { 233 while (mock_task_runner_->RunUntilIdle()) {
230 } 234 }
231 } else { 235 } else {
232 message_loop_->RunUntilIdle(); 236 message_loop_->RunUntilIdle();
233 } 237 }
234 scheduler_.reset(); 238 scheduler_.reset();
235 } 239 }
236 240
237 void RunUntilIdle() { 241 void RunUntilIdle() {
238 // Only one of mock_task_runner_ or message_loop_ should be set. 242 // Only one of mock_task_runner_ or message_loop_ should be set.
239 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 243 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
240 if (mock_task_runner_.get()) 244 if (mock_task_runner_.get())
241 mock_task_runner_->RunUntilIdle(); 245 mock_task_runner_->RunUntilIdle();
242 else 246 else
243 message_loop_->RunUntilIdle(); 247 message_loop_->RunUntilIdle();
244 } 248 }
245 249
246 void DoMainFrame() { 250 void DoMainFrame() {
247 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 251 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
248 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 252 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
249 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 253 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
250 scheduler_->DidCommitFrameToCompositor(); 254 scheduler_->DidCommitFrameToCompositor();
251 } 255 }
252 256
253 void EnableIdleTasks() { DoMainFrame(); } 257 void EnableIdleTasks() { DoMainFrame(); }
254 258
255 Policy CurrentPolicy() { 259 Policy CurrentPolicy() {
256 return scheduler_->MainThreadOnly().current_policy_; 260 return scheduler_->MainThreadOnly().current_policy_;
257 } 261 }
258 262
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 &RendererSchedulerImpl::TaskQueueIdToString); 340 &RendererSchedulerImpl::TaskQueueIdToString);
337 } 341 }
338 342
339 static void CheckAllPolicyToString() { 343 static void CheckAllPolicyToString() {
340 CallForEachEnumValue<RendererSchedulerImpl::Policy>( 344 CallForEachEnumValue<RendererSchedulerImpl::Policy>(
341 RendererSchedulerImpl::Policy::FIRST_POLICY, 345 RendererSchedulerImpl::Policy::FIRST_POLICY,
342 RendererSchedulerImpl::Policy::POLICY_COUNT, 346 RendererSchedulerImpl::Policy::POLICY_COUNT,
343 &RendererSchedulerImpl::PolicyToString); 347 &RendererSchedulerImpl::PolicyToString);
344 } 348 }
345 349
346 scoped_refptr<cc::TestNowSource> clock_; 350 scoped_ptr<base::SimpleTestTickClock> clock_;
347 // Only one of mock_task_runner_ or message_loop_ will be set. 351 // Only one of mock_task_runner_ or message_loop_ will be set.
348 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; 352 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
349 scoped_ptr<base::MessageLoop> message_loop_; 353 scoped_ptr<base::MessageLoop> message_loop_;
350 354
351 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_; 355 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_;
352 scoped_ptr<RendererSchedulerImplForTest> scheduler_; 356 scoped_ptr<RendererSchedulerImplForTest> scheduler_;
353 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; 357 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
354 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; 358 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
355 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; 359 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_;
356 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; 360 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_;
(...skipping 27 matching lines...) Expand all
384 FROM_HERE, base::Bind(AppendToVectorReentrantTask, default_task_runner_, 388 FROM_HERE, base::Bind(AppendToVectorReentrantTask, default_task_runner_,
385 &run_order, &count, 5)); 389 &run_order, &count, 5));
386 RunUntilIdle(); 390 RunUntilIdle();
387 391
388 EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4)); 392 EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4));
389 } 393 }
390 394
391 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) { 395 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) {
392 int run_count = 0; 396 int run_count = 0;
393 base::TimeTicks expected_deadline = 397 base::TimeTicks expected_deadline =
394 clock_->Now() + base::TimeDelta::FromMilliseconds(2300); 398 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(2300);
395 base::TimeTicks deadline_in_task; 399 base::TimeTicks deadline_in_task;
396 400
397 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(100)); 401 clock_->Advance(base::TimeDelta::FromMilliseconds(100));
398 idle_task_runner_->PostIdleTask( 402 idle_task_runner_->PostIdleTask(
399 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 403 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
400 404
401 RunUntilIdle(); 405 RunUntilIdle();
402 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. 406 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame.
403 407
404 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 408 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
405 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 409 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
406 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 410 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
407 RunUntilIdle(); 411 RunUntilIdle();
408 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. 412 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor.
409 413
410 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1200)); 414 clock_->Advance(base::TimeDelta::FromMilliseconds(1200));
411 scheduler_->DidCommitFrameToCompositor(); 415 scheduler_->DidCommitFrameToCompositor();
412 RunUntilIdle(); 416 RunUntilIdle();
413 EXPECT_EQ(0, run_count); // We missed the deadline. 417 EXPECT_EQ(0, run_count); // We missed the deadline.
414 418
415 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 419 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
416 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 420 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
417 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 421 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
418 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800)); 422 clock_->Advance(base::TimeDelta::FromMilliseconds(800));
419 scheduler_->DidCommitFrameToCompositor(); 423 scheduler_->DidCommitFrameToCompositor();
420 RunUntilIdle(); 424 RunUntilIdle();
421 EXPECT_EQ(1, run_count); 425 EXPECT_EQ(1, run_count);
422 EXPECT_EQ(expected_deadline, deadline_in_task); 426 EXPECT_EQ(expected_deadline, deadline_in_task);
423 } 427 }
424 428
425 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { 429 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) {
426 int run_count = 0; 430 int run_count = 0;
427 431
428 max_idle_task_reposts = 2; 432 max_idle_task_reposts = 2;
(...skipping 13 matching lines...) Expand all
442 EXPECT_EQ(2, run_count); 446 EXPECT_EQ(2, run_count);
443 } 447 }
444 448
445 TEST_F(RendererSchedulerImplTest, TestIdleTaskExceedsDeadline) { 449 TEST_F(RendererSchedulerImplTest, TestIdleTaskExceedsDeadline) {
446 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 450 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
447 int run_count = 0; 451 int run_count = 0;
448 452
449 // Post two UpdateClockToDeadlineIdleTestTask tasks. 453 // Post two UpdateClockToDeadlineIdleTestTask tasks.
450 idle_task_runner_->PostIdleTask( 454 idle_task_runner_->PostIdleTask(
451 FROM_HERE, 455 FROM_HERE,
452 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_, &run_count)); 456 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_.get(), &run_count));
453 idle_task_runner_->PostIdleTask( 457 idle_task_runner_->PostIdleTask(
454 FROM_HERE, 458 FROM_HERE,
455 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_, &run_count)); 459 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_.get(), &run_count));
456 460
457 EnableIdleTasks(); 461 EnableIdleTasks();
458 RunUntilIdle(); 462 RunUntilIdle();
459 // Only the first idle task should execute since it's used up the deadline. 463 // Only the first idle task should execute since it's used up the deadline.
460 EXPECT_EQ(1, run_count); 464 EXPECT_EQ(1, run_count);
461 465
462 EnableIdleTasks(); 466 EnableIdleTasks();
463 RunUntilIdle(); 467 RunUntilIdle();
464 // Second task should be run on the next idle period. 468 // Second task should be run on the next idle period.
465 EXPECT_EQ(2, run_count); 469 EXPECT_EQ(2, run_count);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 533
530 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { 534 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) {
531 int run_count = 0; 535 int run_count = 0;
532 536
533 base::TimeTicks deadline_in_task; 537 base::TimeTicks deadline_in_task;
534 idle_task_runner_->PostIdleTask( 538 idle_task_runner_->PostIdleTask(
535 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 539 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
536 540
537 // Trigger the beginning of an idle period for 1000ms. 541 // Trigger the beginning of an idle period for 1000ms.
538 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 542 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
539 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 543 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
540 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 544 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
541 DoMainFrame(); 545 DoMainFrame();
542 546
543 // End the idle period early (after 500ms), and send a WillBeginFrame which 547 // End the idle period early (after 500ms), and send a WillBeginFrame which
544 // specifies that the next idle period should end 1000ms from now. 548 // specifies that the next idle period should end 1000ms from now.
545 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(500)); 549 clock_->Advance(base::TimeDelta::FromMilliseconds(500));
546 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 550 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
547 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 551 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
548 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 552 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
549 553
550 RunUntilIdle(); 554 RunUntilIdle();
551 EXPECT_EQ(0, run_count); // Not currently in an idle period. 555 EXPECT_EQ(0, run_count); // Not currently in an idle period.
552 556
553 // Trigger the start of the idle period before the task to end the previous 557 // Trigger the start of the idle period before the task to end the previous
554 // idle period has been triggered. 558 // idle period has been triggered.
555 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(400)); 559 clock_->Advance(base::TimeDelta::FromMilliseconds(400));
556 scheduler_->DidCommitFrameToCompositor(); 560 scheduler_->DidCommitFrameToCompositor();
557 561
558 // Post a task which simulates running until after the previous end idle 562 // Post a task which simulates running until after the previous end idle
559 // period delayed task was scheduled for 563 // period delayed task was scheduled for
560 scheduler_->DefaultTaskRunner()->PostTask(FROM_HERE, base::Bind(NullTask)); 564 scheduler_->DefaultTaskRunner()->PostTask(FROM_HERE, base::Bind(NullTask));
561 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(300)); 565 clock_->Advance(base::TimeDelta::FromMilliseconds(300));
562 566
563 RunUntilIdle(); 567 RunUntilIdle();
564 EXPECT_EQ(1, run_count); // We should still be in the new idle period. 568 EXPECT_EQ(1, run_count); // We should still be in the new idle period.
565 } 569 }
566 570
567 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) { 571 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) {
568 std::vector<std::string> run_order; 572 std::vector<std::string> run_order;
569 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 573 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
570 574
571 EnableIdleTasks(); 575 EnableIdleTasks();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 std::string("I1"))); 625 std::string("I1")));
622 } 626 }
623 627
624 TEST_F(RendererSchedulerImplTest, 628 TEST_F(RendererSchedulerImplTest,
625 TestCompositorPolicy_TimersOnlyRunWhenIdle_MainThreadOnCriticalPath) { 629 TestCompositorPolicy_TimersOnlyRunWhenIdle_MainThreadOnCriticalPath) {
626 std::vector<std::string> run_order; 630 std::vector<std::string> run_order;
627 PostTestTasks(&run_order, "C1 T1"); 631 PostTestTasks(&run_order, "C1 T1");
628 632
629 scheduler_->DidAnimateForInputOnCompositorThread(); 633 scheduler_->DidAnimateForInputOnCompositorThread();
630 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 634 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
631 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 635 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
632 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL)); 636 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL));
633 scheduler_->DidCommitFrameToCompositor(); // Starts Idle Period 637 scheduler_->DidCommitFrameToCompositor(); // Starts Idle Period
634 RunUntilIdle(); 638 RunUntilIdle();
635 639
636 EXPECT_THAT(run_order, 640 EXPECT_THAT(run_order,
637 testing::ElementsAre(std::string("C1"), std::string("T1"))); 641 testing::ElementsAre(std::string("C1"), std::string("T1")));
638 642
639 // End the idle period. 643 // End the idle period.
640 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(500)); 644 clock_->Advance(base::TimeDelta::FromMilliseconds(500));
641 scheduler_->DidAnimateForInputOnCompositorThread(); 645 scheduler_->DidAnimateForInputOnCompositorThread();
642 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 646 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
643 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 647 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
644 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL)); 648 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL));
645 649
646 run_order.clear(); 650 run_order.clear();
647 PostTestTasks(&run_order, "C1 T1"); 651 PostTestTasks(&run_order, "C1 T1");
648 RunUntilIdle(); 652 RunUntilIdle();
649 653
650 EXPECT_THAT(run_order, testing::ElementsAre(std::string("C1"))); 654 EXPECT_THAT(run_order, testing::ElementsAre(std::string("C1")));
651 } 655 }
652 656
653 TEST_F(RendererSchedulerImplTest, 657 TEST_F(RendererSchedulerImplTest,
654 TestCompositorPolicy_TimersAlwaysRunIfNoRecentIdlePeriod) { 658 TestCompositorPolicy_TimersAlwaysRunIfNoRecentIdlePeriod) {
655 std::vector<std::string> run_order; 659 std::vector<std::string> run_order;
656 PostTestTasks(&run_order, "C1 T1"); 660 PostTestTasks(&run_order, "C1 T1");
657 661
658 // Simulate no recent idle period. 662 // Simulate no recent idle period.
659 clock_->AdvanceNow(idle_period_starvation_threshold() * 2); 663 clock_->Advance(idle_period_starvation_threshold() * 2);
660 664
661 scheduler_->DidAnimateForInputOnCompositorThread(); 665 scheduler_->DidAnimateForInputOnCompositorThread();
662 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 666 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
663 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 667 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
664 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL)); 668 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL));
665 669
666 RunUntilIdle(); 670 RunUntilIdle();
667 671
668 EXPECT_THAT(run_order, 672 EXPECT_THAT(run_order,
669 testing::ElementsAre(std::string("C1"), std::string("T1"))); 673 testing::ElementsAre(std::string("C1"), std::string("T1")));
670 } 674 }
671 675
672 TEST_F(RendererSchedulerImplTest, 676 TEST_F(RendererSchedulerImplTest,
673 TestCompositorPolicy_TimersAlwaysRun_MainThreadNotOnCriticalPath) { 677 TestCompositorPolicy_TimersAlwaysRun_MainThreadNotOnCriticalPath) {
674 std::vector<std::string> run_order; 678 std::vector<std::string> run_order;
675 PostTestTasks(&run_order, "C1 T1"); 679 PostTestTasks(&run_order, "C1 T1");
676 680
677 scheduler_->DidAnimateForInputOnCompositorThread(); 681 scheduler_->DidAnimateForInputOnCompositorThread();
678 cc::BeginFrameArgs begin_frame_args1 = cc::BeginFrameArgs::Create( 682 cc::BeginFrameArgs begin_frame_args1 = cc::BeginFrameArgs::Create(
679 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 683 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
680 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL); 684 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL);
681 begin_frame_args1.on_critical_path = false; 685 begin_frame_args1.on_critical_path = false;
682 scheduler_->WillBeginFrame(begin_frame_args1); 686 scheduler_->WillBeginFrame(begin_frame_args1);
683 scheduler_->DidCommitFrameToCompositor(); // Starts Idle Period 687 scheduler_->DidCommitFrameToCompositor(); // Starts Idle Period
684 RunUntilIdle(); 688 RunUntilIdle();
685 689
686 EXPECT_THAT(run_order, 690 EXPECT_THAT(run_order,
687 testing::ElementsAre(std::string("C1"), std::string("T1"))); 691 testing::ElementsAre(std::string("C1"), std::string("T1")));
688 692
689 // End the idle period. 693 // End the idle period.
690 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(500)); 694 clock_->Advance(base::TimeDelta::FromMilliseconds(500));
691 scheduler_->DidAnimateForInputOnCompositorThread(); 695 scheduler_->DidAnimateForInputOnCompositorThread();
692 cc::BeginFrameArgs begin_frame_args2 = cc::BeginFrameArgs::Create( 696 cc::BeginFrameArgs begin_frame_args2 = cc::BeginFrameArgs::Create(
693 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 697 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
694 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL); 698 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL);
695 begin_frame_args2.on_critical_path = false; 699 begin_frame_args2.on_critical_path = false;
696 scheduler_->WillBeginFrame(begin_frame_args2); 700 scheduler_->WillBeginFrame(begin_frame_args2);
697 701
698 run_order.clear(); 702 run_order.clear();
699 PostTestTasks(&run_order, "C1 T1"); 703 PostTestTasks(&run_order, "C1 T1");
700 RunUntilIdle(); 704 RunUntilIdle();
701 705
702 EXPECT_THAT(run_order, 706 EXPECT_THAT(run_order,
703 testing::ElementsAre(std::string("C1"), std::string("T1"))); 707 testing::ElementsAre(std::string("C1"), std::string("T1")));
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 EnableIdleTasks(); 801 EnableIdleTasks();
798 RunUntilIdle(); 802 RunUntilIdle();
799 // In loading policy compositor tasks are best effort and should be run last. 803 // In loading policy compositor tasks are best effort and should be run last.
800 EXPECT_THAT(run_order, 804 EXPECT_THAT(run_order,
801 testing::ElementsAre(std::string("L1"), std::string("D1"), 805 testing::ElementsAre(std::string("L1"), std::string("D1"),
802 std::string("D2"), std::string("I1"), 806 std::string("D2"), std::string("I1"),
803 std::string("C1"), std::string("C2"))); 807 std::string("C1"), std::string("C2")));
804 808
805 // Advance 1.5s and try again, the loading policy should have ended and the 809 // Advance 1.5s and try again, the loading policy should have ended and the
806 // task order should return to normal. 810 // task order should return to normal.
807 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1500)); 811 clock_->Advance(base::TimeDelta::FromMilliseconds(1500));
808 run_order.clear(); 812 run_order.clear();
809 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 813 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
810 EnableIdleTasks(); 814 EnableIdleTasks();
811 RunUntilIdle(); 815 RunUntilIdle();
812 EXPECT_THAT(run_order, 816 EXPECT_THAT(run_order,
813 testing::ElementsAre(std::string("L1"), std::string("D1"), 817 testing::ElementsAre(std::string("L1"), std::string("D1"),
814 std::string("C1"), std::string("D2"), 818 std::string("C1"), std::string("D2"),
815 std::string("C2"), std::string("I1"))); 819 std::string("C2"), std::string("I1")));
816 } 820 }
817 821
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 991
988 scheduler_->DidHandleInputEventOnCompositorThread( 992 scheduler_->DidHandleInputEventOnCompositorThread(
989 FakeInputEvent(blink::WebInputEvent::GestureFlingStart), 993 FakeInputEvent(blink::WebInputEvent::GestureFlingStart),
990 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 994 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
991 RunUntilIdle(); 995 RunUntilIdle();
992 EXPECT_THAT(run_order, 996 EXPECT_THAT(run_order,
993 testing::ElementsAre(std::string("C1"), std::string("C2"), 997 testing::ElementsAre(std::string("C1"), std::string("C2"),
994 std::string("D1"), std::string("D2"))); 998 std::string("D1"), std::string("D2")));
995 999
996 run_order.clear(); 1000 run_order.clear();
997 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1001 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
998 PostTestTasks(&run_order, "D1 C1 D2 C2"); 1002 PostTestTasks(&run_order, "D1 C1 D2 C2");
999 1003
1000 // Compositor policy mode should have ended now that the clock has advanced. 1004 // Compositor policy mode should have ended now that the clock has advanced.
1001 RunUntilIdle(); 1005 RunUntilIdle();
1002 EXPECT_THAT(run_order, 1006 EXPECT_THAT(run_order,
1003 testing::ElementsAre(std::string("D1"), std::string("C1"), 1007 testing::ElementsAre(std::string("D1"), std::string("C1"),
1004 std::string("D2"), std::string("C2"))); 1008 std::string("D2"), std::string("C2")));
1005 } 1009 }
1006 1010
1007 TEST_F(RendererSchedulerImplTest, 1011 TEST_F(RendererSchedulerImplTest,
1008 TestCompositorPolicyEnds_MainThreadHandlesInput) { 1012 TestCompositorPolicyEnds_MainThreadHandlesInput) {
1009 std::vector<std::string> run_order; 1013 std::vector<std::string> run_order;
1010 PostTestTasks(&run_order, "D1 C1 D2 C2"); 1014 PostTestTasks(&run_order, "D1 C1 D2 C2");
1011 1015
1012 scheduler_->DidHandleInputEventOnCompositorThread( 1016 scheduler_->DidHandleInputEventOnCompositorThread(
1013 FakeInputEvent(blink::WebInputEvent::GestureFlingStart), 1017 FakeInputEvent(blink::WebInputEvent::GestureFlingStart),
1014 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1018 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1015 scheduler_->DidHandleInputEventOnMainThread( 1019 scheduler_->DidHandleInputEventOnMainThread(
1016 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 1020 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
1017 RunUntilIdle(); 1021 RunUntilIdle();
1018 EXPECT_THAT(run_order, 1022 EXPECT_THAT(run_order,
1019 testing::ElementsAre(std::string("C1"), std::string("C2"), 1023 testing::ElementsAre(std::string("C1"), std::string("C2"),
1020 std::string("D1"), std::string("D2"))); 1024 std::string("D1"), std::string("D2")));
1021 1025
1022 run_order.clear(); 1026 run_order.clear();
1023 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1027 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1024 PostTestTasks(&run_order, "D1 C1 D2 C2"); 1028 PostTestTasks(&run_order, "D1 C1 D2 C2");
1025 1029
1026 // Compositor policy mode should have ended now that the clock has advanced. 1030 // Compositor policy mode should have ended now that the clock has advanced.
1027 RunUntilIdle(); 1031 RunUntilIdle();
1028 EXPECT_THAT(run_order, 1032 EXPECT_THAT(run_order,
1029 testing::ElementsAre(std::string("D1"), std::string("C1"), 1033 testing::ElementsAre(std::string("D1"), std::string("C1"),
1030 std::string("D2"), std::string("C2"))); 1034 std::string("D2"), std::string("C2")));
1031 } 1035 }
1032 1036
1033 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) { 1037 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) {
1034 std::vector<std::string> run_order; 1038 std::vector<std::string> run_order;
1035 PostTestTasks(&run_order, "L1 D1 C1 D2 C2"); 1039 PostTestTasks(&run_order, "L1 D1 C1 D2 C2");
1036 1040
1037 scheduler_->DidHandleInputEventOnCompositorThread( 1041 scheduler_->DidHandleInputEventOnCompositorThread(
1038 FakeInputEvent(blink::WebInputEvent::TouchStart), 1042 FakeInputEvent(blink::WebInputEvent::TouchStart),
1039 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1043 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1040 RunUntilIdle(); 1044 RunUntilIdle();
1041 EXPECT_THAT(run_order, 1045 EXPECT_THAT(run_order,
1042 testing::ElementsAre(std::string("C1"), std::string("C2"), 1046 testing::ElementsAre(std::string("C1"), std::string("C2"),
1043 std::string("D1"), std::string("D2"))); 1047 std::string("D1"), std::string("D2")));
1044 1048
1045 run_order.clear(); 1049 run_order.clear();
1046 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1050 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1047 1051
1048 // Don't post any compositor tasks to simulate a very long running event 1052 // Don't post any compositor tasks to simulate a very long running event
1049 // handler. 1053 // handler.
1050 PostTestTasks(&run_order, "D1 D2"); 1054 PostTestTasks(&run_order, "D1 D2");
1051 1055
1052 // Touchstart policy mode should have ended now that the clock has advanced. 1056 // Touchstart policy mode should have ended now that the clock has advanced.
1053 RunUntilIdle(); 1057 RunUntilIdle();
1054 EXPECT_THAT(run_order, 1058 EXPECT_THAT(run_order,
1055 testing::ElementsAre(std::string("L1"), std::string("D1"), 1059 testing::ElementsAre(std::string("L1"), std::string("D1"),
1056 std::string("D2"))); 1060 std::string("D2")));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1106 default_task_runner_->PostTask( 1110 default_task_runner_->PostTask(
1107 FROM_HERE, 1111 FROM_HERE,
1108 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input, 1112 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input,
1109 &is_anticipated_before, &is_anticipated_after)); 1113 &is_anticipated_before, &is_anticipated_after));
1110 RunUntilIdle(); 1114 RunUntilIdle();
1111 // When input is received, the scheduler should indicate that high-priority 1115 // When input is received, the scheduler should indicate that high-priority
1112 // work is anticipated. 1116 // work is anticipated.
1113 EXPECT_FALSE(is_anticipated_before); 1117 EXPECT_FALSE(is_anticipated_before);
1114 EXPECT_TRUE(is_anticipated_after); 1118 EXPECT_TRUE(is_anticipated_after);
1115 1119
1116 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 1120 clock_->Advance(priority_escalation_after_input_duration() * 2);
1117 simulate_input = false; 1121 simulate_input = false;
1118 default_task_runner_->PostTask( 1122 default_task_runner_->PostTask(
1119 FROM_HERE, 1123 FROM_HERE,
1120 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input, 1124 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input,
1121 &is_anticipated_before, &is_anticipated_after)); 1125 &is_anticipated_before, &is_anticipated_after));
1122 RunUntilIdle(); 1126 RunUntilIdle();
1123 // Without additional input, the scheduler should indicate that high-priority 1127 // Without additional input, the scheduler should indicate that high-priority
1124 // work is no longer anticipated. 1128 // work is no longer anticipated.
1125 EXPECT_FALSE(is_anticipated_before); 1129 EXPECT_FALSE(is_anticipated_before);
1126 EXPECT_FALSE(is_anticipated_after); 1130 EXPECT_FALSE(is_anticipated_after);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 1176
1173 // An input event should bump us into input priority. 1177 // An input event should bump us into input priority.
1174 scheduler_->DidHandleInputEventOnCompositorThread( 1178 scheduler_->DidHandleInputEventOnCompositorThread(
1175 FakeInputEvent(blink::WebInputEvent::GestureFlingStart), 1179 FakeInputEvent(blink::WebInputEvent::GestureFlingStart),
1176 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1180 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1177 RunUntilIdle(); 1181 RunUntilIdle();
1178 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 1182 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
1179 1183
1180 // Simulate the input event being queued for a very long time. The compositor 1184 // Simulate the input event being queued for a very long time. The compositor
1181 // task we post here represents the enqueued input task. 1185 // task we post here represents the enqueued input task.
1182 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 1186 clock_->Advance(priority_escalation_after_input_duration() * 2);
1183 scheduler_->DidHandleInputEventOnMainThread( 1187 scheduler_->DidHandleInputEventOnMainThread(
1184 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 1188 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
1185 RunUntilIdle(); 1189 RunUntilIdle();
1186 1190
1187 // Even though we exceeded the input priority escalation period, we should 1191 // Even though we exceeded the input priority escalation period, we should
1188 // still be in compositor priority since the input remains queued. 1192 // still be in compositor priority since the input remains queued.
1189 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 1193 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
1190 1194
1191 // After the escalation period ends we should go back into normal mode. 1195 // After the escalation period ends we should go back into normal mode.
1192 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 1196 clock_->Advance(priority_escalation_after_input_duration() * 2);
1193 RunUntilIdle(); 1197 RunUntilIdle();
1194 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 1198 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
1195 } 1199 }
1196 1200
1197 class RendererSchedulerImplWithMockSchedulerTest 1201 class RendererSchedulerImplWithMockSchedulerTest
1198 : public RendererSchedulerImplTest { 1202 : public RendererSchedulerImplTest {
1199 public: 1203 public:
1200 void SetUp() override { 1204 void SetUp() override {
1201 mock_task_runner_ = 1205 mock_task_runner_ = make_scoped_refptr(
1202 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(clock_, false)); 1206 new cc::OrderedSimpleTaskRunner(clock_.get(), false));
1203 nestable_task_runner_ = 1207 nestable_task_runner_ =
1204 NestableTaskRunnerForTest::Create(mock_task_runner_); 1208 NestableTaskRunnerForTest::Create(mock_task_runner_);
1205 mock_scheduler_ = new RendererSchedulerImplForTest(nestable_task_runner_); 1209 mock_scheduler_ = new RendererSchedulerImplForTest(nestable_task_runner_);
1206 Initialize(make_scoped_ptr(mock_scheduler_)); 1210 Initialize(make_scoped_ptr(mock_scheduler_));
1207 } 1211 }
1208 1212
1209 protected: 1213 protected:
1210 RendererSchedulerImplForTest* mock_scheduler_; 1214 RendererSchedulerImplForTest* mock_scheduler_;
1211 }; 1215 };
1212 1216
1213 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1217 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1214 OnlyOnePendingUrgentPolicyUpdatey) { 1218 OnlyOnePendingUrgentPolicyUpdatey) {
1215 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1219 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1216 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1220 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1217 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1221 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1218 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1222 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1219 1223
1220 RunUntilIdle(); 1224 RunUntilIdle();
1221 1225
1222 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1226 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1223 } 1227 }
1224 1228
1225 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1229 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1226 OnePendingDelayedAndOneUrgentUpdatePolicy) { 1230 OnePendingDelayedAndOneUrgentUpdatePolicy) {
1227 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1231 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1228 1232
1229 mock_scheduler_->ScheduleDelayedPolicyUpdate( 1233 mock_scheduler_->ScheduleDelayedPolicyUpdate(
1230 clock_->Now(), base::TimeDelta::FromMilliseconds(1)); 1234 clock_->NowTicks(), base::TimeDelta::FromMilliseconds(1));
1231 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1235 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1232 1236
1233 RunUntilIdle(); 1237 RunUntilIdle();
1234 1238
1235 // We expect both the urgent and the delayed updates to run. 1239 // We expect both the urgent and the delayed updates to run.
1236 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1240 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1237 } 1241 }
1238 1242
1239 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1243 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1240 OneUrgentAndOnePendingDelayedUpdatePolicy) { 1244 OneUrgentAndOnePendingDelayedUpdatePolicy) {
1241 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1245 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1242 1246
1243 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1247 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1244 mock_scheduler_->ScheduleDelayedPolicyUpdate( 1248 mock_scheduler_->ScheduleDelayedPolicyUpdate(
1245 clock_->Now(), base::TimeDelta::FromMilliseconds(1)); 1249 clock_->NowTicks(), base::TimeDelta::FromMilliseconds(1));
1246 1250
1247 RunUntilIdle(); 1251 RunUntilIdle();
1248 1252
1249 // We expect both the urgent and the delayed updates to run. 1253 // We expect both the urgent and the delayed updates to run.
1250 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1254 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1251 } 1255 }
1252 1256
1253 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1257 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1254 UpdatePolicyCountTriggeredByOneInputEvent) { 1258 UpdatePolicyCountTriggeredByOneInputEvent) {
1255 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy 1259 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy
1256 // update. 1260 // update.
1257 scheduler_->DidHandleInputEventOnCompositorThread( 1261 scheduler_->DidHandleInputEventOnCompositorThread(
1258 FakeInputEvent(blink::WebInputEvent::TouchStart), 1262 FakeInputEvent(blink::WebInputEvent::TouchStart),
1259 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1263 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1260 EXPECT_EQ(0, mock_scheduler_->update_policy_count_); 1264 EXPECT_EQ(0, mock_scheduler_->update_policy_count_);
1261 mock_task_runner_->RunPendingTasks(); 1265 mock_task_runner_->RunPendingTasks();
1262 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1266 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1263 1267
1264 scheduler_->DidHandleInputEventOnMainThread( 1268 scheduler_->DidHandleInputEventOnMainThread(
1265 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1269 FakeInputEvent(blink::WebInputEvent::TouchStart));
1266 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1270 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1267 1271
1268 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1272 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1269 RunUntilIdle(); 1273 RunUntilIdle();
1270 1274
1271 // We finally expect a delayed policy update 100ms later. 1275 // We finally expect a delayed policy update 100ms later.
1272 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1276 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1273 } 1277 }
1274 1278
1275 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1279 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1276 UpdatePolicyCountTriggeredByThreeInputEvents) { 1280 UpdatePolicyCountTriggeredByThreeInputEvents) {
1277 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy 1281 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy
1278 // update. 1282 // update.
(...skipping 28 matching lines...) Expand all
1307 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1311 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1308 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1312 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1309 mock_task_runner_->RunPendingTasks(); 1313 mock_task_runner_->RunPendingTasks();
1310 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1314 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1311 1315
1312 // We expect DidHandleInputEvent to trigger a policy update. 1316 // We expect DidHandleInputEvent to trigger a policy update.
1313 scheduler_->DidHandleInputEventOnMainThread( 1317 scheduler_->DidHandleInputEventOnMainThread(
1314 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1318 FakeInputEvent(blink::WebInputEvent::TouchMove));
1315 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1319 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1316 1320
1317 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1321 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1318 RunUntilIdle(); 1322 RunUntilIdle();
1319 1323
1320 // We finally expect a delayed policy update. 1324 // We finally expect a delayed policy update.
1321 EXPECT_EQ(3, mock_scheduler_->update_policy_count_); 1325 EXPECT_EQ(3, mock_scheduler_->update_policy_count_);
1322 } 1326 }
1323 1327
1324 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1328 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1325 UpdatePolicyCountTriggeredByTwoInputEventsWithALongSeparatingDelay) { 1329 UpdatePolicyCountTriggeredByTwoInputEventsWithALongSeparatingDelay) {
1326 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy 1330 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy
1327 // update. 1331 // update.
1328 scheduler_->DidHandleInputEventOnCompositorThread( 1332 scheduler_->DidHandleInputEventOnCompositorThread(
1329 FakeInputEvent(blink::WebInputEvent::TouchStart), 1333 FakeInputEvent(blink::WebInputEvent::TouchStart),
1330 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1334 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1331 EXPECT_EQ(0, mock_scheduler_->update_policy_count_); 1335 EXPECT_EQ(0, mock_scheduler_->update_policy_count_);
1332 mock_task_runner_->RunPendingTasks(); 1336 mock_task_runner_->RunPendingTasks();
1333 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1337 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1334 1338
1335 scheduler_->DidHandleInputEventOnMainThread( 1339 scheduler_->DidHandleInputEventOnMainThread(
1336 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1340 FakeInputEvent(blink::WebInputEvent::TouchStart));
1337 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1341 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1338 1342
1339 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1343 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1340 RunUntilIdle(); 1344 RunUntilIdle();
1341 // We expect a delayed policy update. 1345 // We expect a delayed policy update.
1342 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1346 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1343 1347
1344 // We expect the second call to DidHandleInputEventOnCompositorThread to post 1348 // We expect the second call to DidHandleInputEventOnCompositorThread to post
1345 // an urgent policy update because we are no longer in compositor priority. 1349 // an urgent policy update because we are no longer in compositor priority.
1346 scheduler_->DidHandleInputEventOnCompositorThread( 1350 scheduler_->DidHandleInputEventOnCompositorThread(
1347 FakeInputEvent(blink::WebInputEvent::TouchMove), 1351 FakeInputEvent(blink::WebInputEvent::TouchMove),
1348 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1352 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1349 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1353 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1350 mock_task_runner_->RunPendingTasks(); 1354 mock_task_runner_->RunPendingTasks();
1351 EXPECT_EQ(3, mock_scheduler_->update_policy_count_); 1355 EXPECT_EQ(3, mock_scheduler_->update_policy_count_);
1352 1356
1353 scheduler_->DidHandleInputEventOnMainThread( 1357 scheduler_->DidHandleInputEventOnMainThread(
1354 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1358 FakeInputEvent(blink::WebInputEvent::TouchMove));
1355 EXPECT_EQ(3, mock_scheduler_->update_policy_count_); 1359 EXPECT_EQ(3, mock_scheduler_->update_policy_count_);
1356 1360
1357 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1361 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1358 RunUntilIdle(); 1362 RunUntilIdle();
1359 1363
1360 // We finally expect a delayed policy update. 1364 // We finally expect a delayed policy update.
1361 EXPECT_EQ(4, mock_scheduler_->update_policy_count_); 1365 EXPECT_EQ(4, mock_scheduler_->update_policy_count_);
1362 } 1366 }
1363 1367
1364 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1368 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1365 EnsureUpdatePolicyNotTriggeredTooOften) { 1369 EnsureUpdatePolicyNotTriggeredTooOften) {
1366 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1370 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1367 1371
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1455 EnableIdleTasks(); 1459 EnableIdleTasks();
1456 RunUntilIdle(); 1460 RunUntilIdle();
1457 // Note we expect task 3 to run last because it's non-nestable. 1461 // Note we expect task 3 to run last because it's non-nestable.
1458 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"), 1462 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"),
1459 std::string("4"), std::string("5"), 1463 std::string("4"), std::string("5"),
1460 std::string("3"))); 1464 std::string("3")));
1461 } 1465 }
1462 1466
1463 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriod) { 1467 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriod) {
1464 base::TimeTicks expected_deadline = 1468 base::TimeTicks expected_deadline =
1465 clock_->Now() + maximum_idle_period_duration(); 1469 clock_->NowTicks() + maximum_idle_period_duration();
1466 base::TimeTicks deadline_in_task; 1470 base::TimeTicks deadline_in_task;
1467 int run_count = 0; 1471 int run_count = 0;
1468 1472
1469 idle_task_runner_->PostIdleTask( 1473 idle_task_runner_->PostIdleTask(
1470 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1474 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1471 1475
1472 RunUntilIdle(); 1476 RunUntilIdle();
1473 EXPECT_EQ(0, run_count); // Shouldn't run yet as no idle period. 1477 EXPECT_EQ(0, run_count); // Shouldn't run yet as no idle period.
1474 1478
1475 scheduler_->BeginFrameNotExpectedSoon(); 1479 scheduler_->BeginFrameNotExpectedSoon();
1476 RunUntilIdle(); 1480 RunUntilIdle();
1477 EXPECT_EQ(1, run_count); // Should have run in a long idle time. 1481 EXPECT_EQ(1, run_count); // Should have run in a long idle time.
1478 EXPECT_EQ(expected_deadline, deadline_in_task); 1482 EXPECT_EQ(expected_deadline, deadline_in_task);
1479 } 1483 }
1480 1484
1481 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) { 1485 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) {
1482 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(30); 1486 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(30);
1483 base::TimeTicks expected_deadline = clock_->Now() + pending_task_delay; 1487 base::TimeTicks expected_deadline = clock_->NowTicks() + pending_task_delay;
1484 base::TimeTicks deadline_in_task; 1488 base::TimeTicks deadline_in_task;
1485 int run_count = 0; 1489 int run_count = 0;
1486 1490
1487 idle_task_runner_->PostIdleTask( 1491 idle_task_runner_->PostIdleTask(
1488 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1492 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1489 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1493 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1490 pending_task_delay); 1494 pending_task_delay);
1491 1495
1492 scheduler_->BeginFrameNotExpectedSoon(); 1496 scheduler_->BeginFrameNotExpectedSoon();
1493 RunUntilIdle(); 1497 RunUntilIdle();
1494 EXPECT_EQ(1, run_count); // Should have run in a long idle time. 1498 EXPECT_EQ(1, run_count); // Should have run in a long idle time.
1495 EXPECT_EQ(expected_deadline, deadline_in_task); 1499 EXPECT_EQ(expected_deadline, deadline_in_task);
1496 } 1500 }
1497 1501
1498 TEST_F(RendererSchedulerImplTest, 1502 TEST_F(RendererSchedulerImplTest,
1499 TestLongIdlePeriodWithLatePendingDelayedTask) { 1503 TestLongIdlePeriodWithLatePendingDelayedTask) {
1500 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(10); 1504 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(10);
1501 base::TimeTicks deadline_in_task; 1505 base::TimeTicks deadline_in_task;
1502 int run_count = 0; 1506 int run_count = 0;
1503 1507
1504 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1508 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1505 pending_task_delay); 1509 pending_task_delay);
1506 1510
1507 // Advance clock until after delayed task was meant to be run. 1511 // Advance clock until after delayed task was meant to be run.
1508 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(20)); 1512 clock_->Advance(base::TimeDelta::FromMilliseconds(20));
1509 1513
1510 // Post an idle task and BeginFrameNotExpectedSoon to initiate a long idle 1514 // Post an idle task and BeginFrameNotExpectedSoon to initiate a long idle
1511 // period. Since there is a late pending delayed task this shouldn't actually 1515 // period. Since there is a late pending delayed task this shouldn't actually
1512 // start an idle period. 1516 // start an idle period.
1513 idle_task_runner_->PostIdleTask( 1517 idle_task_runner_->PostIdleTask(
1514 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1518 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1515 scheduler_->BeginFrameNotExpectedSoon(); 1519 scheduler_->BeginFrameNotExpectedSoon();
1516 RunUntilIdle(); 1520 RunUntilIdle();
1517 EXPECT_EQ(0, run_count); 1521 EXPECT_EQ(0, run_count);
1518 1522
1519 // After the delayed task has been run we should trigger an idle period. 1523 // After the delayed task has been run we should trigger an idle period.
1520 clock_->AdvanceNow(maximum_idle_period_duration()); 1524 clock_->Advance(maximum_idle_period_duration());
1521 RunUntilIdle(); 1525 RunUntilIdle();
1522 EXPECT_EQ(1, run_count); 1526 EXPECT_EQ(1, run_count);
1523 } 1527 }
1524 1528
1525 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) { 1529 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) {
1526 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1530 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1527 std::vector<base::TimeTicks> actual_deadlines; 1531 std::vector<base::TimeTicks> actual_deadlines;
1528 int run_count = 0; 1532 int run_count = 0;
1529 1533
1530 max_idle_task_reposts = 3; 1534 max_idle_task_reposts = 3;
1531 base::TimeTicks clock_before(clock_->Now()); 1535 base::TimeTicks clock_before(clock_->NowTicks());
1532 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10)); 1536 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10));
1533 idle_task_runner_->PostIdleTask( 1537 idle_task_runner_->PostIdleTask(
1534 FROM_HERE, 1538 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask,
1535 base::Bind(&RepostingUpdateClockIdleTestTask, idle_task_runner_, 1539 idle_task_runner_, &run_count, clock_.get(),
1536 &run_count, clock_, idle_task_runtime, &actual_deadlines)); 1540 idle_task_runtime, &actual_deadlines));
1537 scheduler_->BeginFrameNotExpectedSoon(); 1541 scheduler_->BeginFrameNotExpectedSoon();
1538 RunUntilIdle(); 1542 RunUntilIdle();
1539 EXPECT_EQ(3, run_count); 1543 EXPECT_EQ(3, run_count);
1540 EXPECT_THAT( 1544 EXPECT_THAT(
1541 actual_deadlines, 1545 actual_deadlines,
1542 testing::ElementsAre( 1546 testing::ElementsAre(
1543 clock_before + maximum_idle_period_duration(), 1547 clock_before + maximum_idle_period_duration(),
1544 clock_before + idle_task_runtime + maximum_idle_period_duration(), 1548 clock_before + idle_task_runtime + maximum_idle_period_duration(),
1545 clock_before + (2 * idle_task_runtime) + 1549 clock_before + (2 * idle_task_runtime) +
1546 maximum_idle_period_duration())); 1550 maximum_idle_period_duration()));
1547 1551
1548 // Check that idle tasks don't run after the idle period ends with a 1552 // Check that idle tasks don't run after the idle period ends with a
1549 // new BeginMainFrame. 1553 // new BeginMainFrame.
1550 max_idle_task_reposts = 5; 1554 max_idle_task_reposts = 5;
1551 idle_task_runner_->PostIdleTask( 1555 idle_task_runner_->PostIdleTask(
1552 FROM_HERE, 1556 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask,
1553 base::Bind(&RepostingUpdateClockIdleTestTask, idle_task_runner_, 1557 idle_task_runner_, &run_count, clock_.get(),
1554 &run_count, clock_, idle_task_runtime, &actual_deadlines)); 1558 idle_task_runtime, &actual_deadlines));
1555 idle_task_runner_->PostIdleTask( 1559 idle_task_runner_->PostIdleTask(
1556 FROM_HERE, base::Bind(&WillBeginFrameIdleTask, 1560 FROM_HERE, base::Bind(&WillBeginFrameIdleTask,
1557 base::Unretained(scheduler_.get()), clock_)); 1561 base::Unretained(scheduler_.get()), clock_.get()));
1558 RunUntilIdle(); 1562 RunUntilIdle();
1559 EXPECT_EQ(4, run_count); 1563 EXPECT_EQ(4, run_count);
1560 } 1564 }
1561 1565
1562 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) { 1566 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) {
1563 base::TimeTicks deadline_in_task; 1567 base::TimeTicks deadline_in_task;
1564 int run_count = 0; 1568 int run_count = 0;
1565 1569
1566 // Start a long idle period and get the time it should end. 1570 // Start a long idle period and get the time it should end.
1567 scheduler_->BeginFrameNotExpectedSoon(); 1571 scheduler_->BeginFrameNotExpectedSoon();
1568 // The scheduler should not run the initiate_next_long_idle_period task if 1572 // The scheduler should not run the initiate_next_long_idle_period task if
1569 // there are no idle tasks and no other task woke up the scheduler, thus 1573 // there are no idle tasks and no other task woke up the scheduler, thus
1570 // the idle period deadline shouldn't update at the end of the current long 1574 // the idle period deadline shouldn't update at the end of the current long
1571 // idle period. 1575 // idle period.
1572 base::TimeTicks idle_period_deadline = 1576 base::TimeTicks idle_period_deadline =
1573 scheduler_->CurrentIdleTaskDeadlineForTesting(); 1577 scheduler_->CurrentIdleTaskDeadlineForTesting();
1574 clock_->AdvanceNow(maximum_idle_period_duration()); 1578 clock_->Advance(maximum_idle_period_duration());
1575 RunUntilIdle(); 1579 RunUntilIdle();
1576 1580
1577 base::TimeTicks new_idle_period_deadline = 1581 base::TimeTicks new_idle_period_deadline =
1578 scheduler_->CurrentIdleTaskDeadlineForTesting(); 1582 scheduler_->CurrentIdleTaskDeadlineForTesting();
1579 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); 1583 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
1580 1584
1581 // Posting a after-wakeup idle task also shouldn't wake the scheduler or 1585 // Posting a after-wakeup idle task also shouldn't wake the scheduler or
1582 // initiate the next long idle period. 1586 // initiate the next long idle period.
1583 idle_task_runner_->PostIdleTaskAfterWakeup( 1587 idle_task_runner_->PostIdleTaskAfterWakeup(
1584 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1588 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
(...skipping 21 matching lines...) Expand all
1606 1610
1607 // Observation of touchstart should defer the start of the long idle period. 1611 // Observation of touchstart should defer the start of the long idle period.
1608 scheduler_->DidHandleInputEventOnCompositorThread( 1612 scheduler_->DidHandleInputEventOnCompositorThread(
1609 FakeInputEvent(blink::WebInputEvent::TouchStart), 1613 FakeInputEvent(blink::WebInputEvent::TouchStart),
1610 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1614 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1611 scheduler_->BeginFrameNotExpectedSoon(); 1615 scheduler_->BeginFrameNotExpectedSoon();
1612 RunUntilIdle(); 1616 RunUntilIdle();
1613 EXPECT_EQ(0, run_count); 1617 EXPECT_EQ(0, run_count);
1614 1618
1615 // The long idle period should start after the touchstart policy has finished. 1619 // The long idle period should start after the touchstart policy has finished.
1616 clock_->AdvanceNow(priority_escalation_after_input_duration()); 1620 clock_->Advance(priority_escalation_after_input_duration());
1617 RunUntilIdle(); 1621 RunUntilIdle();
1618 EXPECT_EQ(1, run_count); 1622 EXPECT_EQ(1, run_count);
1619 } 1623 }
1620 1624
1621 void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler, 1625 void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler,
1622 bool* can_exceed_idle_deadline_out, 1626 bool* can_exceed_idle_deadline_out,
1623 int* run_count, 1627 int* run_count,
1624 base::TimeTicks deadline) { 1628 base::TimeTicks deadline) {
1625 *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired(); 1629 *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired();
1626 (*run_count)++; 1630 (*run_count)++;
(...skipping 24 matching lines...) Expand all
1651 FROM_HERE, 1655 FROM_HERE,
1652 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), 1656 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(),
1653 &can_exceed_idle_deadline, &run_count)); 1657 &can_exceed_idle_deadline, &run_count));
1654 scheduler_->BeginFrameNotExpectedSoon(); 1658 scheduler_->BeginFrameNotExpectedSoon();
1655 RunUntilIdle(); 1659 RunUntilIdle();
1656 EXPECT_EQ(2, run_count); 1660 EXPECT_EQ(2, run_count);
1657 EXPECT_FALSE(can_exceed_idle_deadline); 1661 EXPECT_FALSE(can_exceed_idle_deadline);
1658 1662
1659 // Next long idle period will be for the maximum time, so 1663 // Next long idle period will be for the maximum time, so
1660 // CanExceedIdleDeadlineIfRequired should return true. 1664 // CanExceedIdleDeadlineIfRequired should return true.
1661 clock_->AdvanceNow(maximum_idle_period_duration()); 1665 clock_->Advance(maximum_idle_period_duration());
1662 idle_task_runner_->PostIdleTask( 1666 idle_task_runner_->PostIdleTask(
1663 FROM_HERE, 1667 FROM_HERE,
1664 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), 1668 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(),
1665 &can_exceed_idle_deadline, &run_count)); 1669 &can_exceed_idle_deadline, &run_count));
1666 RunUntilIdle(); 1670 RunUntilIdle();
1667 EXPECT_EQ(3, run_count); 1671 EXPECT_EQ(3, run_count);
1668 EXPECT_TRUE(can_exceed_idle_deadline); 1672 EXPECT_TRUE(can_exceed_idle_deadline);
1669 1673
1670 // Next long idle period will be for the maximum time, so 1674 // Next long idle period will be for the maximum time, so
1671 // CanExceedIdleDeadlineIfRequired should return true. 1675 // CanExceedIdleDeadlineIfRequired should return true.
1672 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 1676 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1673 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 1677 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
1674 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 1678 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
1675 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); 1679 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired());
1676 } 1680 }
1677 1681
1678 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { 1682 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) {
1679 int run_count = 0; 1683 int run_count = 0;
1680 1684
1681 max_idle_task_reposts = 2; 1685 max_idle_task_reposts = 2;
1682 idle_task_runner_->PostIdleTask( 1686 idle_task_runner_->PostIdleTask(
1683 FROM_HERE, 1687 FROM_HERE,
1684 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1688 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
1685 1689
1686 // Renderer should start in visible state. 1690 // Renderer should start in visible state.
1687 RunUntilIdle(); 1691 RunUntilIdle();
1688 EXPECT_EQ(0, run_count); 1692 EXPECT_EQ(0, run_count);
1689 1693
1690 // When we hide the renderer it should start a max deadline idle period, which 1694 // When we hide the renderer it should start a max deadline idle period, which
1691 // will run an idle task and then immediately start a new idle period, which 1695 // will run an idle task and then immediately start a new idle period, which
1692 // runs the second idle task. 1696 // runs the second idle task.
1693 scheduler_->OnRendererHidden(); 1697 scheduler_->OnRendererHidden();
1694 RunUntilIdle(); 1698 RunUntilIdle();
1695 EXPECT_EQ(2, run_count); 1699 EXPECT_EQ(2, run_count);
1696 1700
1697 // Advance time by amount of time by the maximum amount of time we execute 1701 // Advance time by amount of time by the maximum amount of time we execute
1698 // idle tasks when hidden (plus some slack) - idle period should have ended. 1702 // idle tasks when hidden (plus some slack) - idle period should have ended.
1699 max_idle_task_reposts = 3; 1703 max_idle_task_reposts = 3;
1700 idle_task_runner_->PostIdleTask( 1704 idle_task_runner_->PostIdleTask(
1701 FROM_HERE, 1705 FROM_HERE,
1702 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1706 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
1703 clock_->AdvanceNow(end_idle_when_hidden_delay() + 1707 clock_->Advance(end_idle_when_hidden_delay() +
1704 base::TimeDelta::FromMilliseconds(10)); 1708 base::TimeDelta::FromMilliseconds(10));
1705 RunUntilIdle(); 1709 RunUntilIdle();
1706 EXPECT_EQ(2, run_count); 1710 EXPECT_EQ(2, run_count);
1707 } 1711 }
1708 1712
1709 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) { 1713 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) {
1710 std::vector<std::string> run_order; 1714 std::vector<std::string> run_order;
1711 PostTestTasks(&run_order, "T1 T2"); 1715 PostTestTasks(&run_order, "T1 T2");
1712 RunUntilIdle(); 1716 RunUntilIdle();
1713 EXPECT_THAT(run_order, 1717 EXPECT_THAT(run_order,
1714 testing::ElementsAre(std::string("T1"), std::string("T2"))); 1718 testing::ElementsAre(std::string("T1"), std::string("T2")));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1766 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the 1770 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the
1767 // compositor to not be there and we don't want to make debugging impossible. 1771 // compositor to not be there and we don't want to make debugging impossible.
1768 scheduler_->DidHandleInputEventOnMainThread( 1772 scheduler_->DidHandleInputEventOnMainThread(
1769 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 1773 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
1770 } 1774 }
1771 1775
1772 TEST_F(RendererSchedulerImplTest, BeginMainFrameOnCriticalPath) { 1776 TEST_F(RendererSchedulerImplTest, BeginMainFrameOnCriticalPath) {
1773 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); 1777 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath());
1774 1778
1775 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( 1779 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create(
1776 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 1780 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
1777 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL); 1781 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL);
1778 scheduler_->WillBeginFrame(begin_frame_args); 1782 scheduler_->WillBeginFrame(begin_frame_args);
1779 ASSERT_TRUE(scheduler_->BeginMainFrameOnCriticalPath()); 1783 ASSERT_TRUE(scheduler_->BeginMainFrameOnCriticalPath());
1780 1784
1781 begin_frame_args.on_critical_path = false; 1785 begin_frame_args.on_critical_path = false;
1782 scheduler_->WillBeginFrame(begin_frame_args); 1786 scheduler_->WillBeginFrame(begin_frame_args);
1783 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); 1787 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath());
1784 } 1788 }
1785 1789
1786 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { 1790 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) {
1787 scheduler_->Shutdown(); 1791 scheduler_->Shutdown();
1788 std::vector<std::string> run_order; 1792 std::vector<std::string> run_order;
1789 PostTestTasks(&run_order, "D1 C1"); 1793 PostTestTasks(&run_order, "D1 C1");
1790 RunUntilIdle(); 1794 RunUntilIdle();
1791 EXPECT_TRUE(run_order.empty()); 1795 EXPECT_TRUE(run_order.empty());
1792 } 1796 }
1793 1797
1794 } // namespace scheduler 1798 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698