| 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 2290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2301 | 2301 |
| 2302 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); | 2302 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); |
| 2303 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2303 EXPECT_TRUE(HaveSeenABeginMainframe()); |
| 2304 EXPECT_FALSE(LoadingTasksSeemExpensive()); | 2304 EXPECT_FALSE(LoadingTasksSeemExpensive()); |
| 2305 EXPECT_TRUE(TimerTasksSeemExpensive()); | 2305 EXPECT_TRUE(TimerTasksSeemExpensive()); |
| 2306 EXPECT_TRUE(TouchStartExpectedSoon()); | 2306 EXPECT_TRUE(TouchStartExpectedSoon()); |
| 2307 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); | 2307 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); |
| 2308 } | 2308 } |
| 2309 | 2309 |
| 2310 TEST_F(RendererSchedulerImplTest, | 2310 TEST_F(RendererSchedulerImplTest, |
| 2311 ExpensiveLoadingTasksNotBlockedIfNavigationExpected) { | 2311 ExpensiveLoadingTasksBlockedIfChildFrameNavigationExpected) { |
| 2312 std::vector<std::string> run_order; | 2312 std::vector<std::string> run_order; |
| 2313 | 2313 |
| 2314 DoMainFrame(); | 2314 DoMainFrame(); |
| 2315 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2315 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2316 SimulateExpensiveTasks(loading_task_runner_); | 2316 SimulateExpensiveTasks(loading_task_runner_); |
| 2317 ForceTouchStartToBeExpectedSoon(); | 2317 ForceTouchStartToBeExpectedSoon(); |
| 2318 scheduler_->AddPendingNavigation(); | 2318 scheduler_->AddPendingNavigation(false); // A child frame is navigating. |
| 2319 | 2319 |
| 2320 PostTestTasks(&run_order, "L1 D1"); | 2320 PostTestTasks(&run_order, "L1 D1"); |
| 2321 RunUntilIdle(); | 2321 RunUntilIdle(); |
| 2322 |
| 2323 // The expensive loading task gets blocked. |
| 2324 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); |
| 2325 } |
| 2326 |
| 2327 TEST_F(RendererSchedulerImplTest, |
| 2328 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected) { |
| 2329 std::vector<std::string> run_order; |
| 2330 |
| 2331 DoMainFrame(); |
| 2332 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2333 SimulateExpensiveTasks(loading_task_runner_); |
| 2334 ForceTouchStartToBeExpectedSoon(); |
| 2335 scheduler_->AddPendingNavigation(true); |
| 2336 |
| 2337 PostTestTasks(&run_order, "L1 D1"); |
| 2338 RunUntilIdle(); |
| 2322 | 2339 |
| 2323 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); | 2340 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); |
| 2324 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2341 EXPECT_TRUE(HaveSeenABeginMainframe()); |
| 2325 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2342 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
| 2326 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2343 EXPECT_FALSE(TimerTasksSeemExpensive()); |
| 2327 EXPECT_TRUE(TouchStartExpectedSoon()); | 2344 EXPECT_TRUE(TouchStartExpectedSoon()); |
| 2328 EXPECT_EQ(1, NavigationTaskExpectedCount()); | 2345 EXPECT_EQ(1, NavigationTaskExpectedCount()); |
| 2329 EXPECT_THAT(run_order, | 2346 EXPECT_THAT(run_order, |
| 2330 testing::ElementsAre(std::string("L1"), std::string("D1"))); | 2347 testing::ElementsAre(std::string("L1"), std::string("D1"))); |
| 2331 | 2348 |
| 2332 // After the nagigation has been cancelled, the expensive loading tasks should | 2349 // After the nagigation has been cancelled, the expensive loading tasks should |
| 2333 // get blocked. | 2350 // get blocked. |
| 2334 scheduler_->RemovePendingNavigation(); | 2351 scheduler_->RemovePendingNavigation(true); |
| 2335 run_order.clear(); | 2352 run_order.clear(); |
| 2336 | 2353 |
| 2337 PostTestTasks(&run_order, "L1 D1"); | 2354 PostTestTasks(&run_order, "L1 D1"); |
| 2338 RunUntilIdle(); | 2355 RunUntilIdle(); |
| 2339 | 2356 |
| 2340 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); | 2357 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); |
| 2341 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2358 EXPECT_TRUE(HaveSeenABeginMainframe()); |
| 2342 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2359 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
| 2343 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2360 EXPECT_FALSE(TimerTasksSeemExpensive()); |
| 2344 EXPECT_TRUE(TouchStartExpectedSoon()); | 2361 EXPECT_TRUE(TouchStartExpectedSoon()); |
| 2345 EXPECT_EQ(0, NavigationTaskExpectedCount()); | 2362 EXPECT_EQ(0, NavigationTaskExpectedCount()); |
| 2346 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); | 2363 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); |
| 2347 } | 2364 } |
| 2348 | 2365 |
| 2349 TEST_F( | 2366 TEST_F( |
| 2350 RendererSchedulerImplTest, | 2367 RendererSchedulerImplTest, |
| 2351 ExpensiveLoadingTasksNotBlockedIfNavigationExpected_MultipleNavigations) { | 2368 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected_Multiple) { |
| 2352 std::vector<std::string> run_order; | 2369 std::vector<std::string> run_order; |
| 2353 | 2370 |
| 2354 DoMainFrame(); | 2371 DoMainFrame(); |
| 2355 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2372 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2356 SimulateExpensiveTasks(loading_task_runner_); | 2373 SimulateExpensiveTasks(loading_task_runner_); |
| 2357 ForceTouchStartToBeExpectedSoon(); | 2374 ForceTouchStartToBeExpectedSoon(); |
| 2358 scheduler_->AddPendingNavigation(); | 2375 scheduler_->AddPendingNavigation(true); |
| 2359 scheduler_->AddPendingNavigation(); | 2376 scheduler_->AddPendingNavigation(true); |
| 2360 | 2377 |
| 2361 PostTestTasks(&run_order, "L1 D1"); | 2378 PostTestTasks(&run_order, "L1 D1"); |
| 2362 RunUntilIdle(); | 2379 RunUntilIdle(); |
| 2363 | 2380 |
| 2364 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); | 2381 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); |
| 2365 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2382 EXPECT_TRUE(HaveSeenABeginMainframe()); |
| 2366 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2383 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
| 2367 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2384 EXPECT_FALSE(TimerTasksSeemExpensive()); |
| 2368 EXPECT_TRUE(TouchStartExpectedSoon()); | 2385 EXPECT_TRUE(TouchStartExpectedSoon()); |
| 2369 EXPECT_EQ(2, NavigationTaskExpectedCount()); | 2386 EXPECT_EQ(2, NavigationTaskExpectedCount()); |
| 2370 EXPECT_THAT(run_order, | 2387 EXPECT_THAT(run_order, |
| 2371 testing::ElementsAre(std::string("L1"), std::string("D1"))); | 2388 testing::ElementsAre(std::string("L1"), std::string("D1"))); |
| 2372 | 2389 |
| 2373 | 2390 |
| 2374 run_order.clear(); | 2391 run_order.clear(); |
| 2375 scheduler_->RemovePendingNavigation(); | 2392 scheduler_->RemovePendingNavigation(true); |
| 2376 // Navigation task expected ref count non-zero so expensive tasks still not | 2393 // Navigation task expected ref count non-zero so expensive tasks still not |
| 2377 // blocked. | 2394 // blocked. |
| 2378 PostTestTasks(&run_order, "L1 D1"); | 2395 PostTestTasks(&run_order, "L1 D1"); |
| 2379 RunUntilIdle(); | 2396 RunUntilIdle(); |
| 2380 | 2397 |
| 2381 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); | 2398 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); |
| 2382 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2399 EXPECT_TRUE(HaveSeenABeginMainframe()); |
| 2383 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2400 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
| 2384 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2401 EXPECT_FALSE(TimerTasksSeemExpensive()); |
| 2385 EXPECT_TRUE(TouchStartExpectedSoon()); | 2402 EXPECT_TRUE(TouchStartExpectedSoon()); |
| 2386 EXPECT_EQ(1, NavigationTaskExpectedCount()); | 2403 EXPECT_EQ(1, NavigationTaskExpectedCount()); |
| 2387 EXPECT_THAT(run_order, | 2404 EXPECT_THAT(run_order, |
| 2388 testing::ElementsAre(std::string("L1"), std::string("D1"))); | 2405 testing::ElementsAre(std::string("L1"), std::string("D1"))); |
| 2389 | 2406 |
| 2390 | 2407 |
| 2391 run_order.clear(); | 2408 run_order.clear(); |
| 2392 scheduler_->RemovePendingNavigation(); | 2409 scheduler_->RemovePendingNavigation(true); |
| 2393 // Navigation task expected ref count is now zero, the expensive loading tasks | 2410 // Navigation task expected ref count is now zero, the expensive loading tasks |
| 2394 // should get blocked. | 2411 // should get blocked. |
| 2395 PostTestTasks(&run_order, "L1 D1"); | 2412 PostTestTasks(&run_order, "L1 D1"); |
| 2396 RunUntilIdle(); | 2413 RunUntilIdle(); |
| 2397 | 2414 |
| 2398 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); | 2415 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); |
| 2399 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2416 EXPECT_TRUE(HaveSeenABeginMainframe()); |
| 2400 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2417 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
| 2401 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2418 EXPECT_FALSE(TimerTasksSeemExpensive()); |
| 2402 EXPECT_TRUE(TouchStartExpectedSoon()); | 2419 EXPECT_TRUE(TouchStartExpectedSoon()); |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2883 } | 2900 } |
| 2884 | 2901 |
| 2885 // Timer tasks should not have been starved by the expensive compositor | 2902 // Timer tasks should not have been starved by the expensive compositor |
| 2886 // tasks. | 2903 // tasks. |
| 2887 EXPECT_EQ(TaskQueue::NORMAL_PRIORITY, | 2904 EXPECT_EQ(TaskQueue::NORMAL_PRIORITY, |
| 2888 scheduler_->CompositorTaskRunner()->GetQueuePriority()); | 2905 scheduler_->CompositorTaskRunner()->GetQueuePriority()); |
| 2889 EXPECT_EQ(1000u, run_order.size()); | 2906 EXPECT_EQ(1000u, run_order.size()); |
| 2890 } | 2907 } |
| 2891 | 2908 |
| 2892 } // namespace scheduler | 2909 } // namespace scheduler |
| OLD | NEW |