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