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

Side by Side Diff: components/scheduler/renderer/web_view_scheduler_impl_unittest.cc

Issue 1727103002: Revert of Per WebViewScheduler virtual time (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/web_view_scheduler_impl.h" 5 #include "components/scheduler/renderer/web_view_scheduler_impl.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "cc/test/ordered_simple_task_runner.h" 10 #include "cc/test/ordered_simple_task_runner.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 1.0); 151 1.0);
152 152
153 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); 153 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
154 EXPECT_EQ(1000, run_count1); 154 EXPECT_EQ(1000, run_count1);
155 EXPECT_EQ(1, run_count2); 155 EXPECT_EQ(1, run_count2);
156 } 156 }
157 157
158 namespace { 158 namespace {
159 class VirtualTimeRecorderTask : public blink::WebTaskRunner::Task { 159 class VirtualTimeRecorderTask : public blink::WebTaskRunner::Task {
160 public: 160 public:
161 VirtualTimeRecorderTask(base::SimpleTestTickClock* clock, 161 VirtualTimeRecorderTask(RendererSchedulerImpl* scheduler,
162 blink::WebTaskRunner* web_task_runner,
163 std::vector<base::TimeTicks>* out_real_times, 162 std::vector<base::TimeTicks>* out_real_times,
164 std::vector<size_t>* out_virtual_times_ms) 163 std::vector<size_t>* out_virtual_times_ms)
165 : clock_(clock), 164 : scheduler_(scheduler),
166 web_task_runner_(web_task_runner),
167 out_real_times_(out_real_times), 165 out_real_times_(out_real_times),
168 out_virtual_times_ms_(out_virtual_times_ms) {} 166 out_virtual_times_ms_(out_virtual_times_ms) {}
169 167
170 ~VirtualTimeRecorderTask() override {} 168 ~VirtualTimeRecorderTask() override {}
171 169
172 void run() override { 170 void run() override {
173 out_real_times_->push_back(clock_->NowTicks()); 171 out_real_times_->push_back(scheduler_->tick_clock()->NowTicks());
174 out_virtual_times_ms_->push_back( 172 out_virtual_times_ms_->push_back(
175 web_task_runner_->monotonicallyIncreasingVirtualTimeSeconds() * 1000.0); 173 scheduler_->MonotonicallyIncreasingVirtualTimeSeconds() * 1000.0);
176 } 174 }
177 175
178 private: 176 private:
179 base::SimpleTestTickClock* clock_; // NOT OWNED 177 RendererSchedulerImpl* scheduler_; // NOT OWNED
180 blink::WebTaskRunner* web_task_runner_; // NOT OWNED
181 std::vector<base::TimeTicks>* out_real_times_; // NOT OWNED 178 std::vector<base::TimeTicks>* out_real_times_; // NOT OWNED
182 std::vector<size_t>* out_virtual_times_ms_; // NOT OWNED 179 std::vector<size_t>* out_virtual_times_ms_; // NOT OWNED
183 }; 180 };
184 } 181 }
185 182
186 TEST_F(WebViewSchedulerImplTest, VirtualTime_TimerFastForwarding) { 183 TEST_F(WebViewSchedulerImplTest, VirtualTime_TimerFastForwarding) {
187 std::vector<base::TimeTicks> real_times; 184 std::vector<base::TimeTicks> real_times;
188 std::vector<size_t> virtual_times_ms; 185 std::vector<size_t> virtual_times_ms;
189 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); 186 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
190 size_t initial_virtual_time_ms = 187 size_t initial_virtual_time_ms =
191 web_frame_scheduler_->timerTaskRunner() 188 scheduler_->MonotonicallyIncreasingVirtualTimeSeconds() * 1000.0;
192 ->monotonicallyIncreasingVirtualTimeSeconds() *
193 1000.0;
194 189
195 web_view_scheduler_->enableVirtualTime(); 190 web_view_scheduler_->enableVirtualTime();
196 191
197 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( 192 web_frame_scheduler_->timerTaskRunner()->postDelayedTask(
198 BLINK_FROM_HERE, 193 BLINK_FROM_HERE,
199 new VirtualTimeRecorderTask(clock_.get(), 194 new VirtualTimeRecorderTask(scheduler_.get(), &real_times,
200 web_frame_scheduler_->timerTaskRunner(), 195 &virtual_times_ms),
201 &real_times, &virtual_times_ms),
202 2.0); 196 2.0);
203 197
204 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( 198 web_frame_scheduler_->timerTaskRunner()->postDelayedTask(
205 BLINK_FROM_HERE, 199 BLINK_FROM_HERE,
206 new VirtualTimeRecorderTask(clock_.get(), 200 new VirtualTimeRecorderTask(scheduler_.get(), &real_times,
207 web_frame_scheduler_->timerTaskRunner(), 201 &virtual_times_ms),
208 &real_times, &virtual_times_ms),
209 20.0); 202 20.0);
210 203
211 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( 204 web_frame_scheduler_->timerTaskRunner()->postDelayedTask(
212 BLINK_FROM_HERE, 205 BLINK_FROM_HERE,
213 new VirtualTimeRecorderTask(clock_.get(), 206 new VirtualTimeRecorderTask(scheduler_.get(), &real_times,
214 web_frame_scheduler_->timerTaskRunner(), 207 &virtual_times_ms),
215 &real_times, &virtual_times_ms),
216 200.0); 208 200.0);
217 209
218 mock_task_runner_->RunUntilIdle(); 210 mock_task_runner_->RunUntilIdle();
219 211
220 EXPECT_THAT(real_times, ElementsAre(initial_real_time, 212 EXPECT_THAT(real_times, ElementsAre(initial_real_time,
221 initial_real_time, initial_real_time)); 213 initial_real_time, initial_real_time));
222 EXPECT_THAT(virtual_times_ms, 214 EXPECT_THAT(virtual_times_ms,
223 ElementsAre(initial_virtual_time_ms + 2, 215 ElementsAre(initial_virtual_time_ms + 2,
224 initial_virtual_time_ms + 20, 216 initial_virtual_time_ms + 20,
225 initial_virtual_time_ms + 200)); 217 initial_virtual_time_ms + 200));
226 } 218 }
227 219
228 TEST_F(WebViewSchedulerImplTest, VirtualTime_LoadingTaskFastForwarding) { 220 TEST_F(WebViewSchedulerImplTest, VirtualTime_LoadingTaskFastForwarding) {
229 std::vector<base::TimeTicks> real_times; 221 std::vector<base::TimeTicks> real_times;
230 std::vector<size_t> virtual_times_ms; 222 std::vector<size_t> virtual_times_ms;
231 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); 223 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
232 size_t initial_virtual_time_ms = 224 size_t initial_virtual_time_ms =
233 web_frame_scheduler_->timerTaskRunner() 225 scheduler_->MonotonicallyIncreasingVirtualTimeSeconds() * 1000.0;
234 ->monotonicallyIncreasingVirtualTimeSeconds() *
235 1000.0;
236 226
237 web_view_scheduler_->enableVirtualTime(); 227 web_view_scheduler_->enableVirtualTime();
238 228
239 web_frame_scheduler_->loadingTaskRunner()->postDelayedTask( 229 web_frame_scheduler_->loadingTaskRunner()->postDelayedTask(
240 BLINK_FROM_HERE, 230 BLINK_FROM_HERE,
241 new VirtualTimeRecorderTask(clock_.get(), 231 new VirtualTimeRecorderTask(scheduler_.get(), &real_times,
242 web_frame_scheduler_->loadingTaskRunner(), 232 &virtual_times_ms),
243 &real_times, &virtual_times_ms),
244 2.0); 233 2.0);
245 234
246 web_frame_scheduler_->loadingTaskRunner()->postDelayedTask( 235 web_frame_scheduler_->loadingTaskRunner()->postDelayedTask(
247 BLINK_FROM_HERE, 236 BLINK_FROM_HERE,
248 new VirtualTimeRecorderTask(clock_.get(), 237 new VirtualTimeRecorderTask(scheduler_.get(), &real_times,
249 web_frame_scheduler_->loadingTaskRunner(), 238 &virtual_times_ms),
250 &real_times, &virtual_times_ms),
251 20.0); 239 20.0);
252 240
253 web_frame_scheduler_->loadingTaskRunner()->postDelayedTask( 241 web_frame_scheduler_->loadingTaskRunner()->postDelayedTask(
254 BLINK_FROM_HERE, 242 BLINK_FROM_HERE,
255 new VirtualTimeRecorderTask(clock_.get(), 243 new VirtualTimeRecorderTask(scheduler_.get(), &real_times,
256 web_frame_scheduler_->loadingTaskRunner(), 244 &virtual_times_ms),
257 &real_times, &virtual_times_ms),
258 200.0); 245 200.0);
259 246
260 mock_task_runner_->RunUntilIdle(); 247 mock_task_runner_->RunUntilIdle();
261 248
262 EXPECT_THAT(real_times, ElementsAre(initial_real_time, 249 EXPECT_THAT(real_times, ElementsAre(initial_real_time,
263 initial_real_time, initial_real_time)); 250 initial_real_time, initial_real_time));
264 EXPECT_THAT(virtual_times_ms, 251 EXPECT_THAT(virtual_times_ms,
265 ElementsAre(initial_virtual_time_ms + 2, 252 ElementsAre(initial_virtual_time_ms + 2,
266 initial_virtual_time_ms + 20, 253 initial_virtual_time_ms + 20,
267 initial_virtual_time_ms + 200)); 254 initial_virtual_time_ms + 200));
268 } 255 }
269 256
270 TEST_F(WebViewSchedulerImplTest, 257 TEST_F(WebViewSchedulerImplTest,
271 RepeatingTimer_PageInBackground_MeansNothingForVirtualTime) { 258 RepeatingTimer_PageInBackground_MeansNothingForFirtualTime) {
272 web_view_scheduler_->enableVirtualTime(); 259 web_view_scheduler_->enableVirtualTime();
273 web_view_scheduler_->setPageVisible(false); 260 web_view_scheduler_->setPageVisible(false);
274 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); 261 base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks();
275 262
276 int run_count = 0; 263 int run_count = 0;
277 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( 264 web_frame_scheduler_->timerTaskRunner()->postDelayedTask(
278 BLINK_FROM_HERE, 265 BLINK_FROM_HERE,
279 new RepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), 266 new RepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count),
280 1.0); 267 1.0);
281 268
282 mock_task_runner_->RunTasksWhile(mock_task_runner_->TaskRunCountBelow(2000)); 269 mock_task_runner_->RunTasksWhile(mock_task_runner_->TaskRunCountBelow(2000));
283 // Virtual time means page visibility is ignored.
284 EXPECT_EQ(1999, run_count); 270 EXPECT_EQ(1999, run_count);
285 271
286 // The global tick clock has not moved, yet we ran a large number of "delayed" 272 // The global tick clock has not moved, yet we ran a large number of "delayed"
287 // tasks despite calling setPageVisible(false). 273 // tasks despite calling setPageVisible(false).
288 EXPECT_EQ(initial_real_time, scheduler_->tick_clock()->NowTicks()); 274 EXPECT_EQ(initial_real_time, scheduler_->tick_clock()->NowTicks());
289 } 275 }
290 276
291 namespace { 277 namespace {
292 class RunOrderTask : public blink::WebTaskRunner::Task { 278 class RunOrderTask : public blink::WebTaskRunner::Task {
293 public: 279 public:
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 // it will prevent further tasks from running (i.e. the RepeatingTask) by 478 // it will prevent further tasks from running (i.e. the RepeatingTask) by
493 // deleting the WebFrameScheduler. 479 // deleting the WebFrameScheduler.
494 timer_task_runner->postDelayedTask(BLINK_FROM_HERE, delete_frame_task, 480 timer_task_runner->postDelayedTask(BLINK_FROM_HERE, delete_frame_task,
495 9990.0); 481 9990.0);
496 482
497 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100)); 483 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100));
498 EXPECT_EQ(10, run_count); 484 EXPECT_EQ(10, run_count);
499 } 485 }
500 486
501 } // namespace scheduler 487 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/renderer/web_view_scheduler_impl.h ('k') | content/test/fake_renderer_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698