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

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: use an enum 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(
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
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
OLDNEW
« no previous file with comments | « components/scheduler/renderer/renderer_scheduler_impl.cc ('k') | components/scheduler/renderer/renderer_web_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698