| OLD | NEW |
| 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 "base/test/simple_test_tick_clock.h" |
| 9 #include "cc/output/begin_frame_args.h" | 9 #include "cc/output/begin_frame_args.h" |
| 10 #include "cc/test/ordered_simple_task_runner.h" | 10 #include "cc/test/ordered_simple_task_runner.h" |
| 11 #include "components/scheduler/child/scheduler_task_runner_delegate_for_test.h" | 11 #include "components/scheduler/child/nestable_task_runner_for_test.h" |
| 12 #include "components/scheduler/child/scheduler_task_runner_delegate_impl.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 { |
| 21 public: | 21 public: |
| 22 explicit FakeInputEvent(blink::WebInputEvent::Type event_type) | 22 explicit FakeInputEvent(blink::WebInputEvent::Type event_type) |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 }; // namespace | 141 }; // namespace |
| 142 | 142 |
| 143 class RendererSchedulerImplForTest : public RendererSchedulerImpl { | 143 class RendererSchedulerImplForTest : public RendererSchedulerImpl { |
| 144 public: | 144 public: |
| 145 using RendererSchedulerImpl::OnIdlePeriodEnded; | 145 using RendererSchedulerImpl::OnIdlePeriodEnded; |
| 146 using RendererSchedulerImpl::OnIdlePeriodStarted; | 146 using RendererSchedulerImpl::OnIdlePeriodStarted; |
| 147 using RendererSchedulerImpl::Policy; | 147 using RendererSchedulerImpl::Policy; |
| 148 using RendererSchedulerImpl::PolicyToString; | 148 using RendererSchedulerImpl::PolicyToString; |
| 149 | 149 |
| 150 RendererSchedulerImplForTest( | 150 RendererSchedulerImplForTest( |
| 151 scoped_refptr<SchedulerTaskRunnerDelegate> main_task_runner) | 151 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner) |
| 152 : RendererSchedulerImpl(main_task_runner), update_policy_count_(0) {} | 152 : RendererSchedulerImpl(main_task_runner), update_policy_count_(0) {} |
| 153 | 153 |
| 154 void UpdatePolicyLocked(UpdateType update_type) override { | 154 void UpdatePolicyLocked(UpdateType update_type) override { |
| 155 update_policy_count_++; | 155 update_policy_count_++; |
| 156 RendererSchedulerImpl::UpdatePolicyLocked(update_type); | 156 RendererSchedulerImpl::UpdatePolicyLocked(update_type); |
| 157 } | 157 } |
| 158 | 158 |
| 159 void EnsureUrgentPolicyUpdatePostedOnMainThread() { | 159 void EnsureUrgentPolicyUpdatePostedOnMainThread() { |
| 160 base::AutoLock lock(any_thread_lock_); | 160 base::AutoLock lock(any_thread_lock_); |
| 161 RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread( | 161 RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 190 | 190 |
| 191 RendererSchedulerImplTest(base::MessageLoop* message_loop) | 191 RendererSchedulerImplTest(base::MessageLoop* message_loop) |
| 192 : clock_(new base::SimpleTestTickClock()), message_loop_(message_loop) { | 192 : clock_(new base::SimpleTestTickClock()), message_loop_(message_loop) { |
| 193 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); | 193 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); |
| 194 } | 194 } |
| 195 | 195 |
| 196 ~RendererSchedulerImplTest() override {} | 196 ~RendererSchedulerImplTest() override {} |
| 197 | 197 |
| 198 void SetUp() override { | 198 void SetUp() override { |
| 199 if (message_loop_) { | 199 if (message_loop_) { |
| 200 main_task_runner_ = | 200 nestable_task_runner_ = |
| 201 SchedulerTaskRunnerDelegateImpl::Create(message_loop_.get()); | 201 SchedulerMessageLoopDelegate::Create(message_loop_.get()); |
| 202 } else { | 202 } else { |
| 203 mock_task_runner_ = make_scoped_refptr( | 203 mock_task_runner_ = make_scoped_refptr( |
| 204 new cc::OrderedSimpleTaskRunner(clock_.get(), false)); | 204 new cc::OrderedSimpleTaskRunner(clock_.get(), false)); |
| 205 main_task_runner_ = | 205 nestable_task_runner_ = |
| 206 SchedulerTaskRunnerDelegateForTest::Create(mock_task_runner_); | 206 NestableTaskRunnerForTest::Create(mock_task_runner_); |
| 207 } | 207 } |
| 208 Initialize( | 208 Initialize(make_scoped_ptr( |
| 209 make_scoped_ptr(new RendererSchedulerImplForTest(main_task_runner_))); | 209 new RendererSchedulerImplForTest(nestable_task_runner_))); |
| 210 } | 210 } |
| 211 | 211 |
| 212 void Initialize(scoped_ptr<RendererSchedulerImplForTest> scheduler) { | 212 void Initialize(scoped_ptr<RendererSchedulerImplForTest> scheduler) { |
| 213 scheduler_ = scheduler.Pass(); | 213 scheduler_ = scheduler.Pass(); |
| 214 default_task_runner_ = scheduler_->DefaultTaskRunner(); | 214 default_task_runner_ = scheduler_->DefaultTaskRunner(); |
| 215 compositor_task_runner_ = scheduler_->CompositorTaskRunner(); | 215 compositor_task_runner_ = scheduler_->CompositorTaskRunner(); |
| 216 loading_task_runner_ = scheduler_->LoadingTaskRunner(); | 216 loading_task_runner_ = scheduler_->LoadingTaskRunner(); |
| 217 idle_task_runner_ = scheduler_->IdleTaskRunner(); | 217 idle_task_runner_ = scheduler_->IdleTaskRunner(); |
| 218 timer_task_runner_ = scheduler_->TimerTaskRunner(); | 218 timer_task_runner_ = scheduler_->TimerTaskRunner(); |
| 219 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( | 219 scheduler_->GetSchedulerHelperForTesting()->SetTimeSourceForTesting( |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 RendererSchedulerImpl::Policy::FIRST_POLICY, | 345 RendererSchedulerImpl::Policy::FIRST_POLICY, |
| 346 RendererSchedulerImpl::Policy::POLICY_COUNT, | 346 RendererSchedulerImpl::Policy::POLICY_COUNT, |
| 347 &RendererSchedulerImpl::PolicyToString); | 347 &RendererSchedulerImpl::PolicyToString); |
| 348 } | 348 } |
| 349 | 349 |
| 350 scoped_ptr<base::SimpleTestTickClock> clock_; | 350 scoped_ptr<base::SimpleTestTickClock> clock_; |
| 351 // Only one of mock_task_runner_ or message_loop_ will be set. | 351 // Only one of mock_task_runner_ or message_loop_ will be set. |
| 352 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; | 352 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; |
| 353 scoped_ptr<base::MessageLoop> message_loop_; | 353 scoped_ptr<base::MessageLoop> message_loop_; |
| 354 | 354 |
| 355 scoped_refptr<SchedulerTaskRunnerDelegate> main_task_runner_; | 355 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_; |
| 356 scoped_ptr<RendererSchedulerImplForTest> scheduler_; | 356 scoped_ptr<RendererSchedulerImplForTest> scheduler_; |
| 357 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; | 357 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; |
| 358 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; | 358 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; |
| 359 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; | 359 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; |
| 360 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; | 360 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; |
| 361 scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner_; | 361 scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner_; |
| 362 | 362 |
| 363 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); | 363 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); |
| 364 }; | 364 }; |
| 365 | 365 |
| (...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1197 RunUntilIdle(); | 1197 RunUntilIdle(); |
| 1198 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); | 1198 EXPECT_EQ(Policy::NORMAL, CurrentPolicy()); |
| 1199 } | 1199 } |
| 1200 | 1200 |
| 1201 class RendererSchedulerImplWithMockSchedulerTest | 1201 class RendererSchedulerImplWithMockSchedulerTest |
| 1202 : public RendererSchedulerImplTest { | 1202 : public RendererSchedulerImplTest { |
| 1203 public: | 1203 public: |
| 1204 void SetUp() override { | 1204 void SetUp() override { |
| 1205 mock_task_runner_ = make_scoped_refptr( | 1205 mock_task_runner_ = make_scoped_refptr( |
| 1206 new cc::OrderedSimpleTaskRunner(clock_.get(), false)); | 1206 new cc::OrderedSimpleTaskRunner(clock_.get(), false)); |
| 1207 main_task_runner_ = | 1207 nestable_task_runner_ = |
| 1208 SchedulerTaskRunnerDelegateForTest::Create(mock_task_runner_); | 1208 NestableTaskRunnerForTest::Create(mock_task_runner_); |
| 1209 mock_scheduler_ = new RendererSchedulerImplForTest(main_task_runner_); | 1209 mock_scheduler_ = new RendererSchedulerImplForTest(nestable_task_runner_); |
| 1210 Initialize(make_scoped_ptr(mock_scheduler_)); | 1210 Initialize(make_scoped_ptr(mock_scheduler_)); |
| 1211 } | 1211 } |
| 1212 | 1212 |
| 1213 protected: | 1213 protected: |
| 1214 RendererSchedulerImplForTest* mock_scheduler_; | 1214 RendererSchedulerImplForTest* mock_scheduler_; |
| 1215 }; | 1215 }; |
| 1216 | 1216 |
| 1217 TEST_F(RendererSchedulerImplWithMockSchedulerTest, | 1217 TEST_F(RendererSchedulerImplWithMockSchedulerTest, |
| 1218 OnlyOnePendingUrgentPolicyUpdatey) { | 1218 OnlyOnePendingUrgentPolicyUpdatey) { |
| 1219 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); | 1219 mock_scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1789 | 1789 |
| 1790 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { | 1790 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { |
| 1791 scheduler_->Shutdown(); | 1791 scheduler_->Shutdown(); |
| 1792 std::vector<std::string> run_order; | 1792 std::vector<std::string> run_order; |
| 1793 PostTestTasks(&run_order, "D1 C1"); | 1793 PostTestTasks(&run_order, "D1 C1"); |
| 1794 RunUntilIdle(); | 1794 RunUntilIdle(); |
| 1795 EXPECT_TRUE(run_order.empty()); | 1795 EXPECT_TRUE(run_order.empty()); |
| 1796 } | 1796 } |
| 1797 | 1797 |
| 1798 } // namespace scheduler | 1798 } // namespace scheduler |
| OLD | NEW |