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 "platform/scheduler/renderer/renderer_scheduler_impl.h" | 5 #include "platform/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 2672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2683 | 2683 |
2684 TEST_F(RendererSchedulerImplTest, | 2684 TEST_F(RendererSchedulerImplTest, |
2685 ExpensiveLoadingTasksBlockedIfChildFrameNavigationExpected) { | 2685 ExpensiveLoadingTasksBlockedIfChildFrameNavigationExpected) { |
2686 std::vector<std::string> run_order; | 2686 std::vector<std::string> run_order; |
2687 | 2687 |
2688 DoMainFrame(); | 2688 DoMainFrame(); |
2689 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2689 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
2690 SimulateExpensiveTasks(loading_task_runner_); | 2690 SimulateExpensiveTasks(loading_task_runner_); |
2691 ForceTouchStartToBeExpectedSoon(); | 2691 ForceTouchStartToBeExpectedSoon(); |
2692 scheduler_->AddPendingNavigation( | 2692 scheduler_->AddPendingNavigation( |
2693 blink::WebScheduler::NavigatingFrameType::kChildFrame); | 2693 scheduler::RendererScheduler::NavigatingFrameType::kChildFrame); |
2694 | 2694 |
2695 PostTestTasks(&run_order, "L1 D1"); | 2695 PostTestTasks(&run_order, "L1 D1"); |
2696 RunUntilIdle(); | 2696 RunUntilIdle(); |
2697 | 2697 |
2698 // The expensive loading task gets blocked. | 2698 // The expensive loading task gets blocked. |
2699 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); | 2699 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); |
2700 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); | 2700 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); |
2701 } | 2701 } |
2702 | 2702 |
2703 TEST_F(RendererSchedulerImplTest, | 2703 TEST_F(RendererSchedulerImplTest, |
2704 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected) { | 2704 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected) { |
2705 std::vector<std::string> run_order; | 2705 std::vector<std::string> run_order; |
2706 | 2706 |
2707 DoMainFrame(); | 2707 DoMainFrame(); |
2708 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2708 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
2709 SimulateExpensiveTasks(loading_task_runner_); | 2709 SimulateExpensiveTasks(loading_task_runner_); |
2710 ForceTouchStartToBeExpectedSoon(); | 2710 ForceTouchStartToBeExpectedSoon(); |
2711 scheduler_->AddPendingNavigation( | 2711 scheduler_->AddPendingNavigation( |
2712 blink::WebScheduler::NavigatingFrameType::kMainFrame); | 2712 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); |
2713 | 2713 |
2714 PostTestTasks(&run_order, "L1 D1"); | 2714 PostTestTasks(&run_order, "L1 D1"); |
2715 RunUntilIdle(); | 2715 RunUntilIdle(); |
2716 | 2716 |
2717 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); | 2717 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); |
2718 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2718 EXPECT_TRUE(HaveSeenABeginMainframe()); |
2719 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2719 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
2720 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2720 EXPECT_FALSE(TimerTasksSeemExpensive()); |
2721 EXPECT_TRUE(TouchStartExpectedSoon()); | 2721 EXPECT_TRUE(TouchStartExpectedSoon()); |
2722 EXPECT_EQ(1, NavigationTaskExpectedCount()); | 2722 EXPECT_EQ(1, NavigationTaskExpectedCount()); |
2723 EXPECT_THAT(run_order, | 2723 EXPECT_THAT(run_order, |
2724 testing::ElementsAre(std::string("L1"), std::string("D1"))); | 2724 testing::ElementsAre(std::string("L1"), std::string("D1"))); |
2725 | 2725 |
2726 // After the nagigation has been cancelled, the expensive loading tasks should | 2726 // After the nagigation has been cancelled, the expensive loading tasks should |
2727 // get blocked. | 2727 // get blocked. |
2728 scheduler_->RemovePendingNavigation( | 2728 scheduler_->RemovePendingNavigation( |
2729 blink::WebScheduler::NavigatingFrameType::kMainFrame); | 2729 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); |
2730 run_order.clear(); | 2730 run_order.clear(); |
2731 | 2731 |
2732 PostTestTasks(&run_order, "L1 D1"); | 2732 PostTestTasks(&run_order, "L1 D1"); |
2733 RunUntilIdle(); | 2733 RunUntilIdle(); |
2734 | 2734 |
2735 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); | 2735 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); |
2736 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2736 EXPECT_TRUE(HaveSeenABeginMainframe()); |
2737 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2737 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
2738 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2738 EXPECT_FALSE(TimerTasksSeemExpensive()); |
2739 EXPECT_TRUE(TouchStartExpectedSoon()); | 2739 EXPECT_TRUE(TouchStartExpectedSoon()); |
2740 EXPECT_EQ(0, NavigationTaskExpectedCount()); | 2740 EXPECT_EQ(0, NavigationTaskExpectedCount()); |
2741 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); | 2741 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); |
2742 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); | 2742 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); |
2743 } | 2743 } |
2744 | 2744 |
2745 TEST_F(RendererSchedulerImplTest, | 2745 TEST_F(RendererSchedulerImplTest, |
2746 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected_Multiple) { | 2746 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected_Multiple) { |
2747 std::vector<std::string> run_order; | 2747 std::vector<std::string> run_order; |
2748 | 2748 |
2749 DoMainFrame(); | 2749 DoMainFrame(); |
2750 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2750 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
2751 SimulateExpensiveTasks(loading_task_runner_); | 2751 SimulateExpensiveTasks(loading_task_runner_); |
2752 ForceTouchStartToBeExpectedSoon(); | 2752 ForceTouchStartToBeExpectedSoon(); |
2753 scheduler_->AddPendingNavigation( | 2753 scheduler_->AddPendingNavigation( |
2754 blink::WebScheduler::NavigatingFrameType::kMainFrame); | 2754 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); |
2755 scheduler_->AddPendingNavigation( | 2755 scheduler_->AddPendingNavigation( |
2756 blink::WebScheduler::NavigatingFrameType::kMainFrame); | 2756 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); |
2757 | 2757 |
2758 PostTestTasks(&run_order, "L1 D1"); | 2758 PostTestTasks(&run_order, "L1 D1"); |
2759 RunUntilIdle(); | 2759 RunUntilIdle(); |
2760 | 2760 |
2761 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); | 2761 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); |
2762 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2762 EXPECT_TRUE(HaveSeenABeginMainframe()); |
2763 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2763 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
2764 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2764 EXPECT_FALSE(TimerTasksSeemExpensive()); |
2765 EXPECT_TRUE(TouchStartExpectedSoon()); | 2765 EXPECT_TRUE(TouchStartExpectedSoon()); |
2766 EXPECT_EQ(2, NavigationTaskExpectedCount()); | 2766 EXPECT_EQ(2, NavigationTaskExpectedCount()); |
2767 EXPECT_THAT(run_order, | 2767 EXPECT_THAT(run_order, |
2768 testing::ElementsAre(std::string("L1"), std::string("D1"))); | 2768 testing::ElementsAre(std::string("L1"), std::string("D1"))); |
2769 | 2769 |
2770 run_order.clear(); | 2770 run_order.clear(); |
2771 scheduler_->RemovePendingNavigation( | 2771 scheduler_->RemovePendingNavigation( |
2772 blink::WebScheduler::NavigatingFrameType::kMainFrame); | 2772 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); |
2773 // Navigation task expected ref count non-zero so expensive tasks still not | 2773 // Navigation task expected ref count non-zero so expensive tasks still not |
2774 // blocked. | 2774 // blocked. |
2775 PostTestTasks(&run_order, "L1 D1"); | 2775 PostTestTasks(&run_order, "L1 D1"); |
2776 RunUntilIdle(); | 2776 RunUntilIdle(); |
2777 | 2777 |
2778 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); | 2778 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); |
2779 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2779 EXPECT_TRUE(HaveSeenABeginMainframe()); |
2780 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2780 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
2781 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2781 EXPECT_FALSE(TimerTasksSeemExpensive()); |
2782 EXPECT_TRUE(TouchStartExpectedSoon()); | 2782 EXPECT_TRUE(TouchStartExpectedSoon()); |
2783 EXPECT_EQ(1, NavigationTaskExpectedCount()); | 2783 EXPECT_EQ(1, NavigationTaskExpectedCount()); |
2784 EXPECT_THAT(run_order, | 2784 EXPECT_THAT(run_order, |
2785 testing::ElementsAre(std::string("L1"), std::string("D1"))); | 2785 testing::ElementsAre(std::string("L1"), std::string("D1"))); |
2786 | 2786 |
2787 run_order.clear(); | 2787 run_order.clear(); |
2788 scheduler_->RemovePendingNavigation( | 2788 scheduler_->RemovePendingNavigation( |
2789 blink::WebScheduler::NavigatingFrameType::kMainFrame); | 2789 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); |
2790 // Navigation task expected ref count is now zero, the expensive loading tasks | 2790 // Navigation task expected ref count is now zero, the expensive loading tasks |
2791 // should get blocked. | 2791 // should get blocked. |
2792 PostTestTasks(&run_order, "L1 D1"); | 2792 PostTestTasks(&run_order, "L1 D1"); |
2793 RunUntilIdle(); | 2793 RunUntilIdle(); |
2794 | 2794 |
2795 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); | 2795 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); |
2796 EXPECT_TRUE(HaveSeenABeginMainframe()); | 2796 EXPECT_TRUE(HaveSeenABeginMainframe()); |
2797 EXPECT_TRUE(LoadingTasksSeemExpensive()); | 2797 EXPECT_TRUE(LoadingTasksSeemExpensive()); |
2798 EXPECT_FALSE(TimerTasksSeemExpensive()); | 2798 EXPECT_FALSE(TimerTasksSeemExpensive()); |
2799 EXPECT_TRUE(TouchStartExpectedSoon()); | 2799 EXPECT_TRUE(TouchStartExpectedSoon()); |
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3820 EXPECT_TRUE( | 3820 EXPECT_TRUE( |
3821 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold())); | 3821 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold())); |
3822 // Once we've dropped the lock, we realize the main thread is responsive. | 3822 // Once we've dropped the lock, we realize the main thread is responsive. |
3823 DropQueueingTimeEstimatorLock(); | 3823 DropQueueingTimeEstimatorLock(); |
3824 EXPECT_FALSE( | 3824 EXPECT_FALSE( |
3825 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold())); | 3825 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold())); |
3826 } | 3826 } |
3827 | 3827 |
3828 } // namespace scheduler | 3828 } // namespace scheduler |
3829 } // namespace blink | 3829 } // namespace blink |
OLD | NEW |