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

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: Incorporated review comments: scoped leaking clocks, refactored num_now_calls_ functionality 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 base::TimeTicks deadline) { 72 base::TimeTicks deadline) {
73 if ((*run_count + 1) < max_idle_task_reposts) { 73 if ((*run_count + 1) < max_idle_task_reposts) {
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 UpdateClockToDeadlineIdleTestTask( 81 void UpdateClockToDeadlineIdleTestTask(
82 cc::TestNowSource* clock, 82 base::SimpleTestTickClock* clock,
83 base::SingleThreadTaskRunner* task_runner, 83 base::SingleThreadTaskRunner* task_runner,
84 int* run_count, 84 int* run_count,
85 base::TimeTicks deadline) { 85 base::TimeTicks deadline) {
86 clock->SetNow(deadline); 86 clock->Advance(deadline - clock->NowTicks());
87 // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact 87 // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact
88 // that we updated the time within a task, the delayed pending task to call 88 // that we updated the time within a task, the delayed pending task to call
89 // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so 89 // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so
90 // post a normal task here to ensure it runs before the next idle task. 90 // post a normal task here to ensure it runs before the next idle task.
91 task_runner->PostTask(FROM_HERE, base::Bind(NullTask)); 91 task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
92 (*run_count)++; 92 (*run_count)++;
93 } 93 }
94 94
95 void PostingYieldingTestTask(RendererSchedulerImpl* scheduler, 95 void PostingYieldingTestTask(RendererSchedulerImpl* scheduler,
96 base::SingleThreadTaskRunner* task_runner, 96 base::SingleThreadTaskRunner* task_runner,
(...skipping 19 matching lines...) Expand all
116 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 116 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
117 } 117 }
118 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated(); 118 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated();
119 } 119 }
120 }; // namespace 120 }; // namespace
121 121
122 class RendererSchedulerImplTest : public testing::Test { 122 class RendererSchedulerImplTest : public testing::Test {
123 public: 123 public:
124 using Policy = RendererSchedulerImpl::Policy; 124 using Policy = RendererSchedulerImpl::Policy;
125 125
126 RendererSchedulerImplTest() 126 RendererSchedulerImplTest() : clock_(new base::SimpleTestTickClock()) {
127 : clock_(cc::TestNowSource::Create(5000)), 127 clock_->Advance(base::TimeDelta::FromInternalValue(5000));
128 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)), 128 mock_task_runner_ = new cc::OrderedSimpleTaskRunner(clock_.get(), false);
129 nestable_task_runner_( 129 nestable_task_runner_ =
130 NestableTaskRunnerForTest::Create(mock_task_runner_)), 130 NestableTaskRunnerForTest::Create(mock_task_runner_);
131 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), 131 scheduler_ =
132 default_task_runner_(scheduler_->DefaultTaskRunner()), 132 make_scoped_ptr(new RendererSchedulerImpl(nestable_task_runner_));
133 compositor_task_runner_(scheduler_->CompositorTaskRunner()), 133 default_task_runner_ = scheduler_->DefaultTaskRunner();
134 loading_task_runner_(scheduler_->LoadingTaskRunner()), 134 compositor_task_runner_ = scheduler_->CompositorTaskRunner();
135 idle_task_runner_(scheduler_->IdleTaskRunner()), 135 loading_task_runner_ = scheduler_->LoadingTaskRunner();
136 timer_task_runner_(scheduler_->TimerTaskRunner()) { 136 idle_task_runner_ = scheduler_->IdleTaskRunner();
137 timer_task_runner_ = scheduler_->TimerTaskRunner();
137 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 138 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
138 make_scoped_ptr(new TestTimeSource(clock_))); 139 make_scoped_ptr(new TestTimeSource(clock_.get())));
139 scheduler_->GetSchedulerHelperForTesting() 140 scheduler_->GetSchedulerHelperForTesting()
140 ->GetTaskQueueManagerForTesting() 141 ->GetTaskQueueManagerForTesting()
141 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 142 ->SetTimeSourceForTesting(
143 make_scoped_ptr(new TestTimeSource(clock_.get())));
142 } 144 }
143 145
144 RendererSchedulerImplTest(base::MessageLoop* message_loop) 146 RendererSchedulerImplTest(base::MessageLoop* message_loop)
145 : clock_(cc::TestNowSource::Create(5000)), 147 : clock_(new base::SimpleTestTickClock()),
146 message_loop_(message_loop), 148 message_loop_(message_loop),
147 nestable_task_runner_( 149 nestable_task_runner_(
148 SchedulerMessageLoopDelegate::Create(message_loop)), 150 SchedulerMessageLoopDelegate::Create(message_loop)),
149 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), 151 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)),
150 default_task_runner_(scheduler_->DefaultTaskRunner()), 152 default_task_runner_(scheduler_->DefaultTaskRunner()),
151 compositor_task_runner_(scheduler_->CompositorTaskRunner()), 153 compositor_task_runner_(scheduler_->CompositorTaskRunner()),
152 loading_task_runner_(scheduler_->LoadingTaskRunner()), 154 loading_task_runner_(scheduler_->LoadingTaskRunner()),
153 idle_task_runner_(scheduler_->IdleTaskRunner()), 155 idle_task_runner_(scheduler_->IdleTaskRunner()),
154 timer_task_runner_(scheduler_->TimerTaskRunner()) { 156 timer_task_runner_(scheduler_->TimerTaskRunner()) {
157 clock_->Advance(base::TimeDelta::FromInternalValue(5000));
155 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 158 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
156 make_scoped_ptr(new TestTimeSource(clock_))); 159 make_scoped_ptr(new TestTimeSource(clock_.get())));
157 scheduler_->GetSchedulerHelperForTesting() 160 scheduler_->GetSchedulerHelperForTesting()
158 ->GetTaskQueueManagerForTesting() 161 ->GetTaskQueueManagerForTesting()
159 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 162 ->SetTimeSourceForTesting(
163 make_scoped_ptr(new TestTimeSource(clock_.get())));
160 } 164 }
161 ~RendererSchedulerImplTest() override {} 165 ~RendererSchedulerImplTest() override {}
162 166
163 void TearDown() override { 167 void TearDown() override {
164 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 168 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
165 if (mock_task_runner_.get()) { 169 if (mock_task_runner_.get()) {
166 // Check that all tests stop posting tasks. 170 // Check that all tests stop posting tasks.
167 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 171 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
168 while (mock_task_runner_->RunUntilIdle()) { 172 while (mock_task_runner_->RunUntilIdle()) {
169 } 173 }
170 } else { 174 } else {
171 message_loop_->RunUntilIdle(); 175 message_loop_->RunUntilIdle();
172 } 176 }
173 } 177 }
174 178
175 void RunUntilIdle() { 179 void RunUntilIdle() {
176 // Only one of mock_task_runner_ or message_loop_ should be set. 180 // Only one of mock_task_runner_ or message_loop_ should be set.
177 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 181 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
178 if (mock_task_runner_.get()) 182 if (mock_task_runner_.get())
179 mock_task_runner_->RunUntilIdle(); 183 mock_task_runner_->RunUntilIdle();
180 else 184 else
181 message_loop_->RunUntilIdle(); 185 message_loop_->RunUntilIdle();
182 } 186 }
183 187
184 void DoMainFrame() { 188 void DoMainFrame() {
185 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 189 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
186 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 190 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
187 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 191 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
188 scheduler_->DidCommitFrameToCompositor(); 192 scheduler_->DidCommitFrameToCompositor();
189 } 193 }
190 194
191 void EnableIdleTasks() { DoMainFrame(); } 195 void EnableIdleTasks() { DoMainFrame(); }
192 196
193 Policy CurrentPolicy() { return scheduler_->current_policy_; } 197 Policy CurrentPolicy() { return scheduler_->current_policy_; }
194 198
195 void EnsureUrgentPolicyUpdatePostedOnMainThread() { 199 void EnsureUrgentPolicyUpdatePostedOnMainThread() {
196 base::AutoLock lock(scheduler_->incoming_signals_lock_); 200 base::AutoLock lock(scheduler_->incoming_signals_lock_);
197 scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(FROM_HERE); 201 scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(FROM_HERE);
198 } 202 }
199 203
200 void ScheduleDelayedPolicyUpdate(base::TimeDelta delay) { 204 void ScheduleDelayedPolicyUpdate(base::TimeDelta delay) {
201 scheduler_->delayed_update_policy_runner_.SetDeadline(FROM_HERE, delay, 205 scheduler_->delayed_update_policy_runner_.SetDeadline(FROM_HERE, delay,
202 clock_->Now()); 206 clock_->NowTicks());
203 } 207 }
204 208
205 // Helper for posting several tasks of specific types. |task_descriptor| is a 209 // Helper for posting several tasks of specific types. |task_descriptor| is a
206 // string with space delimited task identifiers. The first letter of each 210 // string with space delimited task identifiers. The first letter of each
207 // task identifier specifies the task type: 211 // task identifier specifies the task type:
208 // - 'D': Default task 212 // - 'D': Default task
209 // - 'C': Compositor task 213 // - 'C': Compositor task
210 // - 'L': Loading task 214 // - 'L': Loading task
211 // - 'I': Idle task 215 // - 'I': Idle task
212 // - 'T': Timer task 216 // - 'T': Timer task
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 &RendererSchedulerImpl::PolicyToString); 288 &RendererSchedulerImpl::PolicyToString);
285 } 289 }
286 290
287 static void CheckAllInputStreamStateToString() { 291 static void CheckAllInputStreamStateToString() {
288 CallForEachEnumValue<RendererSchedulerImpl::InputStreamState>( 292 CallForEachEnumValue<RendererSchedulerImpl::InputStreamState>(
289 RendererSchedulerImpl::InputStreamState::FIRST_INPUT_STREAM_STATE, 293 RendererSchedulerImpl::InputStreamState::FIRST_INPUT_STREAM_STATE,
290 RendererSchedulerImpl::InputStreamState::INPUT_STREAM_STATE_COUNT, 294 RendererSchedulerImpl::InputStreamState::INPUT_STREAM_STATE_COUNT,
291 &RendererSchedulerImpl::InputStreamStateToString); 295 &RendererSchedulerImpl::InputStreamStateToString);
292 } 296 }
293 297
294 scoped_refptr<cc::TestNowSource> clock_; 298 scoped_ptr<base::SimpleTestTickClock> clock_;
295 // Only one of mock_task_runner_ or message_loop_ will be set. 299 // Only one of mock_task_runner_ or message_loop_ will be set.
296 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; 300 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
297 scoped_ptr<base::MessageLoop> message_loop_; 301 scoped_ptr<base::MessageLoop> message_loop_;
298 302
299 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_; 303 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_;
300 scoped_ptr<RendererSchedulerImpl> scheduler_; 304 scoped_ptr<RendererSchedulerImpl> scheduler_;
301 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; 305 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
302 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; 306 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
303 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; 307 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_;
304 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; 308 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_;
(...skipping 27 matching lines...) Expand all
332 FROM_HERE, base::Bind(AppendToVectorReentrantTask, default_task_runner_, 336 FROM_HERE, base::Bind(AppendToVectorReentrantTask, default_task_runner_,
333 &run_order, &count, 5)); 337 &run_order, &count, 5));
334 RunUntilIdle(); 338 RunUntilIdle();
335 339
336 EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4)); 340 EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4));
337 } 341 }
338 342
339 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) { 343 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) {
340 int run_count = 0; 344 int run_count = 0;
341 base::TimeTicks expected_deadline = 345 base::TimeTicks expected_deadline =
342 clock_->Now() + base::TimeDelta::FromMilliseconds(2300); 346 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(2300);
343 base::TimeTicks deadline_in_task; 347 base::TimeTicks deadline_in_task;
344 348
345 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(100)); 349 clock_->Advance(base::TimeDelta::FromMilliseconds(100));
346 idle_task_runner_->PostIdleTask( 350 idle_task_runner_->PostIdleTask(
347 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 351 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
348 352
349 RunUntilIdle(); 353 RunUntilIdle();
350 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. 354 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame.
351 355
352 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 356 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
353 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 357 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
354 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 358 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
355 RunUntilIdle(); 359 RunUntilIdle();
356 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. 360 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor.
357 361
358 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1200)); 362 clock_->Advance(base::TimeDelta::FromMilliseconds(1200));
359 scheduler_->DidCommitFrameToCompositor(); 363 scheduler_->DidCommitFrameToCompositor();
360 RunUntilIdle(); 364 RunUntilIdle();
361 EXPECT_EQ(0, run_count); // We missed the deadline. 365 EXPECT_EQ(0, run_count); // We missed the deadline.
362 366
363 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 367 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
364 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 368 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
365 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 369 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
366 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800)); 370 clock_->Advance(base::TimeDelta::FromMilliseconds(800));
367 scheduler_->DidCommitFrameToCompositor(); 371 scheduler_->DidCommitFrameToCompositor();
368 RunUntilIdle(); 372 RunUntilIdle();
369 EXPECT_EQ(1, run_count); 373 EXPECT_EQ(1, run_count);
370 EXPECT_EQ(expected_deadline, deadline_in_task); 374 EXPECT_EQ(expected_deadline, deadline_in_task);
371 } 375 }
372 376
373 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { 377 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) {
374 int run_count = 0; 378 int run_count = 0;
375 379
376 max_idle_task_reposts = 2; 380 max_idle_task_reposts = 2;
(...skipping 12 matching lines...) Expand all
389 RunUntilIdle(); 393 RunUntilIdle();
390 EXPECT_EQ(2, run_count); 394 EXPECT_EQ(2, run_count);
391 } 395 }
392 396
393 TEST_F(RendererSchedulerImplTest, TestIdleTaskExceedsDeadline) { 397 TEST_F(RendererSchedulerImplTest, TestIdleTaskExceedsDeadline) {
394 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 398 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
395 int run_count = 0; 399 int run_count = 0;
396 400
397 // Post two UpdateClockToDeadlineIdleTestTask tasks. 401 // Post two UpdateClockToDeadlineIdleTestTask tasks.
398 idle_task_runner_->PostIdleTask( 402 idle_task_runner_->PostIdleTask(
399 FROM_HERE, base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_, 403 FROM_HERE, base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_.get(),
400 default_task_runner_, &run_count)); 404 default_task_runner_, &run_count));
401 idle_task_runner_->PostIdleTask( 405 idle_task_runner_->PostIdleTask(
402 FROM_HERE, base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_, 406 FROM_HERE, base::Bind(&UpdateClockToDeadlineIdleTestTask, clock_.get(),
403 default_task_runner_, &run_count)); 407 default_task_runner_, &run_count));
404 408
405 EnableIdleTasks(); 409 EnableIdleTasks();
406 RunUntilIdle(); 410 RunUntilIdle();
407 // Only the first idle task should execute since it's used up the deadline. 411 // Only the first idle task should execute since it's used up the deadline.
408 EXPECT_EQ(1, run_count); 412 EXPECT_EQ(1, run_count);
409 413
410 EnableIdleTasks(); 414 EnableIdleTasks();
411 RunUntilIdle(); 415 RunUntilIdle();
412 // Second task should be run on the next idle period. 416 // Second task should be run on the next idle period.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 481
478 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { 482 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) {
479 int run_count = 0; 483 int run_count = 0;
480 484
481 base::TimeTicks deadline_in_task; 485 base::TimeTicks deadline_in_task;
482 idle_task_runner_->PostIdleTask( 486 idle_task_runner_->PostIdleTask(
483 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 487 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
484 488
485 // Trigger the beginning of an idle period for 1000ms. 489 // Trigger the beginning of an idle period for 1000ms.
486 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 490 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
487 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 491 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
488 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 492 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
489 DoMainFrame(); 493 DoMainFrame();
490 494
491 // End the idle period early (after 500ms), and send a WillBeginFrame which 495 // End the idle period early (after 500ms), and send a WillBeginFrame which
492 // specifies that the next idle period should end 1000ms from now. 496 // specifies that the next idle period should end 1000ms from now.
493 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(500)); 497 clock_->Advance(base::TimeDelta::FromMilliseconds(500));
494 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 498 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
495 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 499 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
496 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 500 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
497 501
498 RunUntilIdle(); 502 RunUntilIdle();
499 EXPECT_EQ(0, run_count); // Not currently in an idle period. 503 EXPECT_EQ(0, run_count); // Not currently in an idle period.
500 504
501 // Trigger the start of the idle period before the task to end the previous 505 // Trigger the start of the idle period before the task to end the previous
502 // idle period has been triggered. 506 // idle period has been triggered.
503 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(400)); 507 clock_->Advance(base::TimeDelta::FromMilliseconds(400));
504 scheduler_->DidCommitFrameToCompositor(); 508 scheduler_->DidCommitFrameToCompositor();
505 509
506 // Post a task which simulates running until after the previous end idle 510 // Post a task which simulates running until after the previous end idle
507 // period delayed task was scheduled for 511 // period delayed task was scheduled for
508 scheduler_->DefaultTaskRunner()->PostTask(FROM_HERE, base::Bind(NullTask)); 512 scheduler_->DefaultTaskRunner()->PostTask(FROM_HERE, base::Bind(NullTask));
509 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(300)); 513 clock_->Advance(base::TimeDelta::FromMilliseconds(300));
510 514
511 RunUntilIdle(); 515 RunUntilIdle();
512 EXPECT_EQ(1, run_count); // We should still be in the new idle period. 516 EXPECT_EQ(1, run_count); // We should still be in the new idle period.
513 } 517 }
514 518
515 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) { 519 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) {
516 std::vector<std::string> run_order; 520 std::vector<std::string> run_order;
517 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 521 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
518 522
519 EnableIdleTasks(); 523 EnableIdleTasks();
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 677
674 scheduler_->DidReceiveInputEventOnCompositorThread( 678 scheduler_->DidReceiveInputEventOnCompositorThread(
675 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 679 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
676 DoMainFrame(); 680 DoMainFrame();
677 RunUntilIdle(); 681 RunUntilIdle();
678 EXPECT_THAT(run_order, 682 EXPECT_THAT(run_order,
679 testing::ElementsAre(std::string("C1"), std::string("C2"), 683 testing::ElementsAre(std::string("C1"), std::string("C2"),
680 std::string("D1"), std::string("D2"))); 684 std::string("D1"), std::string("D2")));
681 685
682 run_order.clear(); 686 run_order.clear();
683 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 687 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
684 PostTestTasks(&run_order, "D1 C1 D2 C2"); 688 PostTestTasks(&run_order, "D1 C1 D2 C2");
685 689
686 // Compositor policy mode should have ended now that the clock has advanced. 690 // Compositor policy mode should have ended now that the clock has advanced.
687 RunUntilIdle(); 691 RunUntilIdle();
688 EXPECT_THAT(run_order, 692 EXPECT_THAT(run_order,
689 testing::ElementsAre(std::string("D1"), std::string("C1"), 693 testing::ElementsAre(std::string("D1"), std::string("C1"),
690 std::string("D2"), std::string("C2"))); 694 std::string("D2"), std::string("C2")));
691 } 695 }
692 696
693 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) { 697 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) {
694 std::vector<std::string> run_order; 698 std::vector<std::string> run_order;
695 PostTestTasks(&run_order, "L1 D1 C1 D2 C2"); 699 PostTestTasks(&run_order, "L1 D1 C1 D2 C2");
696 700
697 scheduler_->DidReceiveInputEventOnCompositorThread( 701 scheduler_->DidReceiveInputEventOnCompositorThread(
698 FakeInputEvent(blink::WebInputEvent::TouchStart)); 702 FakeInputEvent(blink::WebInputEvent::TouchStart));
699 RunUntilIdle(); 703 RunUntilIdle();
700 EXPECT_THAT(run_order, 704 EXPECT_THAT(run_order,
701 testing::ElementsAre(std::string("C1"), std::string("C2"), 705 testing::ElementsAre(std::string("C1"), std::string("C2"),
702 std::string("D1"), std::string("D2"))); 706 std::string("D1"), std::string("D2")));
703 707
704 run_order.clear(); 708 run_order.clear();
705 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(1000)); 709 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
706 710
707 // Don't post any compositor tasks to simulate a very long running event 711 // Don't post any compositor tasks to simulate a very long running event
708 // handler. 712 // handler.
709 PostTestTasks(&run_order, "D1 D2"); 713 PostTestTasks(&run_order, "D1 D2");
710 714
711 // Touchstart policy mode should have ended now that the clock has advanced. 715 // Touchstart policy mode should have ended now that the clock has advanced.
712 RunUntilIdle(); 716 RunUntilIdle();
713 EXPECT_THAT(run_order, 717 EXPECT_THAT(run_order,
714 testing::ElementsAre(std::string("L1"), std::string("D1"), 718 testing::ElementsAre(std::string("L1"), std::string("D1"),
715 std::string("D2"))); 719 std::string("D2")));
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 default_task_runner_->PostTask( 768 default_task_runner_->PostTask(
765 FROM_HERE, 769 FROM_HERE,
766 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input, 770 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input,
767 &is_anticipated_before, &is_anticipated_after)); 771 &is_anticipated_before, &is_anticipated_after));
768 RunUntilIdle(); 772 RunUntilIdle();
769 // When input is received, the scheduler should indicate that high-priority 773 // When input is received, the scheduler should indicate that high-priority
770 // work is anticipated. 774 // work is anticipated.
771 EXPECT_FALSE(is_anticipated_before); 775 EXPECT_FALSE(is_anticipated_before);
772 EXPECT_TRUE(is_anticipated_after); 776 EXPECT_TRUE(is_anticipated_after);
773 777
774 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 778 clock_->Advance(priority_escalation_after_input_duration() * 2);
775 simulate_input = false; 779 simulate_input = false;
776 default_task_runner_->PostTask( 780 default_task_runner_->PostTask(
777 FROM_HERE, 781 FROM_HERE,
778 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input, 782 base::Bind(&AnticipationTestTask, scheduler_.get(), simulate_input,
779 &is_anticipated_before, &is_anticipated_after)); 783 &is_anticipated_before, &is_anticipated_after));
780 RunUntilIdle(); 784 RunUntilIdle();
781 // Without additional input, the scheduler should indicate that high-priority 785 // Without additional input, the scheduler should indicate that high-priority
782 // work is no longer anticipated. 786 // work is no longer anticipated.
783 EXPECT_FALSE(is_anticipated_before); 787 EXPECT_FALSE(is_anticipated_before);
784 EXPECT_FALSE(is_anticipated_after); 788 EXPECT_FALSE(is_anticipated_after);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 832 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
829 833
830 // An input event should bump us into input priority. 834 // An input event should bump us into input priority.
831 scheduler_->DidReceiveInputEventOnCompositorThread( 835 scheduler_->DidReceiveInputEventOnCompositorThread(
832 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 836 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
833 RunUntilIdle(); 837 RunUntilIdle();
834 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 838 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
835 839
836 // Simulate the input event being queued for a very long time. The compositor 840 // Simulate the input event being queued for a very long time. The compositor
837 // task we post here represents the enqueued input task. 841 // task we post here represents the enqueued input task.
838 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 842 clock_->Advance(priority_escalation_after_input_duration() * 2);
839 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); 843 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
840 RunUntilIdle(); 844 RunUntilIdle();
841 845
842 // Even though we exceeded the input priority escalation period, we should 846 // Even though we exceeded the input priority escalation period, we should
843 // still be in compositor priority since the input remains queued. 847 // still be in compositor priority since the input remains queued.
844 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 848 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
845 849
846 // Simulate the input event triggering a composition. This should start the 850 // Simulate the input event triggering a composition. This should start the
847 // countdown for going back into normal policy. 851 // countdown for going back into normal policy.
848 DoMainFrame(); 852 DoMainFrame();
849 RunUntilIdle(); 853 RunUntilIdle();
850 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 854 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
851 855
852 // After the escalation period ends we should go back into normal mode. 856 // After the escalation period ends we should go back into normal mode.
853 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 857 clock_->Advance(priority_escalation_after_input_duration() * 2);
854 RunUntilIdle(); 858 RunUntilIdle();
855 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 859 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
856 } 860 }
857 861
858 TEST_F(RendererSchedulerImplTest, SlowNoOpInputEvent) { 862 TEST_F(RendererSchedulerImplTest, SlowNoOpInputEvent) {
859 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 863 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
860 864
861 // An input event should bump us into input priority. 865 // An input event should bump us into input priority.
862 scheduler_->DidReceiveInputEventOnCompositorThread( 866 scheduler_->DidReceiveInputEventOnCompositorThread(
863 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 867 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
864 RunUntilIdle(); 868 RunUntilIdle();
865 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 869 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
866 870
867 // Simulate the input event being queued for a very long time. The compositor 871 // Simulate the input event being queued for a very long time. The compositor
868 // task we post here represents the enqueued input task. 872 // task we post here represents the enqueued input task.
869 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 873 clock_->Advance(priority_escalation_after_input_duration() * 2);
870 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); 874 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
871 RunUntilIdle(); 875 RunUntilIdle();
872 876
873 // Even though we exceeded the input priority escalation period, we should 877 // Even though we exceeded the input priority escalation period, we should
874 // still be in compositor priority since the input remains queued. 878 // still be in compositor priority since the input remains queued.
875 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 879 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
876 880
877 // If we let the compositor queue drain, we should fall out of input 881 // If we let the compositor queue drain, we should fall out of input
878 // priority. 882 // priority.
879 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 883 clock_->Advance(priority_escalation_after_input_duration() * 2);
880 RunUntilIdle(); 884 RunUntilIdle();
881 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 885 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
882 } 886 }
883 887
884 TEST_F(RendererSchedulerImplTest, NoOpInputEvent) { 888 TEST_F(RendererSchedulerImplTest, NoOpInputEvent) {
885 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 889 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
886 890
887 // An input event should bump us into input priority. 891 // An input event should bump us into input priority.
888 scheduler_->DidReceiveInputEventOnCompositorThread( 892 scheduler_->DidReceiveInputEventOnCompositorThread(
889 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 893 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
890 RunUntilIdle(); 894 RunUntilIdle();
891 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 895 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
892 896
893 // If nothing else happens after this, we should drop out of compositor 897 // If nothing else happens after this, we should drop out of compositor
894 // priority after the escalation period ends and stop polling. 898 // priority after the escalation period ends and stop polling.
895 clock_->AdvanceNow(priority_escalation_after_input_duration() * 2); 899 clock_->Advance(priority_escalation_after_input_duration() * 2);
896 RunUntilIdle(); 900 RunUntilIdle();
897 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 901 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
898 EXPECT_FALSE(mock_task_runner_->HasPendingTasks()); 902 EXPECT_FALSE(mock_task_runner_->HasPendingTasks());
899 } 903 }
900 904
901 TEST_F(RendererSchedulerImplTest, NoOpInputEventExtendsEscalationPeriod) { 905 TEST_F(RendererSchedulerImplTest, NoOpInputEventExtendsEscalationPeriod) {
902 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 906 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
903 907
904 // Simulate one handled input event. 908 // Simulate one handled input event.
905 scheduler_->DidReceiveInputEventOnCompositorThread( 909 scheduler_->DidReceiveInputEventOnCompositorThread(
906 FakeInputEvent(blink::WebInputEvent::GestureScrollBegin)); 910 FakeInputEvent(blink::WebInputEvent::GestureScrollBegin));
907 RunUntilIdle(); 911 RunUntilIdle();
908 DoMainFrame(); 912 DoMainFrame();
909 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 913 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
910 914
911 // Send a no-op input event in the middle of the escalation period. 915 // Send a no-op input event in the middle of the escalation period.
912 clock_->AdvanceNow(priority_escalation_after_input_duration() / 2); 916 clock_->Advance(priority_escalation_after_input_duration() / 2);
913 scheduler_->DidReceiveInputEventOnCompositorThread( 917 scheduler_->DidReceiveInputEventOnCompositorThread(
914 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate)); 918 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate));
915 RunUntilIdle(); 919 RunUntilIdle();
916 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 920 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
917 921
918 // The escalation period should have been extended by the new input event. 922 // The escalation period should have been extended by the new input event.
919 clock_->AdvanceNow(3 * priority_escalation_after_input_duration() / 4); 923 clock_->Advance(3 * priority_escalation_after_input_duration() / 4);
920 RunUntilIdle(); 924 RunUntilIdle();
921 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 925 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
922 926
923 clock_->AdvanceNow(priority_escalation_after_input_duration() / 2); 927 clock_->Advance(priority_escalation_after_input_duration() / 2);
924 RunUntilIdle(); 928 RunUntilIdle();
925 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 929 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
926 } 930 }
927 931
928 TEST_F(RendererSchedulerImplTest, InputArrivesAfterBeginFrame) { 932 TEST_F(RendererSchedulerImplTest, InputArrivesAfterBeginFrame) {
929 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 933 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
930 934
931 cc::BeginFrameArgs args = cc::BeginFrameArgs::Create( 935 cc::BeginFrameArgs args = cc::BeginFrameArgs::Create(
932 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 936 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
933 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL); 937 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL);
934 clock_->AdvanceNow(priority_escalation_after_input_duration() / 2); 938 clock_->Advance(priority_escalation_after_input_duration() / 2);
935 939
936 scheduler_->DidReceiveInputEventOnCompositorThread( 940 scheduler_->DidReceiveInputEventOnCompositorThread(
937 FakeInputEvent(blink::WebInputEvent::GestureScrollBegin)); 941 FakeInputEvent(blink::WebInputEvent::GestureScrollBegin));
938 942
939 // Simulate a BeginMainFrame task from the past. 943 // Simulate a BeginMainFrame task from the past.
940 clock_->AdvanceNow(2 * priority_escalation_after_input_duration()); 944 clock_->Advance(2 * priority_escalation_after_input_duration());
941 scheduler_->WillBeginFrame(args); 945 scheduler_->WillBeginFrame(args);
942 scheduler_->DidCommitFrameToCompositor(); 946 scheduler_->DidCommitFrameToCompositor();
943 947
944 // This task represents the queued-up input event. 948 // This task represents the queued-up input event.
945 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); 949 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
946 950
947 // Should remain in input priority policy since the input event hasn't been 951 // Should remain in input priority policy since the input event hasn't been
948 // processed yet. 952 // processed yet.
949 clock_->AdvanceNow(2 * priority_escalation_after_input_duration()); 953 clock_->Advance(2 * priority_escalation_after_input_duration());
950 RunUntilIdle(); 954 RunUntilIdle();
951 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy()); 955 EXPECT_EQ(Policy::COMPOSITOR_PRIORITY, CurrentPolicy());
952 956
953 // Process the input event with a new BeginMainFrame. 957 // Process the input event with a new BeginMainFrame.
954 DoMainFrame(); 958 DoMainFrame();
955 clock_->AdvanceNow(2 * priority_escalation_after_input_duration()); 959 clock_->Advance(2 * priority_escalation_after_input_duration());
956 RunUntilIdle(); 960 RunUntilIdle();
957 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); 961 EXPECT_EQ(Policy::NORMAL, CurrentPolicy());
958 } 962 }
959 963
960 class RendererSchedulerImplForTest : public RendererSchedulerImpl { 964 class RendererSchedulerImplForTest : public RendererSchedulerImpl {
961 public: 965 public:
962 RendererSchedulerImplForTest( 966 RendererSchedulerImplForTest(
963 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner) 967 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner)
964 : RendererSchedulerImpl(main_task_runner), update_policy_count_(0) {} 968 : RendererSchedulerImpl(main_task_runner), update_policy_count_(0) {}
965 969
(...skipping 18 matching lines...) Expand all
984 RunUntilIdle(); 988 RunUntilIdle();
985 989
986 EXPECT_EQ(1, mock_scheduler->update_policy_count_); 990 EXPECT_EQ(1, mock_scheduler->update_policy_count_);
987 } 991 }
988 992
989 TEST_F(RendererSchedulerImplTest, OnePendingDelayedAndOneUrgentUpdatePolicy) { 993 TEST_F(RendererSchedulerImplTest, OnePendingDelayedAndOneUrgentUpdatePolicy) {
990 RendererSchedulerImplForTest* mock_scheduler = 994 RendererSchedulerImplForTest* mock_scheduler =
991 new RendererSchedulerImplForTest(nestable_task_runner_); 995 new RendererSchedulerImplForTest(nestable_task_runner_);
992 scheduler_.reset(mock_scheduler); 996 scheduler_.reset(mock_scheduler);
993 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 997 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
994 make_scoped_ptr(new TestTimeSource(clock_))); 998 make_scoped_ptr(new TestTimeSource(clock_.get())));
995 scheduler_->GetSchedulerHelperForTesting() 999 scheduler_->GetSchedulerHelperForTesting()
996 ->GetTaskQueueManagerForTesting() 1000 ->GetTaskQueueManagerForTesting()
997 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 1001 ->SetTimeSourceForTesting(
1002 make_scoped_ptr(new TestTimeSource(clock_.get())));
998 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1003 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
999 1004
1000 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1)); 1005 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1));
1001 EnsureUrgentPolicyUpdatePostedOnMainThread(); 1006 EnsureUrgentPolicyUpdatePostedOnMainThread();
1002 1007
1003 RunUntilIdle(); 1008 RunUntilIdle();
1004 1009
1005 // We expect both the urgent and the delayed updates to run. 1010 // We expect both the urgent and the delayed updates to run.
1006 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 1011 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
1007 } 1012 }
1008 1013
1009 TEST_F(RendererSchedulerImplTest, OneUrgentAndOnePendingDelayedUpdatePolicy) { 1014 TEST_F(RendererSchedulerImplTest, OneUrgentAndOnePendingDelayedUpdatePolicy) {
1010 RendererSchedulerImplForTest* mock_scheduler = 1015 RendererSchedulerImplForTest* mock_scheduler =
1011 new RendererSchedulerImplForTest(nestable_task_runner_); 1016 new RendererSchedulerImplForTest(nestable_task_runner_);
1012 scheduler_.reset(mock_scheduler); 1017 scheduler_.reset(mock_scheduler);
1013 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 1018 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
1014 make_scoped_ptr(new TestTimeSource(clock_))); 1019 make_scoped_ptr(new TestTimeSource(clock_.get())));
1015 scheduler_->GetSchedulerHelperForTesting() 1020 scheduler_->GetSchedulerHelperForTesting()
1016 ->GetTaskQueueManagerForTesting() 1021 ->GetTaskQueueManagerForTesting()
1017 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 1022 ->SetTimeSourceForTesting(
1023 make_scoped_ptr(new TestTimeSource(clock_.get())));
1018 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1024 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1019 1025
1020 EnsureUrgentPolicyUpdatePostedOnMainThread(); 1026 EnsureUrgentPolicyUpdatePostedOnMainThread();
1021 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1)); 1027 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1));
1022 1028
1023 RunUntilIdle(); 1029 RunUntilIdle();
1024 1030
1025 // We expect both the urgent and the delayed updates to run. 1031 // We expect both the urgent and the delayed updates to run.
1026 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 1032 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
1027 } 1033 }
1028 1034
1029 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByOneInputEvent) { 1035 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByOneInputEvent) {
1030 RendererSchedulerImplForTest* mock_scheduler = 1036 RendererSchedulerImplForTest* mock_scheduler =
1031 new RendererSchedulerImplForTest(nestable_task_runner_); 1037 new RendererSchedulerImplForTest(nestable_task_runner_);
1032 scheduler_.reset(mock_scheduler); 1038 scheduler_.reset(mock_scheduler);
1033 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 1039 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
1034 make_scoped_ptr(new TestTimeSource(clock_))); 1040 make_scoped_ptr(new TestTimeSource(clock_.get())));
1035 scheduler_->GetSchedulerHelperForTesting() 1041 scheduler_->GetSchedulerHelperForTesting()
1036 ->GetTaskQueueManagerForTesting() 1042 ->GetTaskQueueManagerForTesting()
1037 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 1043 ->SetTimeSourceForTesting(
1044 make_scoped_ptr(new TestTimeSource(clock_.get())));
1038 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1045 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1039 1046
1040 scheduler_->DidReceiveInputEventOnCompositorThread( 1047 scheduler_->DidReceiveInputEventOnCompositorThread(
1041 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1048 FakeInputEvent(blink::WebInputEvent::TouchStart));
1042 1049
1043 RunUntilIdle(); 1050 RunUntilIdle();
1044 1051
1045 // We expect an urgent policy update followed by a delayed one 100ms later. 1052 // We expect an urgent policy update followed by a delayed one 100ms later.
1046 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 1053 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
1047 } 1054 }
1048 1055
1049 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByTwoInputEvents) { 1056 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByTwoInputEvents) {
1050 RendererSchedulerImplForTest* mock_scheduler = 1057 RendererSchedulerImplForTest* mock_scheduler =
1051 new RendererSchedulerImplForTest(nestable_task_runner_); 1058 new RendererSchedulerImplForTest(nestable_task_runner_);
1052 scheduler_.reset(mock_scheduler); 1059 scheduler_.reset(mock_scheduler);
1053 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 1060 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
1054 make_scoped_ptr(new TestTimeSource(clock_))); 1061 make_scoped_ptr(new TestTimeSource(clock_.get())));
1055 scheduler_->GetSchedulerHelperForTesting() 1062 scheduler_->GetSchedulerHelperForTesting()
1056 ->GetTaskQueueManagerForTesting() 1063 ->GetTaskQueueManagerForTesting()
1057 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 1064 ->SetTimeSourceForTesting(
1065 make_scoped_ptr(new TestTimeSource(clock_.get())));
1058 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1066 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1059 1067
1060 scheduler_->DidReceiveInputEventOnCompositorThread( 1068 scheduler_->DidReceiveInputEventOnCompositorThread(
1061 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1069 FakeInputEvent(blink::WebInputEvent::TouchStart));
1062 scheduler_->DidReceiveInputEventOnCompositorThread( 1070 scheduler_->DidReceiveInputEventOnCompositorThread(
1063 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1071 FakeInputEvent(blink::WebInputEvent::TouchMove));
1064 1072
1065 RunUntilIdle(); 1073 RunUntilIdle();
1066 1074
1067 // We expect an urgent policy update followed by a delayed one 100ms later. 1075 // We expect an urgent policy update followed by a delayed one 100ms later.
1068 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 1076 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
1069 } 1077 }
1070 1078
1071 TEST_F(RendererSchedulerImplTest, EnsureUpdatePolicyNotTriggeredTooOften) { 1079 TEST_F(RendererSchedulerImplTest, EnsureUpdatePolicyNotTriggeredTooOften) {
1072 RendererSchedulerImplForTest* mock_scheduler = 1080 RendererSchedulerImplForTest* mock_scheduler =
1073 new RendererSchedulerImplForTest(nestable_task_runner_); 1081 new RendererSchedulerImplForTest(nestable_task_runner_);
1074 scheduler_.reset(mock_scheduler); 1082 scheduler_.reset(mock_scheduler);
1075 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( 1083 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting(
1076 make_scoped_ptr(new TestTimeSource(clock_))); 1084 make_scoped_ptr(new TestTimeSource(clock_.get())));
1077 scheduler_->GetSchedulerHelperForTesting() 1085 scheduler_->GetSchedulerHelperForTesting()
1078 ->GetTaskQueueManagerForTesting() 1086 ->GetTaskQueueManagerForTesting()
1079 ->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock_))); 1087 ->SetTimeSourceForTesting(
1088 make_scoped_ptr(new TestTimeSource(clock_.get())));
1080 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1089 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1081 1090
1082 scheduler_->DidReceiveInputEventOnCompositorThread( 1091 scheduler_->DidReceiveInputEventOnCompositorThread(
1083 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1092 FakeInputEvent(blink::WebInputEvent::TouchStart));
1084 scheduler_->DidReceiveInputEventOnCompositorThread( 1093 scheduler_->DidReceiveInputEventOnCompositorThread(
1085 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1094 FakeInputEvent(blink::WebInputEvent::TouchMove));
1086 1095
1087 // We expect the first call to IsHighPriorityWorkAnticipated to be called 1096 // We expect the first call to IsHighPriorityWorkAnticipated to be called
1088 // after recieving an input event (but before the UpdateTask was processed) to 1097 // after recieving an input event (but before the UpdateTask was processed) to
1089 // call UpdatePolicy. 1098 // call UpdatePolicy.
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 EnableIdleTasks(); 1171 EnableIdleTasks();
1163 RunUntilIdle(); 1172 RunUntilIdle();
1164 // Note we expect task 3 to run last because it's non-nestable. 1173 // Note we expect task 3 to run last because it's non-nestable.
1165 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"), 1174 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"),
1166 std::string("4"), std::string("5"), 1175 std::string("4"), std::string("5"),
1167 std::string("3"))); 1176 std::string("3")));
1168 } 1177 }
1169 1178
1170 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriod) { 1179 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriod) {
1171 base::TimeTicks expected_deadline = 1180 base::TimeTicks expected_deadline =
1172 clock_->Now() + maximum_idle_period_duration(); 1181 clock_->NowTicks() + maximum_idle_period_duration();
1173 base::TimeTicks deadline_in_task; 1182 base::TimeTicks deadline_in_task;
1174 int run_count = 0; 1183 int run_count = 0;
1175 1184
1176 idle_task_runner_->PostIdleTask( 1185 idle_task_runner_->PostIdleTask(
1177 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1186 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1178 1187
1179 RunUntilIdle(); 1188 RunUntilIdle();
1180 EXPECT_EQ(0, run_count); // Shouldn't run yet as no idle period. 1189 EXPECT_EQ(0, run_count); // Shouldn't run yet as no idle period.
1181 1190
1182 scheduler_->BeginFrameNotExpectedSoon(); 1191 scheduler_->BeginFrameNotExpectedSoon();
1183 RunUntilIdle(); 1192 RunUntilIdle();
1184 EXPECT_EQ(1, run_count); // Should have run in a long idle time. 1193 EXPECT_EQ(1, run_count); // Should have run in a long idle time.
1185 EXPECT_EQ(expected_deadline, deadline_in_task); 1194 EXPECT_EQ(expected_deadline, deadline_in_task);
1186 } 1195 }
1187 1196
1188 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) { 1197 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) {
1189 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(30); 1198 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(30);
1190 base::TimeTicks expected_deadline = clock_->Now() + pending_task_delay; 1199 base::TimeTicks expected_deadline = clock_->NowTicks() + pending_task_delay;
1191 base::TimeTicks deadline_in_task; 1200 base::TimeTicks deadline_in_task;
1192 int run_count = 0; 1201 int run_count = 0;
1193 1202
1194 idle_task_runner_->PostIdleTask( 1203 idle_task_runner_->PostIdleTask(
1195 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1204 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1196 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1205 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1197 pending_task_delay); 1206 pending_task_delay);
1198 1207
1199 scheduler_->BeginFrameNotExpectedSoon(); 1208 scheduler_->BeginFrameNotExpectedSoon();
1200 RunUntilIdle(); 1209 RunUntilIdle();
1201 EXPECT_EQ(1, run_count); // Should have run in a long idle time. 1210 EXPECT_EQ(1, run_count); // Should have run in a long idle time.
1202 EXPECT_EQ(expected_deadline, deadline_in_task); 1211 EXPECT_EQ(expected_deadline, deadline_in_task);
1203 } 1212 }
1204 1213
1205 TEST_F(RendererSchedulerImplTest, 1214 TEST_F(RendererSchedulerImplTest,
1206 TestLongIdlePeriodWithLatePendingDelayedTask) { 1215 TestLongIdlePeriodWithLatePendingDelayedTask) {
1207 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(10); 1216 base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(10);
1208 base::TimeTicks deadline_in_task; 1217 base::TimeTicks deadline_in_task;
1209 int run_count = 0; 1218 int run_count = 0;
1210 1219
1211 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), 1220 default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask),
1212 pending_task_delay); 1221 pending_task_delay);
1213 1222
1214 // Advance clock until after delayed task was meant to be run. 1223 // Advance clock until after delayed task was meant to be run.
1215 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(20)); 1224 clock_->Advance(base::TimeDelta::FromMilliseconds(20));
1216 1225
1217 // Post an idle task and BeginFrameNotExpectedSoon to initiate a long idle 1226 // Post an idle task and BeginFrameNotExpectedSoon to initiate a long idle
1218 // period. Since there is a late pending delayed task this shouldn't actually 1227 // period. Since there is a late pending delayed task this shouldn't actually
1219 // start an idle period. 1228 // start an idle period.
1220 idle_task_runner_->PostIdleTask( 1229 idle_task_runner_->PostIdleTask(
1221 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1230 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1222 scheduler_->BeginFrameNotExpectedSoon(); 1231 scheduler_->BeginFrameNotExpectedSoon();
1223 RunUntilIdle(); 1232 RunUntilIdle();
1224 EXPECT_EQ(0, run_count); 1233 EXPECT_EQ(0, run_count);
1225 1234
1226 // After the delayed task has been run we should trigger an idle period. 1235 // After the delayed task has been run we should trigger an idle period.
1227 clock_->AdvanceNow(maximum_idle_period_duration()); 1236 clock_->Advance(maximum_idle_period_duration());
1228 RunUntilIdle(); 1237 RunUntilIdle();
1229 EXPECT_EQ(1, run_count); 1238 EXPECT_EQ(1, run_count);
1230 } 1239 }
1231 1240
1232 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) { 1241 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) {
1233 int run_count = 0; 1242 int run_count = 0;
1234 1243
1235 max_idle_task_reposts = 3; 1244 max_idle_task_reposts = 3;
1236 idle_task_runner_->PostIdleTask( 1245 idle_task_runner_->PostIdleTask(
1237 FROM_HERE, 1246 FROM_HERE,
1238 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1247 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
1239 1248
1240 scheduler_->BeginFrameNotExpectedSoon(); 1249 scheduler_->BeginFrameNotExpectedSoon();
1241 RunUntilIdle(); 1250 RunUntilIdle();
1242 EXPECT_EQ(1, run_count); // Should only run once per idle period. 1251 EXPECT_EQ(1, run_count); // Should only run once per idle period.
1243 1252
1244 // Advance time to start of next long idle period and check task reposted task 1253 // Advance time to start of next long idle period and check task reposted task
1245 // gets run. 1254 // gets run.
1246 clock_->AdvanceNow(maximum_idle_period_duration()); 1255 clock_->Advance(maximum_idle_period_duration());
1247 RunUntilIdle(); 1256 RunUntilIdle();
1248 EXPECT_EQ(2, run_count); 1257 EXPECT_EQ(2, run_count);
1249 1258
1250 // Advance time to start of next long idle period then end idle period with a 1259 // Advance time to start of next long idle period then end idle period with a
1251 // new BeginMainFrame and check idle task doesn't run. 1260 // new BeginMainFrame and check idle task doesn't run.
1252 clock_->AdvanceNow(maximum_idle_period_duration()); 1261 clock_->Advance(maximum_idle_period_duration());
1253 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 1262 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1254 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 1263 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
1255 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 1264 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
1256 RunUntilIdle(); 1265 RunUntilIdle();
1257 EXPECT_EQ(2, run_count); 1266 EXPECT_EQ(2, run_count);
1258 } 1267 }
1259 1268
1260 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) { 1269 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) {
1261 base::TimeTicks deadline_in_task; 1270 base::TimeTicks deadline_in_task;
1262 int run_count = 0; 1271 int run_count = 0;
1263 1272
1264 // Start a long idle period and get the time it should end. 1273 // Start a long idle period and get the time it should end.
1265 scheduler_->BeginFrameNotExpectedSoon(); 1274 scheduler_->BeginFrameNotExpectedSoon();
1266 // The scheduler should not run the initiate_next_long_idle_period task if 1275 // The scheduler should not run the initiate_next_long_idle_period task if
1267 // there are no idle tasks and no other task woke up the scheduler, thus 1276 // there are no idle tasks and no other task woke up the scheduler, thus
1268 // the idle period deadline shouldn't update at the end of the current long 1277 // the idle period deadline shouldn't update at the end of the current long
1269 // idle period. 1278 // idle period.
1270 base::TimeTicks idle_period_deadline = 1279 base::TimeTicks idle_period_deadline =
1271 scheduler_->CurrentIdleTaskDeadlineForTesting(); 1280 scheduler_->CurrentIdleTaskDeadlineForTesting();
1272 clock_->AdvanceNow(maximum_idle_period_duration()); 1281 clock_->Advance(maximum_idle_period_duration());
1273 RunUntilIdle(); 1282 RunUntilIdle();
1274 1283
1275 base::TimeTicks new_idle_period_deadline = 1284 base::TimeTicks new_idle_period_deadline =
1276 scheduler_->CurrentIdleTaskDeadlineForTesting(); 1285 scheduler_->CurrentIdleTaskDeadlineForTesting();
1277 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); 1286 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
1278 1287
1279 // Posting a after-wakeup idle task also shouldn't wake the scheduler or 1288 // Posting a after-wakeup idle task also shouldn't wake the scheduler or
1280 // initiate the next long idle period. 1289 // initiate the next long idle period.
1281 idle_task_runner_->PostIdleTaskAfterWakeup( 1290 idle_task_runner_->PostIdleTaskAfterWakeup(
1282 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1291 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
(...skipping 20 matching lines...) Expand all
1303 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1312 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1304 1313
1305 // Observation of touchstart should defer the start of the long idle period. 1314 // Observation of touchstart should defer the start of the long idle period.
1306 scheduler_->DidReceiveInputEventOnCompositorThread( 1315 scheduler_->DidReceiveInputEventOnCompositorThread(
1307 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1316 FakeInputEvent(blink::WebInputEvent::TouchStart));
1308 scheduler_->BeginFrameNotExpectedSoon(); 1317 scheduler_->BeginFrameNotExpectedSoon();
1309 RunUntilIdle(); 1318 RunUntilIdle();
1310 EXPECT_EQ(0, run_count); 1319 EXPECT_EQ(0, run_count);
1311 1320
1312 // The long idle period should start after the touchstart policy has finished. 1321 // The long idle period should start after the touchstart policy has finished.
1313 clock_->AdvanceNow(priority_escalation_after_input_duration()); 1322 clock_->Advance(priority_escalation_after_input_duration());
1314 RunUntilIdle(); 1323 RunUntilIdle();
1315 EXPECT_EQ(1, run_count); 1324 EXPECT_EQ(1, run_count);
1316 } 1325 }
1317 1326
1318 void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler, 1327 void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler,
1319 bool* can_exceed_idle_deadline_out, 1328 bool* can_exceed_idle_deadline_out,
1320 int* run_count, 1329 int* run_count,
1321 base::TimeTicks deadline) { 1330 base::TimeTicks deadline) {
1322 *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired(); 1331 *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired();
1323 (*run_count)++; 1332 (*run_count)++;
(...skipping 24 matching lines...) Expand all
1348 FROM_HERE, 1357 FROM_HERE,
1349 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), 1358 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(),
1350 &can_exceed_idle_deadline, &run_count)); 1359 &can_exceed_idle_deadline, &run_count));
1351 scheduler_->BeginFrameNotExpectedSoon(); 1360 scheduler_->BeginFrameNotExpectedSoon();
1352 RunUntilIdle(); 1361 RunUntilIdle();
1353 EXPECT_EQ(2, run_count); 1362 EXPECT_EQ(2, run_count);
1354 EXPECT_FALSE(can_exceed_idle_deadline); 1363 EXPECT_FALSE(can_exceed_idle_deadline);
1355 1364
1356 // Next long idle period will be for the maximum time, so 1365 // Next long idle period will be for the maximum time, so
1357 // CanExceedIdleDeadlineIfRequired should return true. 1366 // CanExceedIdleDeadlineIfRequired should return true.
1358 clock_->AdvanceNow(maximum_idle_period_duration()); 1367 clock_->Advance(maximum_idle_period_duration());
1359 idle_task_runner_->PostIdleTask( 1368 idle_task_runner_->PostIdleTask(
1360 FROM_HERE, 1369 FROM_HERE,
1361 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), 1370 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(),
1362 &can_exceed_idle_deadline, &run_count)); 1371 &can_exceed_idle_deadline, &run_count));
1363 RunUntilIdle(); 1372 RunUntilIdle();
1364 EXPECT_EQ(3, run_count); 1373 EXPECT_EQ(3, run_count);
1365 EXPECT_TRUE(can_exceed_idle_deadline); 1374 EXPECT_TRUE(can_exceed_idle_deadline);
1366 1375
1367 // Next long idle period will be for the maximum time, so 1376 // Next long idle period will be for the maximum time, so
1368 // CanExceedIdleDeadlineIfRequired should return true. 1377 // CanExceedIdleDeadlineIfRequired should return true.
1369 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 1378 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1370 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 1379 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
1371 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 1380 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
1372 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); 1381 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired());
1373 } 1382 }
1374 1383
1375 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { 1384 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) {
1376 int run_count = 0; 1385 int run_count = 0;
1377 1386
1378 idle_task_runner_->PostIdleTask( 1387 idle_task_runner_->PostIdleTask(
1379 FROM_HERE, 1388 FROM_HERE,
1380 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1389 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
1381 1390
1382 // Renderer should start in visible state. 1391 // Renderer should start in visible state.
1383 RunUntilIdle(); 1392 RunUntilIdle();
1384 EXPECT_EQ(0, run_count); 1393 EXPECT_EQ(0, run_count);
1385 1394
1386 // When we hide the renderer it should start an idle period. 1395 // When we hide the renderer it should start an idle period.
1387 scheduler_->OnRendererHidden(); 1396 scheduler_->OnRendererHidden();
1388 RunUntilIdle(); 1397 RunUntilIdle();
1389 EXPECT_EQ(1, run_count); 1398 EXPECT_EQ(1, run_count);
1390 1399
1391 // Advance time to start of next long idle period and check task reposted task 1400 // Advance time to start of next long idle period and check task reposted task
1392 // gets run. 1401 // gets run.
1393 clock_->AdvanceNow(maximum_idle_period_duration()); 1402 clock_->Advance(maximum_idle_period_duration());
1394 RunUntilIdle(); 1403 RunUntilIdle();
1395 EXPECT_EQ(2, run_count); 1404 EXPECT_EQ(2, run_count);
1396 1405
1397 // Advance time by amount of time by the maximum amount of time we execute 1406 // Advance time by amount of time by the maximum amount of time we execute
1398 // idle tasks when hidden (plus some slack) - idle period should have ended. 1407 // idle tasks when hidden (plus some slack) - idle period should have ended.
1399 clock_->AdvanceNow(end_idle_when_hidden_delay() + 1408 clock_->Advance(end_idle_when_hidden_delay() +
1400 base::TimeDelta::FromMilliseconds(10)); 1409 base::TimeDelta::FromMilliseconds(10));
1401 RunUntilIdle(); 1410 RunUntilIdle();
1402 EXPECT_EQ(2, run_count); 1411 EXPECT_EQ(2, run_count);
1403 } 1412 }
1404 1413
1405 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) { 1414 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) {
1406 std::vector<std::string> run_order; 1415 std::vector<std::string> run_order;
1407 PostTestTasks(&run_order, "T1 T2"); 1416 PostTestTasks(&run_order, "T1 T2");
1408 RunUntilIdle(); 1417 RunUntilIdle();
1409 EXPECT_THAT(run_order, 1418 EXPECT_THAT(run_order,
1410 testing::ElementsAre(std::string("T1"), std::string("T2"))); 1419 testing::ElementsAre(std::string("T1"), std::string("T2")));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 1463
1455 TEST_F(RendererSchedulerImplTest, PolicyToString) { 1464 TEST_F(RendererSchedulerImplTest, PolicyToString) {
1456 CheckAllTaskQueueIdToString(); 1465 CheckAllTaskQueueIdToString();
1457 } 1466 }
1458 1467
1459 TEST_F(RendererSchedulerImplTest, InputStreamStateToString) { 1468 TEST_F(RendererSchedulerImplTest, InputStreamStateToString) {
1460 CheckAllInputStreamStateToString(); 1469 CheckAllInputStreamStateToString();
1461 } 1470 }
1462 1471
1463 } // namespace scheduler 1472 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698