OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "platform/scheduler/renderer/web_frame_scheduler_impl.h" | 5 #include "platform/scheduler/renderer/web_frame_scheduler_impl.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(true); | 99 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(true); |
100 web_view_scheduler_->setPageVisible(false); | 100 web_view_scheduler_->setPageVisible(false); |
101 | 101 |
102 int run_count = 0; | 102 int run_count = 0; |
103 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 103 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
104 BLINK_FROM_HERE, | 104 BLINK_FROM_HERE, |
105 makeRepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), | 105 makeRepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), |
106 1.0); | 106 1.0); |
107 | 107 |
108 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); | 108 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); |
| 109 EXPECT_EQ(1000, run_count); |
| 110 |
| 111 // The task queue isn't throttled at all until it's been in the background for |
| 112 // a 10 second grace period. |
| 113 clock_->Advance(base::TimeDelta::FromSeconds(10)); |
| 114 |
| 115 run_count = 0; |
| 116 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); |
109 EXPECT_EQ(1, run_count); | 117 EXPECT_EQ(1, run_count); |
110 } | 118 } |
111 | 119 |
112 TEST_F(WebFrameSchedulerImplTest, RepeatingTimer_FrameHidden_SameOrigin) { | 120 TEST_F(WebFrameSchedulerImplTest, RepeatingTimer_FrameHidden_SameOrigin) { |
113 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(true); | 121 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(true); |
114 web_frame_scheduler_->setFrameVisible(false); | 122 web_frame_scheduler_->setFrameVisible(false); |
115 | 123 |
116 int run_count = 0; | 124 int run_count = 0; |
117 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 125 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
118 BLINK_FROM_HERE, | 126 BLINK_FROM_HERE, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(false); | 165 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(false); |
158 web_view_scheduler_->setPageVisible(false); | 166 web_view_scheduler_->setPageVisible(false); |
159 | 167 |
160 int run_count = 0; | 168 int run_count = 0; |
161 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 169 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
162 BLINK_FROM_HERE, | 170 BLINK_FROM_HERE, |
163 makeRepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), | 171 makeRepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), |
164 1.0); | 172 1.0); |
165 | 173 |
166 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); | 174 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); |
| 175 EXPECT_EQ(1000, run_count); |
| 176 |
| 177 // The task queue isn't throttled at all until it's been in the background for |
| 178 // a 10 second grace period. |
| 179 clock_->Advance(base::TimeDelta::FromSeconds(10)); |
| 180 |
| 181 run_count = 0; |
| 182 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); |
167 EXPECT_EQ(1, run_count); | 183 EXPECT_EQ(1, run_count); |
168 } | 184 } |
169 | 185 |
170 TEST_F(WebFrameSchedulerImplTest, RepeatingTimer_FrameHidden_CrossOrigin_Throttl
ingDisabled) { | 186 TEST_F(WebFrameSchedulerImplTest, |
| 187 RepeatingTimer_FrameHidden_CrossOrigin_ThrottlingDisabled) { |
171 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(false); | 188 RuntimeEnabledFeatures::setTimerThrottlingForHiddenFramesEnabled(false); |
172 web_frame_scheduler_->setFrameVisible(false); | 189 web_frame_scheduler_->setFrameVisible(false); |
173 web_frame_scheduler_->setCrossOrigin(true); | 190 web_frame_scheduler_->setCrossOrigin(true); |
174 | 191 |
175 int run_count = 0; | 192 int run_count = 0; |
176 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 193 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
177 BLINK_FROM_HERE, | 194 BLINK_FROM_HERE, |
178 makeRepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), | 195 makeRepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), |
179 1.0); | 196 1.0); |
180 | 197 |
(...skipping 18 matching lines...) Expand all Loading... |
199 | 216 |
200 web_frame_scheduler_->setSuspended(false); | 217 web_frame_scheduler_->setSuspended(false); |
201 | 218 |
202 EXPECT_EQ(1, counter); | 219 EXPECT_EQ(1, counter); |
203 mock_task_runner_->RunUntilIdle(); | 220 mock_task_runner_->RunUntilIdle(); |
204 EXPECT_EQ(3, counter); | 221 EXPECT_EQ(3, counter); |
205 } | 222 } |
206 | 223 |
207 } // namespace scheduler | 224 } // namespace scheduler |
208 } // namespace blink | 225 } // namespace blink |
OLD | NEW |