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

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 again. Replaces TimeSource with TickClock in TestAlwaysFailTimeSource 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 16 matching lines...) Expand all
138 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 137 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
139 } 138 }
140 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated(); 139 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated();
141 } 140 }
142 }; // namespace 141 }; // namespace
143 142
144 class RendererSchedulerImplTest : public testing::Test { 143 class RendererSchedulerImplTest : public testing::Test {
145 public: 144 public:
146 using Policy = RendererSchedulerImpl::Policy; 145 using Policy = RendererSchedulerImpl::Policy;
147 146
148 RendererSchedulerImplTest() : clock_(cc::TestNowSource::Create(5000)) {} 147 RendererSchedulerImplTest() : clock_(new base::SimpleTestTickClock()) {
148 clock_->Advance(base::TimeDelta::FromInternalValue(5000));
149 }
149 150
150 RendererSchedulerImplTest(base::MessageLoop* message_loop) 151 RendererSchedulerImplTest(base::MessageLoop* message_loop)
151 : clock_(cc::TestNowSource::Create(5000)), message_loop_(message_loop) {} 152 : clock_(new base::SimpleTestTickClock()), message_loop_(message_loop) {
153 clock_->Advance(base::TimeDelta::FromInternalValue(5000));
154 }
152 155
153 ~RendererSchedulerImplTest() override {} 156 ~RendererSchedulerImplTest() override {}
154 157
155 void SetUp() override { 158 void SetUp() override {
156 if (message_loop_) { 159 if (message_loop_) {
157 nestable_task_runner_ = 160 nestable_task_runner_ =
158 SchedulerMessageLoopDelegate::Create(message_loop_.get()); 161 SchedulerMessageLoopDelegate::Create(message_loop_.get());
159 } else { 162 } else {
160 mock_task_runner_ = 163 mock_task_runner_ = make_scoped_refptr(
161 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(clock_, false)); 164 new cc::OrderedSimpleTaskRunner(clock_.get(), false));
162 nestable_task_runner_ = 165 nestable_task_runner_ =
163 NestableTaskRunnerForTest::Create(mock_task_runner_); 166 NestableTaskRunnerForTest::Create(mock_task_runner_);
164 } 167 }
165 Initialize( 168 Initialize(
166 make_scoped_ptr(new RendererSchedulerImpl(nestable_task_runner_))); 169 make_scoped_ptr(new RendererSchedulerImpl(nestable_task_runner_)));
167 } 170 }
168 171
169 void Initialize(scoped_ptr<RendererSchedulerImpl> scheduler) { 172 void Initialize(scoped_ptr<RendererSchedulerImpl> scheduler) {
170 scheduler_ = scheduler.Pass(); 173 scheduler_ = scheduler.Pass();
171 default_task_runner_ = scheduler_->DefaultTaskRunner(); 174 default_task_runner_ = scheduler_->DefaultTaskRunner();
172 compositor_task_runner_ = scheduler_->CompositorTaskRunner(); 175 compositor_task_runner_ = scheduler_->CompositorTaskRunner();
173 loading_task_runner_ = scheduler_->LoadingTaskRunner(); 176 loading_task_runner_ = scheduler_->LoadingTaskRunner();
174 idle_task_runner_ = scheduler_->IdleTaskRunner(); 177 idle_task_runner_ = scheduler_->IdleTaskRunner();
175 timer_task_runner_ = scheduler_->TimerTaskRunner(); 178 timer_task_runner_ = scheduler_->TimerTaskRunner();
176 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 179 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
177 make_scoped_ptr(new TestTimeSource(clock_))); 180 make_scoped_ptr(new TestTimeSource(clock_.get())));
178 scheduler_->GetSchedulerHelperForTesting() 181 scheduler_->GetSchedulerHelperForTesting()
179 ->GetTaskQueueManagerForTesting() 182 ->GetTaskQueueManagerForTesting()
180 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 183 ->SetTimeSourceForTesting(
184 make_scoped_ptr(new TestTimeSource(clock_.get())));
181 } 185 }
182 186
183 void TearDown() override { 187 void TearDown() override {
184 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 188 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
185 scheduler_->Shutdown(); 189 scheduler_->Shutdown();
186 if (mock_task_runner_.get()) { 190 if (mock_task_runner_.get()) {
187 // Check that all tests stop posting tasks. 191 // Check that all tests stop posting tasks.
188 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 192 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
189 while (mock_task_runner_->RunUntilIdle()) { 193 while (mock_task_runner_->RunUntilIdle()) {
190 } 194 }
191 } else { 195 } else {
192 message_loop_->RunUntilIdle(); 196 message_loop_->RunUntilIdle();
193 } 197 }
194 scheduler_.reset(); 198 scheduler_.reset();
195 } 199 }
196 200
197 void RunUntilIdle() { 201 void RunUntilIdle() {
198 // Only one of mock_task_runner_ or message_loop_ should be set. 202 // Only one of mock_task_runner_ or message_loop_ should be set.
199 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 203 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
200 if (mock_task_runner_.get()) 204 if (mock_task_runner_.get())
201 mock_task_runner_->RunUntilIdle(); 205 mock_task_runner_->RunUntilIdle();
202 else 206 else
203 message_loop_->RunUntilIdle(); 207 message_loop_->RunUntilIdle();
204 } 208 }
205 209
206 void DoMainFrame() { 210 void DoMainFrame() {
207 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 211 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
208 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 212 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
209 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 213 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
210 scheduler_->DidCommitFrameToCompositor(); 214 scheduler_->DidCommitFrameToCompositor();
211 } 215 }
212 216
213 void EnableIdleTasks() { DoMainFrame(); } 217 void EnableIdleTasks() { DoMainFrame(); }
214 218
215 Policy CurrentPolicy() { return scheduler_->current_policy_; } 219 Policy CurrentPolicy() { return scheduler_->current_policy_; }
216 220
217 // Helper for posting several tasks of specific types. |task_descriptor| is a 221 // Helper for posting several tasks of specific types. |task_descriptor| is a
218 // string with space delimited task identifiers. The first letter of each 222 // string with space delimited task identifiers. The first letter of each
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 &RendererSchedulerImpl::TaskQueueIdToString); 293 &RendererSchedulerImpl::TaskQueueIdToString);
290 } 294 }
291 295
292 static void CheckAllPolicyToString() { 296 static void CheckAllPolicyToString() {
293 CallForEachEnumValue<RendererSchedulerImpl::Policy>( 297 CallForEachEnumValue<RendererSchedulerImpl::Policy>(
294 RendererSchedulerImpl::Policy::FIRST_POLICY, 298 RendererSchedulerImpl::Policy::FIRST_POLICY,
295 RendererSchedulerImpl::Policy::POLICY_COUNT, 299 RendererSchedulerImpl::Policy::POLICY_COUNT,
296 &RendererSchedulerImpl::PolicyToString); 300 &RendererSchedulerImpl::PolicyToString);
297 } 301 }
298 302
299 scoped_refptr<cc::TestNowSource> clock_; 303 scoped_ptr<base::SimpleTestTickClock> clock_;
300 // Only one of mock_task_runner_ or message_loop_ will be set. 304 // Only one of mock_task_runner_ or message_loop_ will be set.
301 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; 305 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
302 scoped_ptr<base::MessageLoop> message_loop_; 306 scoped_ptr<base::MessageLoop> message_loop_;
303 307
304 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_; 308 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_;
305 scoped_ptr<RendererSchedulerImpl> scheduler_; 309 scoped_ptr<RendererSchedulerImpl> scheduler_;
306 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; 310 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
307 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; 311 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
308 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; 312 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_;
309 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; 313 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 FROM_HERE, base::Bind(AppendToVectorReentrantTask, default_task_runner_, 373 FROM_HERE, base::Bind(AppendToVectorReentrantTask, default_task_runner_,
370 &run_order, &count, 5)); 374 &run_order, &count, 5));
371 RunUntilIdle(); 375 RunUntilIdle();
372 376
373 EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4)); 377 EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4));
374 } 378 }
375 379
376 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) { 380 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) {
377 int run_count = 0; 381 int run_count = 0;
378 base::TimeTicks expected_deadline = 382 base::TimeTicks expected_deadline =
379 clock_->Now() + base::TimeDelta::FromMilliseconds(2300); 383 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(2300);
380 base::TimeTicks deadline_in_task; 384 base::TimeTicks deadline_in_task;
381 385
382 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(100)); 386 clock_->Advance(base::TimeDelta::FromMilliseconds(100));
383 idle_task_runner_->PostIdleTask( 387 idle_task_runner_->PostIdleTask(
384 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 388 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
385 389
386 RunUntilIdle(); 390 RunUntilIdle();
387 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. 391 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame.
388 392
389 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 393 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
390 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 394 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
391 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 395 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
392 RunUntilIdle(); 396 RunUntilIdle();
393 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. 397 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor.
394 398
395 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1200)); 399 clock_->Advance(base::TimeDelta::FromMilliseconds(1200));
396 scheduler_->DidCommitFrameToCompositor(); 400 scheduler_->DidCommitFrameToCompositor();
397 RunUntilIdle(); 401 RunUntilIdle();
398 EXPECT_EQ(0, run_count); // We missed the deadline. 402 EXPECT_EQ(0, run_count); // We missed the deadline.
399 403
400 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 404 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
401 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 405 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
402 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 406 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
403 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800)); 407 clock_->Advance(base::TimeDelta::FromMilliseconds(800));
404 scheduler_->DidCommitFrameToCompositor(); 408 scheduler_->DidCommitFrameToCompositor();
405 RunUntilIdle(); 409 RunUntilIdle();
406 EXPECT_EQ(1, run_count); 410 EXPECT_EQ(1, run_count);
407 EXPECT_EQ(expected_deadline, deadline_in_task); 411 EXPECT_EQ(expected_deadline, deadline_in_task);
408 } 412 }
409 413
410 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { 414 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) {
411 int run_count = 0; 415 int run_count = 0;
412 416
413 max_idle_task_reposts = 2; 417 max_idle_task_reposts = 2;
(...skipping 13 matching lines...) Expand all
427 EXPECT_EQ(2, run_count); 431 EXPECT_EQ(2, run_count);
428 } 432 }
429 433
430 TEST_F(RendererSchedulerImplTest, TestIdleTaskExceedsDeadline) { 434 TEST_F(RendererSchedulerImplTest, TestIdleTaskExceedsDeadline) {
431 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 435 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
432 int run_count = 0; 436 int run_count = 0;
433 437
434 // Post two UpdateClockToDeadlineIdleTestTask tasks. 438 // Post two UpdateClockToDeadlineIdleTestTask tasks.
435 idle_task_runner_->PostIdleTask( 439 idle_task_runner_->PostIdleTask(
436 FROM_HERE, 440 FROM_HERE,
437 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_, &run_count)); 441 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_.get(), &run_count));
438 idle_task_runner_->PostIdleTask( 442 idle_task_runner_->PostIdleTask(
439 FROM_HERE, 443 FROM_HERE,
440 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_, &run_count)); 444 base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_.get(), &run_count));
441 445
442 EnableIdleTasks(); 446 EnableIdleTasks();
443 RunUntilIdle(); 447 RunUntilIdle();
444 // Only the first idle task should execute since it's used up the deadline. 448 // Only the first idle task should execute since it's used up the deadline.
445 EXPECT_EQ(1, run_count); 449 EXPECT_EQ(1, run_count);
446 450
447 EnableIdleTasks(); 451 EnableIdleTasks();
448 RunUntilIdle(); 452 RunUntilIdle();
449 // Second task should be run on the next idle period. 453 // Second task should be run on the next idle period.
450 EXPECT_EQ(2, run_count); 454 EXPECT_EQ(2, run_count);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 518
515 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { 519 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) {
516 int run_count = 0; 520 int run_count = 0;
517 521
518 base::TimeTicks deadline_in_task; 522 base::TimeTicks deadline_in_task;
519 idle_task_runner_->PostIdleTask( 523 idle_task_runner_->PostIdleTask(
520 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 524 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
521 525
522 // Trigger the beginning of an idle period for 1000ms. 526 // Trigger the beginning of an idle period for 1000ms.
523 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 527 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
524 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 528 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
525 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 529 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
526 DoMainFrame(); 530 DoMainFrame();
527 531
528 // End the idle period early (after 500ms), and send a WillBeginFrame which 532 // End the idle period early (after 500ms), and send a WillBeginFrame which
529 // specifies that the next idle period should end 1000ms from now. 533 // specifies that the next idle period should end 1000ms from now.
530 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(500)); 534 clock_->Advance(base::TimeDelta::FromMilliseconds(500));
531 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 535 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
532 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 536 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
533 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 537 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
534 538
535 RunUntilIdle(); 539 RunUntilIdle();
536 EXPECT_EQ(0, run_count); // Not currently in an idle period. 540 EXPECT_EQ(0, run_count); // Not currently in an idle period.
537 541
538 // Trigger the start of the idle period before the task to end the previous 542 // Trigger the start of the idle period before the task to end the previous
539 // idle period has been triggered. 543 // idle period has been triggered.
540 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(400)); 544 clock_->Advance(base::TimeDelta::FromMilliseconds(400));
541 scheduler_->DidCommitFrameToCompositor(); 545 scheduler_->DidCommitFrameToCompositor();
542 546
543 // Post a task which simulates running until after the previous end idle 547 // Post a task which simulates running until after the previous end idle
544 // period delayed task was scheduled for 548 // period delayed task was scheduled for
545 scheduler_->DefaultTaskRunner()->PostTask(FROM_HERE, base::Bind(NullTask)); 549 scheduler_->DefaultTaskRunner()->PostTask(FROM_HERE, base::Bind(NullTask));
546 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(300)); 550 clock_->Advance(base::TimeDelta::FromMilliseconds(300));
547 551
548 RunUntilIdle(); 552 RunUntilIdle();
549 EXPECT_EQ(1, run_count); // We should still be in the new idle period. 553 EXPECT_EQ(1, run_count); // We should still be in the new idle period.
550 } 554 }
551 555
552 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) { 556 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) {
553 std::vector<std::string> run_order; 557 std::vector<std::string> run_order;
554 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 558 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
555 559
556 EnableIdleTasks(); 560 EnableIdleTasks();
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 864
861 scheduler_->DidHandleInputEventOnCompositorThread( 865 scheduler_->DidHandleInputEventOnCompositorThread(
862 FakeInputEvent(blink::WebInputEvent::GestureFlingStart), 866 FakeInputEvent(blink::WebInputEvent::GestureFlingStart),
863 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 867 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
864 RunUntilIdle(); 868 RunUntilIdle();
865 EXPECT_THAT(run_order, 869 EXPECT_THAT(run_order,
866 testing::ElementsAre(std::string("C1"), std::string("C2"), 870 testing::ElementsAre(std::string("C1"), std::string("C2"),
867 std::string("D1"), std::string("D2"))); 871 std::string("D1"), std::string("D2")));
868 872
869 run_order.clear(); 873 run_order.clear();
870 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 874 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
871 PostTestTasks(&run_order, "D1 C1 D2 C2"); 875 PostTestTasks(&run_order, "D1 C1 D2 C2");
872 876
873 // Compositor policy mode should have ended now that the clock has advanced. 877 // Compositor policy mode should have ended now that the clock has advanced.
874 RunUntilIdle(); 878 RunUntilIdle();
875 EXPECT_THAT(run_order, 879 EXPECT_THAT(run_order,
876 testing::ElementsAre(std::string("D1"), std::string("C1"), 880 testing::ElementsAre(std::string("D1"), std::string("C1"),
877 std::string("D2"), std::string("C2"))); 881 std::string("D2"), std::string("C2")));
878 } 882 }
879 883
880 TEST_F(RendererSchedulerImplTest, 884 TEST_F(RendererSchedulerImplTest,
881 TestCompositorPolicyEnds_MainThreadHandlesInput) { 885 TestCompositorPolicyEnds_MainThreadHandlesInput) {
882 std::vector<std::string> run_order; 886 std::vector<std::string> run_order;
883 PostTestTasks(&run_order, "D1 C1 D2 C2"); 887 PostTestTasks(&run_order, "D1 C1 D2 C2");
884 888
885 scheduler_->DidHandleInputEventOnCompositorThread( 889 scheduler_->DidHandleInputEventOnCompositorThread(
886 FakeInputEvent(blink::WebInputEvent::GestureFlingStart), 890 FakeInputEvent(blink::WebInputEvent::GestureFlingStart),
887 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 891 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
888 scheduler_->DidHandleInputEventOnMainThread( 892 scheduler_->DidHandleInputEventOnMainThread(
889 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 893 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
890 RunUntilIdle(); 894 RunUntilIdle();
891 EXPECT_THAT(run_order, 895 EXPECT_THAT(run_order,
892 testing::ElementsAre(std::string("C1"), std::string("C2"), 896 testing::ElementsAre(std::string("C1"), std::string("C2"),
893 std::string("D1"), std::string("D2"))); 897 std::string("D1"), std::string("D2")));
894 898
895 run_order.clear(); 899 run_order.clear();
896 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 900 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
897 PostTestTasks(&run_order, "D1 C1 D2 C2"); 901 PostTestTasks(&run_order, "D1 C1 D2 C2");
898 902
899 // Compositor policy mode should have ended now that the clock has advanced. 903 // Compositor policy mode should have ended now that the clock has advanced.
900 RunUntilIdle(); 904 RunUntilIdle();
901 EXPECT_THAT(run_order, 905 EXPECT_THAT(run_order,
902 testing::ElementsAre(std::string("D1"), std::string("C1"), 906 testing::ElementsAre(std::string("D1"), std::string("C1"),
903 std::string("D2"), std::string("C2"))); 907 std::string("D2"), std::string("C2")));
904 } 908 }
905 909
906 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) { 910 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) {
907 std::vector<std::string> run_order; 911 std::vector<std::string> run_order;
908 PostTestTasks(&run_order, "L1 D1 C1 D2 C2"); 912 PostTestTasks(&run_order, "L1 D1 C1 D2 C2");
909 913
910 scheduler_->DidHandleInputEventOnCompositorThread( 914 scheduler_->DidHandleInputEventOnCompositorThread(
911 FakeInputEvent(blink::WebInputEvent::TouchStart), 915 FakeInputEvent(blink::WebInputEvent::TouchStart),
912 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 916 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
913 RunUntilIdle(); 917 RunUntilIdle();
914 EXPECT_THAT(run_order, 918 EXPECT_THAT(run_order,
915 testing::ElementsAre(std::string("C1"), std::string("C2"), 919 testing::ElementsAre(std::string("C1"), std::string("C2"),
916 std::string("D1"), std::string("D2"))); 920 std::string("D1"), std::string("D2")));
917 921
918 run_order.clear(); 922 run_order.clear();
919 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 923 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
920 924
921 // Don't post any compositor tasks to simulate a very long running event 925 // Don't post any compositor tasks to simulate a very long running event
922 // handler. 926 // handler.
923 PostTestTasks(&run_order, "D1 D2"); 927 PostTestTasks(&run_order, "D1 D2");
924 928
925 // Touchstart policy mode should have ended now that the clock has advanced. 929 // Touchstart policy mode should have ended now that the clock has advanced.
926 RunUntilIdle(); 930 RunUntilIdle();
927 EXPECT_THAT(run_order, 931 EXPECT_THAT(run_order,
928 testing::ElementsAre(std::string("L1"), std::string("D1"), 932 testing::ElementsAre(std::string("L1"), std::string("D1"),
929 std::string("D2"))); 933 std::string("D2")));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 default_task_runner_->PostTask( 983 default_task_runner_->PostTask(
980 FROM_HERE, 984 FROM_HERE,
981 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input, 985 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input,
982 &is_anticipated_before, &is_anticipated_after)); 986 &is_anticipated_before, &is_anticipated_after));
983 RunUntilIdle(); 987 RunUntilIdle();
984 // When input is received, the scheduler should indicate that high-priority 988 // When input is received, the scheduler should indicate that high-priority
985 // work is anticipated. 989 // work is anticipated.
986 EXPECT_FALSE(is_anticipated_before); 990 EXPECT_FALSE(is_anticipated_before);
987 EXPECT_TRUE(is_anticipated_after); 991 EXPECT_TRUE(is_anticipated_after);
988 992
989 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 993 clock_->Advance(priority_escalation_after_input_duration() * 2);
990 simulate_input = false; 994 simulate_input = false;
991 default_task_runner_->PostTask( 995 default_task_runner_->PostTask(
992 FROM_HERE, 996 FROM_HERE,
993 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input, 997 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input,
994 &is_anticipated_before, &is_anticipated_after)); 998 &is_anticipated_before, &is_anticipated_after));
995 RunUntilIdle(); 999 RunUntilIdle();
996 // Without additional input, the scheduler should indicate that high-priority 1000 // Without additional input, the scheduler should indicate that high-priority
997 // work is no longer anticipated. 1001 // work is no longer anticipated.
998 EXPECT_FALSE(is_anticipated_before); 1002 EXPECT_FALSE(is_anticipated_before);
999 EXPECT_FALSE(is_anticipated_after); 1003 EXPECT_FALSE(is_anticipated_after);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 1049
1046 // An input event should bump us into input priority. 1050 // An input event should bump us into input priority.
1047 scheduler_->DidHandleInputEventOnCompositorThread( 1051 scheduler_->DidHandleInputEventOnCompositorThread(
1048 FakeInputEvent(blink::WebInputEvent::GestureFlingStart), 1052 FakeInputEvent(blink::WebInputEvent::GestureFlingStart),
1049 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1053 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1050 RunUntilIdle(); 1054 RunUntilIdle();
1051 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 1055 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
1052 1056
1053 // Simulate the input event being queued for a very long time. The compositor 1057 // Simulate the input event being queued for a very long time. The compositor
1054 // task we post here represents the enqueued input task. 1058 // task we post here represents the enqueued input task.
1055 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 1059 clock_->Advance(priority_escalation_after_input_duration() * 2);
1056 scheduler_->DidHandleInputEventOnMainThread( 1060 scheduler_->DidHandleInputEventOnMainThread(
1057 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 1061 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
1058 RunUntilIdle(); 1062 RunUntilIdle();
1059 1063
1060 // Even though we exceeded the input priority escalation period, we should 1064 // Even though we exceeded the input priority escalation period, we should
1061 // still be in compositor priority since the input remains queued. 1065 // still be in compositor priority since the input remains queued.
1062 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 1066 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
1063 1067
1064 // After the escalation period ends we should go back into normal mode. 1068 // After the escalation period ends we should go back into normal mode.
1065 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 1069 clock_->Advance(priority_escalation_after_input_duration() * 2);
1066 RunUntilIdle(); 1070 RunUntilIdle();
1067 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 1071 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
1068 } 1072 }
1069 1073
1070 class RendererSchedulerImplWithMockSchedulerTest 1074 class RendererSchedulerImplWithMockSchedulerTest
1071 : public RendererSchedulerImplTest { 1075 : public RendererSchedulerImplTest {
1072 public: 1076 public:
1073 void SetUp() override { 1077 void SetUp() override {
1074 mock_task_runner_ = 1078 mock_task_runner_ = make_scoped_refptr(
1075 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(clock_, false)); 1079 new cc::OrderedSimpleTaskRunner(clock_.get(), false));
1076 nestable_task_runner_ = 1080 nestable_task_runner_ =
1077 NestableTaskRunnerForTest::Create(mock_task_runner_); 1081 NestableTaskRunnerForTest::Create(mock_task_runner_);
1078 mock_scheduler_ = new RendererSchedulerImplForTest(nestable_task_runner_); 1082 mock_scheduler_ = new RendererSchedulerImplForTest(nestable_task_runner_);
1079 Initialize(make_scoped_ptr(mock_scheduler_)); 1083 Initialize(make_scoped_ptr(mock_scheduler_));
1080 } 1084 }
1081 1085
1082 protected: 1086 protected:
1083 RendererSchedulerImplForTest* mock_scheduler_; 1087 RendererSchedulerImplForTest* mock_scheduler_;
1084 }; 1088 };
1085 1089
1086 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1090 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1087 OnlyOnePendingUrgentPolicyUpdatey) { 1091 OnlyOnePendingUrgentPolicyUpdatey) {
1088 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1092 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1089 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1093 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1090 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1094 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1091 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1095 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1092 1096
1093 RunUntilIdle(); 1097 RunUntilIdle();
1094 1098
1095 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1099 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1096 } 1100 }
1097 1101
1098 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1102 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1099 OnePendingDelayedAndOneUrgentUpdatePolicy) { 1103 OnePendingDelayedAndOneUrgentUpdatePolicy) {
1100 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1104 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1101 1105
1102 mock_scheduler_->ScheduleDelayedPolicyUpdate( 1106 mock_scheduler_->ScheduleDelayedPolicyUpdate(
1103 clock_->Now(), base::TimeDelta::FromMilliseconds(1)); 1107 clock_->NowTicks(), base::TimeDelta::FromMilliseconds(1));
1104 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1108 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1105 1109
1106 RunUntilIdle(); 1110 RunUntilIdle();
1107 1111
1108 // We expect both the urgent and the delayed updates to run. 1112 // We expect both the urgent and the delayed updates to run.
1109 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1113 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1110 } 1114 }
1111 1115
1112 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1116 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1113 OneUrgentAndOnePendingDelayedUpdatePolicy) { 1117 OneUrgentAndOnePendingDelayedUpdatePolicy) {
1114 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1118 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1115 1119
1116 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); 1120 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread();
1117 mock_scheduler_->ScheduleDelayedPolicyUpdate( 1121 mock_scheduler_->ScheduleDelayedPolicyUpdate(
1118 clock_->Now(), base::TimeDelta::FromMilliseconds(1)); 1122 clock_->NowTicks(), base::TimeDelta::FromMilliseconds(1));
1119 1123
1120 RunUntilIdle(); 1124 RunUntilIdle();
1121 1125
1122 // We expect both the urgent and the delayed updates to run. 1126 // We expect both the urgent and the delayed updates to run.
1123 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1127 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1124 } 1128 }
1125 1129
1126 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1130 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1127 UpdatePolicyCountTriggeredByOneInputEvent) { 1131 UpdatePolicyCountTriggeredByOneInputEvent) {
1128 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy 1132 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy
1129 // update. 1133 // update.
1130 scheduler_->DidHandleInputEventOnCompositorThread( 1134 scheduler_->DidHandleInputEventOnCompositorThread(
1131 FakeInputEvent(blink::WebInputEvent::TouchStart), 1135 FakeInputEvent(blink::WebInputEvent::TouchStart),
1132 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1136 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1133 EXPECT_EQ(0, mock_scheduler_->update_policy_count_); 1137 EXPECT_EQ(0, mock_scheduler_->update_policy_count_);
1134 mock_task_runner_->RunPendingTasks(); 1138 mock_task_runner_->RunPendingTasks();
1135 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1139 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1136 1140
1137 scheduler_->DidHandleInputEventOnMainThread( 1141 scheduler_->DidHandleInputEventOnMainThread(
1138 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1142 FakeInputEvent(blink::WebInputEvent::TouchStart));
1139 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1143 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1140 1144
1141 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1145 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1142 RunUntilIdle(); 1146 RunUntilIdle();
1143 1147
1144 // We finally expect a delayed policy update 100ms later. 1148 // We finally expect a delayed policy update 100ms later.
1145 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1149 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1146 } 1150 }
1147 1151
1148 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1152 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1149 UpdatePolicyCountTriggeredByThreeInputEvents) { 1153 UpdatePolicyCountTriggeredByThreeInputEvents) {
1150 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy 1154 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy
1151 // update. 1155 // update.
(...skipping 28 matching lines...) Expand all
1180 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1184 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1181 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1185 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1182 mock_task_runner_->RunPendingTasks(); 1186 mock_task_runner_->RunPendingTasks();
1183 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1187 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1184 1188
1185 // We expect DidHandleInputEvent to trigger a policy update. 1189 // We expect DidHandleInputEvent to trigger a policy update.
1186 scheduler_->DidHandleInputEventOnMainThread( 1190 scheduler_->DidHandleInputEventOnMainThread(
1187 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1191 FakeInputEvent(blink::WebInputEvent::TouchMove));
1188 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1192 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1189 1193
1190 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1194 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1191 RunUntilIdle(); 1195 RunUntilIdle();
1192 1196
1193 // We finally expect a delayed policy update. 1197 // We finally expect a delayed policy update.
1194 EXPECT_EQ(3, mock_scheduler_->update_policy_count_); 1198 EXPECT_EQ(3, mock_scheduler_->update_policy_count_);
1195 } 1199 }
1196 1200
1197 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1201 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1198 UpdatePolicyCountTriggeredByTwoInputEventsWithALongSeparatingDelay) { 1202 UpdatePolicyCountTriggeredByTwoInputEventsWithALongSeparatingDelay) {
1199 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy 1203 // We expect DidHandleInputEventOnCompositorThread to post an urgent policy
1200 // update. 1204 // update.
1201 scheduler_->DidHandleInputEventOnCompositorThread( 1205 scheduler_->DidHandleInputEventOnCompositorThread(
1202 FakeInputEvent(blink::WebInputEvent::TouchStart), 1206 FakeInputEvent(blink::WebInputEvent::TouchStart),
1203 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1207 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1204 EXPECT_EQ(0, mock_scheduler_->update_policy_count_); 1208 EXPECT_EQ(0, mock_scheduler_->update_policy_count_);
1205 mock_task_runner_->RunPendingTasks(); 1209 mock_task_runner_->RunPendingTasks();
1206 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1210 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1207 1211
1208 scheduler_->DidHandleInputEventOnMainThread( 1212 scheduler_->DidHandleInputEventOnMainThread(
1209 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1213 FakeInputEvent(blink::WebInputEvent::TouchStart));
1210 EXPECT_EQ(1, mock_scheduler_->update_policy_count_); 1214 EXPECT_EQ(1, mock_scheduler_->update_policy_count_);
1211 1215
1212 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1216 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1213 RunUntilIdle(); 1217 RunUntilIdle();
1214 // We expect a delayed policy update. 1218 // We expect a delayed policy update.
1215 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1219 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1216 1220
1217 // We expect the second call to DidHandleInputEventOnCompositorThread to post 1221 // We expect the second call to DidHandleInputEventOnCompositorThread to post
1218 // an urgent policy update because we are no longer in compositor priority. 1222 // an urgent policy update because we are no longer in compositor priority.
1219 scheduler_->DidHandleInputEventOnCompositorThread( 1223 scheduler_->DidHandleInputEventOnCompositorThread(
1220 FakeInputEvent(blink::WebInputEvent::TouchMove), 1224 FakeInputEvent(blink::WebInputEvent::TouchMove),
1221 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1225 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1222 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 1226 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
1223 mock_task_runner_->RunPendingTasks(); 1227 mock_task_runner_->RunPendingTasks();
1224 EXPECT_EQ(3, mock_scheduler_->update_policy_count_); 1228 EXPECT_EQ(3, mock_scheduler_->update_policy_count_);
1225 1229
1226 scheduler_->DidHandleInputEventOnMainThread( 1230 scheduler_->DidHandleInputEventOnMainThread(
1227 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1231 FakeInputEvent(blink::WebInputEvent::TouchMove));
1228 EXPECT_EQ(3, mock_scheduler_->update_policy_count_); 1232 EXPECT_EQ(3, mock_scheduler_->update_policy_count_);
1229 1233
1230 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 1234 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1231 RunUntilIdle(); 1235 RunUntilIdle();
1232 1236
1233 // We finally expect a delayed policy update. 1237 // We finally expect a delayed policy update.
1234 EXPECT_EQ(4, mock_scheduler_->update_policy_count_); 1238 EXPECT_EQ(4, mock_scheduler_->update_policy_count_);
1235 } 1239 }
1236 1240
1237 TEST_F(RendererSchedulerImplWithMockSchedulerTest, 1241 TEST_F(RendererSchedulerImplWithMockSchedulerTest,
1238 EnsureUpdatePolicyNotTriggeredTooOften) { 1242 EnsureUpdatePolicyNotTriggeredTooOften) {
1239 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1243 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1240 1244
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 EnableIdleTasks(); 1332 EnableIdleTasks();
1329 RunUntilIdle(); 1333 RunUntilIdle();
1330 // Note we expect task 3 to run last because it's non-nestable. 1334 // Note we expect task 3 to run last because it's non-nestable.
1331 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"), 1335 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"),
1332 std::string("4"), std::string("5"), 1336 std::string("4"), std::string("5"),
1333 std::string("3"))); 1337 std::string("3")));
1334 } 1338 }
1335 1339
1336 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriod) { 1340 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriod) {
1337 base::TimeTicks expected_deadline = 1341 base::TimeTicks expected_deadline =
1338 clock_->Now() + maximum_idle_period_duration(); 1342 clock_->NowTicks() + maximum_idle_period_duration();
1339 base::TimeTicks deadline_in_task; 1343 base::TimeTicks deadline_in_task;
1340 int run_count = 0; 1344 int run_count = 0;
1341 1345
1342 idle_task_runner_->PostIdleTask( 1346 idle_task_runner_->PostIdleTask(
1343 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1347 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1344 1348
1345 RunUntilIdle(); 1349 RunUntilIdle();
1346 EXPECT_EQ(0, run_count); // Shouldn't run yet as no idle period. 1350 EXPECT_EQ(0, run_count); // Shouldn't run yet as no idle period.
1347 1351
1348 scheduler_->BeginFrameNotExpectedSoon(); 1352 scheduler_->BeginFrameNotExpectedSoon();
1349 RunUntilIdle(); 1353 RunUntilIdle();
1350 EXPECT_EQ(1, run_count); // Should have run in a long idle time. 1354 EXPECT_EQ(1, run_count); // Should have run in a long idle time.
1351 EXPECT_EQ(expected_deadline, deadline_in_task); 1355 EXPECT_EQ(expected_deadline, deadline_in_task);
1352 } 1356 }
1353 1357
1354 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) { 1358 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) {
1355 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(30); 1359 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(30);
1356 base::TimeTicks expected_deadline = clock_->Now() + pending_task_delay; 1360 base::TimeTicks expected_deadline = clock_->NowTicks() + pending_task_delay;
1357 base::TimeTicks deadline_in_task; 1361 base::TimeTicks deadline_in_task;
1358 int run_count = 0; 1362 int run_count = 0;
1359 1363
1360 idle_task_runner_->PostIdleTask( 1364 idle_task_runner_->PostIdleTask(
1361 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1365 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1362 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1366 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1363 pending_task_delay); 1367 pending_task_delay);
1364 1368
1365 scheduler_->BeginFrameNotExpectedSoon(); 1369 scheduler_->BeginFrameNotExpectedSoon();
1366 RunUntilIdle(); 1370 RunUntilIdle();
1367 EXPECT_EQ(1, run_count); // Should have run in a long idle time. 1371 EXPECT_EQ(1, run_count); // Should have run in a long idle time.
1368 EXPECT_EQ(expected_deadline, deadline_in_task); 1372 EXPECT_EQ(expected_deadline, deadline_in_task);
1369 } 1373 }
1370 1374
1371 TEST_F(RendererSchedulerImplTest, 1375 TEST_F(RendererSchedulerImplTest,
1372 TestLongIdlePeriodWithLatePendingDelayedTask) { 1376 TestLongIdlePeriodWithLatePendingDelayedTask) {
1373 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(10); 1377 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(10);
1374 base::TimeTicks deadline_in_task; 1378 base::TimeTicks deadline_in_task;
1375 int run_count = 0; 1379 int run_count = 0;
1376 1380
1377 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1381 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1378 pending_task_delay); 1382 pending_task_delay);
1379 1383
1380 // Advance clock until after delayed task was meant to be run. 1384 // Advance clock until after delayed task was meant to be run.
1381 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(20)); 1385 clock_->Advance(base::TimeDelta::FromMilliseconds(20));
1382 1386
1383 // Post an idle task and BeginFrameNotExpectedSoon to initiate a long idle 1387 // Post an idle task and BeginFrameNotExpectedSoon to initiate a long idle
1384 // period. Since there is a late pending delayed task this shouldn't actually 1388 // period. Since there is a late pending delayed task this shouldn't actually
1385 // start an idle period. 1389 // start an idle period.
1386 idle_task_runner_->PostIdleTask( 1390 idle_task_runner_->PostIdleTask(
1387 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1391 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1388 scheduler_->BeginFrameNotExpectedSoon(); 1392 scheduler_->BeginFrameNotExpectedSoon();
1389 RunUntilIdle(); 1393 RunUntilIdle();
1390 EXPECT_EQ(0, run_count); 1394 EXPECT_EQ(0, run_count);
1391 1395
1392 // After the delayed task has been run we should trigger an idle period. 1396 // After the delayed task has been run we should trigger an idle period.
1393 clock_->AdvanceNow(maximum_idle_period_duration()); 1397 clock_->Advance(maximum_idle_period_duration());
1394 RunUntilIdle(); 1398 RunUntilIdle();
1395 EXPECT_EQ(1, run_count); 1399 EXPECT_EQ(1, run_count);
1396 } 1400 }
1397 1401
1398 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) { 1402 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) {
1399 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1403 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1400 std::vector<base::TimeTicks> actual_deadlines; 1404 std::vector<base::TimeTicks> actual_deadlines;
1401 int run_count = 0; 1405 int run_count = 0;
1402 1406
1403 max_idle_task_reposts = 3; 1407 max_idle_task_reposts = 3;
1404 base::TimeTicks clock_before(clock_->Now()); 1408 base::TimeTicks clock_before(clock_->NowTicks());
1405 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10)); 1409 base::TimeDelta idle_task_runtime(base::TimeDelta::FromMilliseconds(10));
1406 idle_task_runner_->PostIdleTask( 1410 idle_task_runner_->PostIdleTask(
1407 FROM_HERE, 1411 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask,
1408 base::Bind(&RepostingUpdateClockIdleTestTask, idle_task_runner_, 1412 idle_task_runner_, &run_count, clock_.get(),
1409 &run_count, clock_, idle_task_runtime, &actual_deadlines)); 1413 idle_task_runtime, &actual_deadlines));
1410 scheduler_->BeginFrameNotExpectedSoon(); 1414 scheduler_->BeginFrameNotExpectedSoon();
1411 RunUntilIdle(); 1415 RunUntilIdle();
1412 EXPECT_EQ(3, run_count); 1416 EXPECT_EQ(3, run_count);
1413 EXPECT_THAT( 1417 EXPECT_THAT(
1414 actual_deadlines, 1418 actual_deadlines,
1415 testing::ElementsAre( 1419 testing::ElementsAre(
1416 clock_before + maximum_idle_period_duration(), 1420 clock_before + maximum_idle_period_duration(),
1417 clock_before + idle_task_runtime + maximum_idle_period_duration(), 1421 clock_before + idle_task_runtime + maximum_idle_period_duration(),
1418 clock_before + (2 * idle_task_runtime) + 1422 clock_before + (2 * idle_task_runtime) +
1419 maximum_idle_period_duration())); 1423 maximum_idle_period_duration()));
1420 1424
1421 // Check that idle tasks don't run after the idle period ends with a 1425 // Check that idle tasks don't run after the idle period ends with a
1422 // new BeginMainFrame. 1426 // new BeginMainFrame.
1423 max_idle_task_reposts = 5; 1427 max_idle_task_reposts = 5;
1424 idle_task_runner_->PostIdleTask( 1428 idle_task_runner_->PostIdleTask(
1425 FROM_HERE, 1429 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask,
1426 base::Bind(&RepostingUpdateClockIdleTestTask, idle_task_runner_, 1430 idle_task_runner_, &run_count, clock_.get(),
1427 &run_count, clock_, idle_task_runtime, &actual_deadlines)); 1431 idle_task_runtime, &actual_deadlines));
1428 idle_task_runner_->PostIdleTask( 1432 idle_task_runner_->PostIdleTask(
1429 FROM_HERE, base::Bind(&WillBeginFrameIdleTask, 1433 FROM_HERE, base::Bind(&WillBeginFrameIdleTask,
1430 base::Unretained(scheduler_.get()), clock_)); 1434 base::Unretained(scheduler_.get()), clock_.get()));
1431 RunUntilIdle(); 1435 RunUntilIdle();
1432 EXPECT_EQ(4, run_count); 1436 EXPECT_EQ(4, run_count);
1433 } 1437 }
1434 1438
1435 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) { 1439 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) {
1436 base::TimeTicks deadline_in_task; 1440 base::TimeTicks deadline_in_task;
1437 int run_count = 0; 1441 int run_count = 0;
1438 1442
1439 // Start a long idle period and get the time it should end. 1443 // Start a long idle period and get the time it should end.
1440 scheduler_->BeginFrameNotExpectedSoon(); 1444 scheduler_->BeginFrameNotExpectedSoon();
1441 // The scheduler should not run the initiate_next_long_idle_period task if 1445 // The scheduler should not run the initiate_next_long_idle_period task if
1442 // there are no idle tasks and no other task woke up the scheduler, thus 1446 // there are no idle tasks and no other task woke up the scheduler, thus
1443 // the idle period deadline shouldn't update at the end of the current long 1447 // the idle period deadline shouldn't update at the end of the current long
1444 // idle period. 1448 // idle period.
1445 base::TimeTicks idle_period_deadline = 1449 base::TimeTicks idle_period_deadline =
1446 scheduler_->CurrentIdleTaskDeadlineForTesting(); 1450 scheduler_->CurrentIdleTaskDeadlineForTesting();
1447 clock_->AdvanceNow(maximum_idle_period_duration()); 1451 clock_->Advance(maximum_idle_period_duration());
1448 RunUntilIdle(); 1452 RunUntilIdle();
1449 1453
1450 base::TimeTicks new_idle_period_deadline = 1454 base::TimeTicks new_idle_period_deadline =
1451 scheduler_->CurrentIdleTaskDeadlineForTesting(); 1455 scheduler_->CurrentIdleTaskDeadlineForTesting();
1452 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); 1456 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
1453 1457
1454 // Posting a after-wakeup idle task also shouldn't wake the scheduler or 1458 // Posting a after-wakeup idle task also shouldn't wake the scheduler or
1455 // initiate the next long idle period. 1459 // initiate the next long idle period.
1456 idle_task_runner_->PostIdleTaskAfterWakeup( 1460 idle_task_runner_->PostIdleTaskAfterWakeup(
1457 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1461 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
(...skipping 21 matching lines...) Expand all
1479 1483
1480 // Observation of touchstart should defer the start of the long idle period. 1484 // Observation of touchstart should defer the start of the long idle period.
1481 scheduler_->DidHandleInputEventOnCompositorThread( 1485 scheduler_->DidHandleInputEventOnCompositorThread(
1482 FakeInputEvent(blink::WebInputEvent::TouchStart), 1486 FakeInputEvent(blink::WebInputEvent::TouchStart),
1483 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1487 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1484 scheduler_->BeginFrameNotExpectedSoon(); 1488 scheduler_->BeginFrameNotExpectedSoon();
1485 RunUntilIdle(); 1489 RunUntilIdle();
1486 EXPECT_EQ(0, run_count); 1490 EXPECT_EQ(0, run_count);
1487 1491
1488 // The long idle period should start after the touchstart policy has finished. 1492 // The long idle period should start after the touchstart policy has finished.
1489 clock_->AdvanceNow(priority_escalation_after_input_duration()); 1493 clock_->Advance(priority_escalation_after_input_duration());
1490 RunUntilIdle(); 1494 RunUntilIdle();
1491 EXPECT_EQ(1, run_count); 1495 EXPECT_EQ(1, run_count);
1492 } 1496 }
1493 1497
1494 void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler, 1498 void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler,
1495 bool* can_exceed_idle_deadline_out, 1499 bool* can_exceed_idle_deadline_out,
1496 int* run_count, 1500 int* run_count,
1497 base::TimeTicks deadline) { 1501 base::TimeTicks deadline) {
1498 *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired(); 1502 *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired();
1499 (*run_count)++; 1503 (*run_count)++;
(...skipping 24 matching lines...) Expand all
1524 FROM_HERE, 1528 FROM_HERE,
1525 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), 1529 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(),
1526 &can_exceed_idle_deadline, &run_count)); 1530 &can_exceed_idle_deadline, &run_count));
1527 scheduler_->BeginFrameNotExpectedSoon(); 1531 scheduler_->BeginFrameNotExpectedSoon();
1528 RunUntilIdle(); 1532 RunUntilIdle();
1529 EXPECT_EQ(2, run_count); 1533 EXPECT_EQ(2, run_count);
1530 EXPECT_FALSE(can_exceed_idle_deadline); 1534 EXPECT_FALSE(can_exceed_idle_deadline);
1531 1535
1532 // Next long idle period will be for the maximum time, so 1536 // Next long idle period will be for the maximum time, so
1533 // CanExceedIdleDeadlineIfRequired should return true. 1537 // CanExceedIdleDeadlineIfRequired should return true.
1534 clock_->AdvanceNow(maximum_idle_period_duration()); 1538 clock_->Advance(maximum_idle_period_duration());
1535 idle_task_runner_->PostIdleTask( 1539 idle_task_runner_->PostIdleTask(
1536 FROM_HERE, 1540 FROM_HERE,
1537 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), 1541 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(),
1538 &can_exceed_idle_deadline, &run_count)); 1542 &can_exceed_idle_deadline, &run_count));
1539 RunUntilIdle(); 1543 RunUntilIdle();
1540 EXPECT_EQ(3, run_count); 1544 EXPECT_EQ(3, run_count);
1541 EXPECT_TRUE(can_exceed_idle_deadline); 1545 EXPECT_TRUE(can_exceed_idle_deadline);
1542 1546
1543 // Next long idle period will be for the maximum time, so 1547 // Next long idle period will be for the maximum time, so
1544 // CanExceedIdleDeadlineIfRequired should return true. 1548 // CanExceedIdleDeadlineIfRequired should return true.
1545 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 1549 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1546 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 1550 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
1547 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 1551 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
1548 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); 1552 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired());
1549 } 1553 }
1550 1554
1551 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { 1555 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) {
1552 int run_count = 0; 1556 int run_count = 0;
1553 1557
1554 max_idle_task_reposts = 2; 1558 max_idle_task_reposts = 2;
1555 idle_task_runner_->PostIdleTask( 1559 idle_task_runner_->PostIdleTask(
1556 FROM_HERE, 1560 FROM_HERE,
1557 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1561 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
1558 1562
1559 // Renderer should start in visible state. 1563 // Renderer should start in visible state.
1560 RunUntilIdle(); 1564 RunUntilIdle();
1561 EXPECT_EQ(0, run_count); 1565 EXPECT_EQ(0, run_count);
1562 1566
1563 // When we hide the renderer it should start a max deadline idle period, which 1567 // When we hide the renderer it should start a max deadline idle period, which
1564 // will run an idle task and then immediately start a new idle period, which 1568 // will run an idle task and then immediately start a new idle period, which
1565 // runs the second idle task. 1569 // runs the second idle task.
1566 scheduler_->OnRendererHidden(); 1570 scheduler_->OnRendererHidden();
1567 RunUntilIdle(); 1571 RunUntilIdle();
1568 EXPECT_EQ(2, run_count); 1572 EXPECT_EQ(2, run_count);
1569 1573
1570 // Advance time by amount of time by the maximum amount of time we execute 1574 // Advance time by amount of time by the maximum amount of time we execute
1571 // idle tasks when hidden (plus some slack) - idle period should have ended. 1575 // idle tasks when hidden (plus some slack) - idle period should have ended.
1572 max_idle_task_reposts = 3; 1576 max_idle_task_reposts = 3;
1573 idle_task_runner_->PostIdleTask( 1577 idle_task_runner_->PostIdleTask(
1574 FROM_HERE, 1578 FROM_HERE,
1575 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1579 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
1576 clock_->AdvanceNow(end_idle_when_hidden_delay() + 1580 clock_->Advance(end_idle_when_hidden_delay() +
1577 base::TimeDelta::FromMilliseconds(10)); 1581 base::TimeDelta::FromMilliseconds(10));
1578 RunUntilIdle(); 1582 RunUntilIdle();
1579 EXPECT_EQ(2, run_count); 1583 EXPECT_EQ(2, run_count);
1580 } 1584 }
1581 1585
1582 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) { 1586 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) {
1583 std::vector<std::string> run_order; 1587 std::vector<std::string> run_order;
1584 PostTestTasks(&run_order, "T1 T2"); 1588 PostTestTasks(&run_order, "T1 T2");
1585 RunUntilIdle(); 1589 RunUntilIdle();
1586 EXPECT_THAT(run_order, 1590 EXPECT_THAT(run_order,
1587 testing::ElementsAre(std::string("T1"), std::string("T2"))); 1591 testing::ElementsAre(std::string("T1"), std::string("T2")));
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1636 TEST_F(RendererSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) { 1640 TEST_F(RendererSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) {
1637 // This should not DCHECK because there was no corresponding compositor side 1641 // This should not DCHECK because there was no corresponding compositor side
1638 // call to DidHandleInputEventOnCompositorThread with 1642 // call to DidHandleInputEventOnCompositorThread with
1639 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the 1643 // 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. 1644 // compositor to not be there and we don't want to make debugging impossible.
1641 scheduler_->DidHandleInputEventOnMainThread( 1645 scheduler_->DidHandleInputEventOnMainThread(
1642 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 1646 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
1643 } 1647 }
1644 1648
1645 } // namespace scheduler 1649 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698