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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 static base::TimeDelta end_idle_when_hidden_delay() { | 524 static base::TimeDelta end_idle_when_hidden_delay() { |
525 return base::TimeDelta::FromMilliseconds( | 525 return base::TimeDelta::FromMilliseconds( |
526 RendererSchedulerImpl::kEndIdleWhenHiddenDelayMillis); | 526 RendererSchedulerImpl::kEndIdleWhenHiddenDelayMillis); |
527 } | 527 } |
528 | 528 |
529 static base::TimeDelta idle_period_starvation_threshold() { | 529 static base::TimeDelta idle_period_starvation_threshold() { |
530 return base::TimeDelta::FromMilliseconds( | 530 return base::TimeDelta::FromMilliseconds( |
531 RendererSchedulerImpl::kIdlePeriodStarvationThresholdMillis); | 531 RendererSchedulerImpl::kIdlePeriodStarvationThresholdMillis); |
532 } | 532 } |
533 | 533 |
534 static base::TimeDelta suspend_timers_when_backgrounded_delay() { | |
535 return base::TimeDelta::FromMilliseconds( | |
536 RendererSchedulerImpl::kSuspendTimersWhenBackgroundedDelayMillis); | |
537 } | |
538 | |
539 static base::TimeDelta rails_response_time() { | 534 static base::TimeDelta rails_response_time() { |
540 return base::TimeDelta::FromMilliseconds( | 535 return base::TimeDelta::FromMilliseconds( |
541 RendererSchedulerImpl::kRailsResponseTimeMillis); | 536 RendererSchedulerImpl::kRailsResponseTimeMillis); |
542 } | 537 } |
543 | 538 |
544 template <typename E> | 539 template <typename E> |
545 static void CallForEachEnumValue(E first, | 540 static void CallForEachEnumValue(E first, |
546 E last, | 541 E last, |
547 const char* (*function)(E)) { | 542 const char* (*function)(E)) { |
548 for (E val = first; val < last; | 543 for (E val = first; val < last; |
(...skipping 1534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2083 } | 2078 } |
2084 | 2079 |
2085 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { | 2080 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { |
2086 scheduler_->Shutdown(); | 2081 scheduler_->Shutdown(); |
2087 std::vector<std::string> run_order; | 2082 std::vector<std::string> run_order; |
2088 PostTestTasks(&run_order, "D1 C1"); | 2083 PostTestTasks(&run_order, "D1 C1"); |
2089 RunUntilIdle(); | 2084 RunUntilIdle(); |
2090 EXPECT_TRUE(run_order.empty()); | 2085 EXPECT_TRUE(run_order.empty()); |
2091 } | 2086 } |
2092 | 2087 |
2093 TEST_F(RendererSchedulerImplTest, TestRendererBackgroundedTimerSuspension) { | |
2094 scheduler_->SetTimerQueueSuspensionWhenBackgroundedEnabled(true); | |
2095 | |
2096 std::vector<std::string> run_order; | |
2097 PostTestTasks(&run_order, "T1 T2"); | |
2098 | |
2099 // The background signal will not immediately suspend the timer queue. | |
2100 scheduler_->OnRendererBackgrounded(); | |
2101 RunUntilIdle(); | |
2102 EXPECT_THAT(run_order, | |
2103 testing::ElementsAre(std::string("T1"), std::string("T2"))); | |
2104 | |
2105 run_order.clear(); | |
2106 PostTestTasks(&run_order, "T3"); | |
2107 RunUntilIdle(); | |
2108 EXPECT_THAT(run_order, testing::ElementsAre(std::string("T3"))); | |
2109 | |
2110 // Advance the time until after the scheduled timer queue suspension. | |
2111 run_order.clear(); | |
2112 clock_->Advance(suspend_timers_when_backgrounded_delay() + | |
2113 base::TimeDelta::FromMilliseconds(10)); | |
2114 RunUntilIdle(); | |
2115 ASSERT_TRUE(run_order.empty()); | |
2116 | |
2117 // Timer tasks should be suspended until the foregrounded signal. | |
2118 PostTestTasks(&run_order, "T4 T5"); | |
2119 RunUntilIdle(); | |
2120 EXPECT_TRUE(run_order.empty()); | |
2121 | |
2122 scheduler_->OnRendererForegrounded(); | |
2123 RunUntilIdle(); | |
2124 EXPECT_THAT(run_order, | |
2125 testing::ElementsAre(std::string("T4"), std::string("T5"))); | |
2126 | |
2127 // Subsequent timer tasks should fire as usual. | |
2128 run_order.clear(); | |
2129 PostTestTasks(&run_order, "T6"); | |
2130 RunUntilIdle(); | |
2131 EXPECT_THAT(run_order, testing::ElementsAre(std::string("T6"))); | |
2132 } | |
2133 | |
2134 TEST_F(RendererSchedulerImplTest, | 2088 TEST_F(RendererSchedulerImplTest, |
2135 ExpensiveLoadingTasksNotBlockedTillFirstBeginMainFrame) { | 2089 ExpensiveLoadingTasksNotBlockedTillFirstBeginMainFrame) { |
2136 std::vector<std::string> run_order; | 2090 std::vector<std::string> run_order; |
2137 | 2091 |
2138 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2092 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
2139 SimulateExpensiveTasks(loading_task_runner_); | 2093 SimulateExpensiveTasks(loading_task_runner_); |
2140 ForceTouchStartToBeExpectedSoon(); | 2094 ForceTouchStartToBeExpectedSoon(); |
2141 PostTestTasks(&run_order, "L1 D1"); | 2095 PostTestTasks(&run_order, "L1 D1"); |
2142 RunUntilIdle(); | 2096 RunUntilIdle(); |
2143 | 2097 |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2800 | 2754 |
2801 // Make sure TouchStart causes a policy change. | 2755 // Make sure TouchStart causes a policy change. |
2802 scheduler_->DidHandleInputEventOnCompositorThread( | 2756 scheduler_->DidHandleInputEventOnCompositorThread( |
2803 FakeInputEvent(blink::WebInputEvent::TouchStart), | 2757 FakeInputEvent(blink::WebInputEvent::TouchStart), |
2804 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); | 2758 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); |
2805 EXPECT_EQ(RendererScheduler::UseCase::TOUCHSTART, | 2759 EXPECT_EQ(RendererScheduler::UseCase::TOUCHSTART, |
2806 ForceUpdatePolicyAndGetCurrentUseCase()); | 2760 ForceUpdatePolicyAndGetCurrentUseCase()); |
2807 } | 2761 } |
2808 | 2762 |
2809 } // namespace scheduler | 2763 } // namespace scheduler |
OLD | NEW |