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

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

Issue 1962053002: Allow expensive task blocking if there is pending iframe navigation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698