| 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, | 98 FROM_HERE, base::Bind(&RepostingUpdateClockIdleTestTask, |
| 99 base::Unretained(idle_task_runner), run_count, | 99 base::Unretained(idle_task_runner), run_count, |
| 100 clock, advance_time, deadlines)); | 100 clock, advance_time, deadlines)); |
| 101 } | 101 } |
| 102 deadlines->push_back(deadline); | 102 deadlines->push_back(deadline); |
| 103 (*run_count)++; | 103 (*run_count)++; |
| 104 clock->Advance(advance_time); | 104 clock->Advance(advance_time); |
| 105 } | 105 } |
| 106 | 106 |
| 107 void WillBeginFrameIdleTask(RendererScheduler* scheduler, | 107 void WillBeginFrameIdleTask(RendererScheduler* scheduler, |
| 108 uint64_t sequence_number, |
| 108 base::SimpleTestTickClock* clock, | 109 base::SimpleTestTickClock* clock, |
| 109 base::TimeTicks deadline) { | 110 base::TimeTicks deadline) { |
| 110 scheduler->WillBeginFrame(cc::BeginFrameArgs::Create( | 111 scheduler->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 111 BEGINFRAME_FROM_HERE, clock->NowTicks(), base::TimeTicks(), | 112 BEGINFRAME_FROM_HERE, 0, sequence_number, clock->NowTicks(), |
| 112 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 113 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 114 cc::BeginFrameArgs::NORMAL)); |
| 113 } | 115 } |
| 114 | 116 |
| 115 void UpdateClockToDeadlineIdleTestTask(base::SimpleTestTickClock* clock, | 117 void UpdateClockToDeadlineIdleTestTask(base::SimpleTestTickClock* clock, |
| 116 int* run_count, | 118 int* run_count, |
| 117 base::TimeTicks deadline) { | 119 base::TimeTicks deadline) { |
| 118 clock->Advance(deadline - clock->NowTicks()); | 120 clock->Advance(deadline - clock->NowTicks()); |
| 119 (*run_count)++; | 121 (*run_count)++; |
| 120 } | 122 } |
| 121 | 123 |
| 122 void PostingYieldingTestTask(RendererSchedulerImpl* scheduler, | 124 void PostingYieldingTestTask(RendererSchedulerImpl* scheduler, |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 // Only one of mock_task_runner_ or message_loop_ should be set. | 309 // Only one of mock_task_runner_ or message_loop_ should be set. |
| 308 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); | 310 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); |
| 309 if (mock_task_runner_.get()) | 311 if (mock_task_runner_.get()) |
| 310 mock_task_runner_->RunUntilIdle(); | 312 mock_task_runner_->RunUntilIdle(); |
| 311 else | 313 else |
| 312 base::RunLoop().RunUntilIdle(); | 314 base::RunLoop().RunUntilIdle(); |
| 313 } | 315 } |
| 314 | 316 |
| 315 void DoMainFrame() { | 317 void DoMainFrame() { |
| 316 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 318 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 317 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 319 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 318 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 320 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 321 cc::BeginFrameArgs::NORMAL); |
| 319 begin_frame_args.on_critical_path = false; | 322 begin_frame_args.on_critical_path = false; |
| 320 scheduler_->WillBeginFrame(begin_frame_args); | 323 scheduler_->WillBeginFrame(begin_frame_args); |
| 321 scheduler_->DidCommitFrameToCompositor(); | 324 scheduler_->DidCommitFrameToCompositor(); |
| 322 } | 325 } |
| 323 | 326 |
| 324 void DoMainFrameOnCriticalPath() { | 327 void DoMainFrameOnCriticalPath() { |
| 325 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 328 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 326 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 329 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 327 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 330 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 331 cc::BeginFrameArgs::NORMAL); |
| 328 begin_frame_args.on_critical_path = true; | 332 begin_frame_args.on_critical_path = true; |
| 329 scheduler_->WillBeginFrame(begin_frame_args); | 333 scheduler_->WillBeginFrame(begin_frame_args); |
| 330 } | 334 } |
| 331 | 335 |
| 332 void ForceTouchStartToBeExpectedSoon() { | 336 void ForceTouchStartToBeExpectedSoon() { |
| 333 scheduler_->DidHandleInputEventOnCompositorThread( | 337 scheduler_->DidHandleInputEventOnCompositorThread( |
| 334 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 338 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 335 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 339 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 336 scheduler_->DidHandleInputEventOnCompositorThread( | 340 scheduler_->DidHandleInputEventOnCompositorThread( |
| 337 FakeInputEvent(blink::WebInputEvent::GestureScrollEnd), | 341 FakeInputEvent(blink::WebInputEvent::GestureScrollEnd), |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 | 664 |
| 661 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; | 665 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; |
| 662 std::unique_ptr<RendererSchedulerImplForTest> scheduler_; | 666 std::unique_ptr<RendererSchedulerImplForTest> scheduler_; |
| 663 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; | 667 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; |
| 664 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; | 668 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; |
| 665 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; | 669 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; |
| 666 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; | 670 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; |
| 667 scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner_; | 671 scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner_; |
| 668 bool simulate_timer_task_ran_; | 672 bool simulate_timer_task_ran_; |
| 669 bool simulate_compositor_task_ran_; | 673 bool simulate_compositor_task_ran_; |
| 674 uint64_t next_begin_frame_number_ = cc::BeginFrameArgs::kStartingFrameNumber; |
| 670 | 675 |
| 671 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); | 676 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); |
| 672 }; | 677 }; |
| 673 | 678 |
| 674 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { | 679 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { |
| 675 std::vector<std::string> run_order; | 680 std::vector<std::string> run_order; |
| 676 PostTestTasks(&run_order, "D1 D2 D3 D4"); | 681 PostTestTasks(&run_order, "D1 D2 D3 D4"); |
| 677 | 682 |
| 678 RunUntilIdle(); | 683 RunUntilIdle(); |
| 679 EXPECT_THAT(run_order, | 684 EXPECT_THAT(run_order, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 708 base::TimeTicks deadline_in_task; | 713 base::TimeTicks deadline_in_task; |
| 709 | 714 |
| 710 clock_->Advance(base::TimeDelta::FromMilliseconds(100)); | 715 clock_->Advance(base::TimeDelta::FromMilliseconds(100)); |
| 711 idle_task_runner_->PostIdleTask( | 716 idle_task_runner_->PostIdleTask( |
| 712 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); | 717 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| 713 | 718 |
| 714 RunUntilIdle(); | 719 RunUntilIdle(); |
| 715 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. | 720 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. |
| 716 | 721 |
| 717 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 722 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 718 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 723 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 719 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 724 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 725 cc::BeginFrameArgs::NORMAL)); |
| 720 RunUntilIdle(); | 726 RunUntilIdle(); |
| 721 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. | 727 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. |
| 722 | 728 |
| 723 clock_->Advance(base::TimeDelta::FromMilliseconds(1200)); | 729 clock_->Advance(base::TimeDelta::FromMilliseconds(1200)); |
| 724 scheduler_->DidCommitFrameToCompositor(); | 730 scheduler_->DidCommitFrameToCompositor(); |
| 725 RunUntilIdle(); | 731 RunUntilIdle(); |
| 726 EXPECT_EQ(0, run_count); // We missed the deadline. | 732 EXPECT_EQ(0, run_count); // We missed the deadline. |
| 727 | 733 |
| 728 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 734 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 729 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 735 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 730 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 736 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 737 cc::BeginFrameArgs::NORMAL)); |
| 731 clock_->Advance(base::TimeDelta::FromMilliseconds(800)); | 738 clock_->Advance(base::TimeDelta::FromMilliseconds(800)); |
| 732 scheduler_->DidCommitFrameToCompositor(); | 739 scheduler_->DidCommitFrameToCompositor(); |
| 733 RunUntilIdle(); | 740 RunUntilIdle(); |
| 734 EXPECT_EQ(1, run_count); | 741 EXPECT_EQ(1, run_count); |
| 735 EXPECT_EQ(expected_deadline, deadline_in_task); | 742 EXPECT_EQ(expected_deadline, deadline_in_task); |
| 736 } | 743 } |
| 737 | 744 |
| 738 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { | 745 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { |
| 739 int run_count = 0; | 746 int run_count = 0; |
| 740 | 747 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 | 787 |
| 781 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { | 788 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { |
| 782 int run_count = 0; | 789 int run_count = 0; |
| 783 | 790 |
| 784 base::TimeTicks deadline_in_task; | 791 base::TimeTicks deadline_in_task; |
| 785 idle_task_runner_->PostIdleTask( | 792 idle_task_runner_->PostIdleTask( |
| 786 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); | 793 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| 787 | 794 |
| 788 // Trigger the beginning of an idle period for 1000ms. | 795 // Trigger the beginning of an idle period for 1000ms. |
| 789 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 796 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 790 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 797 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 791 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 798 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 799 cc::BeginFrameArgs::NORMAL)); |
| 792 DoMainFrame(); | 800 DoMainFrame(); |
| 793 | 801 |
| 794 // End the idle period early (after 500ms), and send a WillBeginFrame which | 802 // End the idle period early (after 500ms), and send a WillBeginFrame which |
| 795 // specifies that the next idle period should end 1000ms from now. | 803 // specifies that the next idle period should end 1000ms from now. |
| 796 clock_->Advance(base::TimeDelta::FromMilliseconds(500)); | 804 clock_->Advance(base::TimeDelta::FromMilliseconds(500)); |
| 797 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 805 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 798 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 806 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 799 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 807 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 808 cc::BeginFrameArgs::NORMAL)); |
| 800 | 809 |
| 801 RunUntilIdle(); | 810 RunUntilIdle(); |
| 802 EXPECT_EQ(0, run_count); // Not currently in an idle period. | 811 EXPECT_EQ(0, run_count); // Not currently in an idle period. |
| 803 | 812 |
| 804 // Trigger the start of the idle period before the task to end the previous | 813 // Trigger the start of the idle period before the task to end the previous |
| 805 // idle period has been triggered. | 814 // idle period has been triggered. |
| 806 clock_->Advance(base::TimeDelta::FromMilliseconds(400)); | 815 clock_->Advance(base::TimeDelta::FromMilliseconds(400)); |
| 807 scheduler_->DidCommitFrameToCompositor(); | 816 scheduler_->DidCommitFrameToCompositor(); |
| 808 | 817 |
| 809 // Post a task which simulates running until after the previous end idle | 818 // Post a task which simulates running until after the previous end idle |
| (...skipping 1262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2072 | 2081 |
| 2073 // Check that idle tasks don't run after the idle period ends with a | 2082 // Check that idle tasks don't run after the idle period ends with a |
| 2074 // new BeginMainFrame. | 2083 // new BeginMainFrame. |
| 2075 max_idle_task_reposts = 5; | 2084 max_idle_task_reposts = 5; |
| 2076 idle_task_runner_->PostIdleTask( | 2085 idle_task_runner_->PostIdleTask( |
| 2077 FROM_HERE, | 2086 FROM_HERE, |
| 2078 base::Bind(&RepostingUpdateClockIdleTestTask, | 2087 base::Bind(&RepostingUpdateClockIdleTestTask, |
| 2079 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(), | 2088 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(), |
| 2080 idle_task_runtime, &actual_deadlines)); | 2089 idle_task_runtime, &actual_deadlines)); |
| 2081 idle_task_runner_->PostIdleTask( | 2090 idle_task_runner_->PostIdleTask( |
| 2082 FROM_HERE, base::Bind(&WillBeginFrameIdleTask, | 2091 FROM_HERE, |
| 2083 base::Unretained(scheduler_.get()), clock_.get())); | 2092 base::Bind(&WillBeginFrameIdleTask, base::Unretained(scheduler_.get()), |
| 2093 next_begin_frame_number_++, clock_.get())); |
| 2084 RunUntilIdle(); | 2094 RunUntilIdle(); |
| 2085 EXPECT_EQ(4, run_count); | 2095 EXPECT_EQ(4, run_count); |
| 2086 } | 2096 } |
| 2087 | 2097 |
| 2088 | 2098 |
| 2089 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { | 2099 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { |
| 2090 base::TimeTicks deadline_in_task; | 2100 base::TimeTicks deadline_in_task; |
| 2091 int run_count = 0; | 2101 int run_count = 0; |
| 2092 | 2102 |
| 2093 idle_task_runner_->PostIdleTask( | 2103 idle_task_runner_->PostIdleTask( |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2152 FROM_HERE, | 2162 FROM_HERE, |
| 2153 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), | 2163 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
| 2154 &can_exceed_idle_deadline, &run_count)); | 2164 &can_exceed_idle_deadline, &run_count)); |
| 2155 RunUntilIdle(); | 2165 RunUntilIdle(); |
| 2156 EXPECT_EQ(3, run_count); | 2166 EXPECT_EQ(3, run_count); |
| 2157 EXPECT_TRUE(can_exceed_idle_deadline); | 2167 EXPECT_TRUE(can_exceed_idle_deadline); |
| 2158 | 2168 |
| 2159 // Next long idle period will be for the maximum time, so | 2169 // Next long idle period will be for the maximum time, so |
| 2160 // CanExceedIdleDeadlineIfRequired should return true. | 2170 // CanExceedIdleDeadlineIfRequired should return true. |
| 2161 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 2171 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 2162 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2172 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2163 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 2173 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 2174 cc::BeginFrameArgs::NORMAL)); |
| 2164 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); | 2175 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); |
| 2165 } | 2176 } |
| 2166 | 2177 |
| 2167 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { | 2178 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { |
| 2168 int run_count = 0; | 2179 int run_count = 0; |
| 2169 | 2180 |
| 2170 max_idle_task_reposts = 2; | 2181 max_idle_task_reposts = 2; |
| 2171 idle_task_runner_->PostIdleTask( | 2182 idle_task_runner_->PostIdleTask( |
| 2172 FROM_HERE, base::Bind(&RepostingIdleTestTask, | 2183 FROM_HERE, base::Bind(&RepostingIdleTestTask, |
| 2173 base::RetainedRef(idle_task_runner_), &run_count)); | 2184 base::RetainedRef(idle_task_runner_), &run_count)); |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2364 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the | 2375 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the |
| 2365 // compositor to not be there and we don't want to make debugging impossible. | 2376 // compositor to not be there and we don't want to make debugging impossible. |
| 2366 scheduler_->DidHandleInputEventOnMainThread( | 2377 scheduler_->DidHandleInputEventOnMainThread( |
| 2367 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); | 2378 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); |
| 2368 } | 2379 } |
| 2369 | 2380 |
| 2370 TEST_F(RendererSchedulerImplTest, BeginMainFrameOnCriticalPath) { | 2381 TEST_F(RendererSchedulerImplTest, BeginMainFrameOnCriticalPath) { |
| 2371 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); | 2382 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); |
| 2372 | 2383 |
| 2373 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2384 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2374 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2385 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2375 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL); | 2386 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 2387 cc::BeginFrameArgs::NORMAL); |
| 2376 scheduler_->WillBeginFrame(begin_frame_args); | 2388 scheduler_->WillBeginFrame(begin_frame_args); |
| 2377 ASSERT_TRUE(scheduler_->BeginMainFrameOnCriticalPath()); | 2389 ASSERT_TRUE(scheduler_->BeginMainFrameOnCriticalPath()); |
| 2378 | 2390 |
| 2379 begin_frame_args.on_critical_path = false; | 2391 begin_frame_args.on_critical_path = false; |
| 2380 scheduler_->WillBeginFrame(begin_frame_args); | 2392 scheduler_->WillBeginFrame(begin_frame_args); |
| 2381 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); | 2393 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); |
| 2382 } | 2394 } |
| 2383 | 2395 |
| 2384 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { | 2396 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { |
| 2385 scheduler_->Shutdown(); | 2397 scheduler_->Shutdown(); |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2741 | 2753 |
| 2742 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) { | 2754 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) { |
| 2743 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2755 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2744 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, | 2756 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, |
| 2745 blink::WebInputEvent::TouchMove); | 2757 blink::WebInputEvent::TouchMove); |
| 2746 RunUntilIdle(); | 2758 RunUntilIdle(); |
| 2747 for (int i = 0; i < 20; i++) { | 2759 for (int i = 0; i < 20; i++) { |
| 2748 simulate_timer_task_ran_ = false; | 2760 simulate_timer_task_ran_ = false; |
| 2749 | 2761 |
| 2750 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2762 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2751 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2763 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2752 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2764 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2765 cc::BeginFrameArgs::NORMAL); |
| 2753 begin_frame_args.on_critical_path = false; | 2766 begin_frame_args.on_critical_path = false; |
| 2754 scheduler_->WillBeginFrame(begin_frame_args); | 2767 scheduler_->WillBeginFrame(begin_frame_args); |
| 2755 | 2768 |
| 2756 compositor_task_runner_->PostTask( | 2769 compositor_task_runner_->PostTask( |
| 2757 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: | 2770 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: |
| 2758 SimulateMainThreadInputHandlingCompositorTask, | 2771 SimulateMainThreadInputHandlingCompositorTask, |
| 2759 base::Unretained(this), | 2772 base::Unretained(this), |
| 2760 base::TimeDelta::FromMilliseconds(8))); | 2773 base::TimeDelta::FromMilliseconds(8))); |
| 2761 timer_task_runner_->PostTask( | 2774 timer_task_runner_->PostTask( |
| 2762 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, | 2775 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2779 } | 2792 } |
| 2780 | 2793 |
| 2781 TEST_F(RendererSchedulerImplTest, | 2794 TEST_F(RendererSchedulerImplTest, |
| 2782 FourtyMsTimer_NotBlocked_CompositorScrolling) { | 2795 FourtyMsTimer_NotBlocked_CompositorScrolling) { |
| 2783 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2796 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2784 RunUntilIdle(); | 2797 RunUntilIdle(); |
| 2785 for (int i = 0; i < 20; i++) { | 2798 for (int i = 0; i < 20; i++) { |
| 2786 simulate_timer_task_ran_ = false; | 2799 simulate_timer_task_ran_ = false; |
| 2787 | 2800 |
| 2788 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2801 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2789 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2802 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2790 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2803 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2804 cc::BeginFrameArgs::NORMAL); |
| 2791 begin_frame_args.on_critical_path = false; | 2805 begin_frame_args.on_critical_path = false; |
| 2792 scheduler_->WillBeginFrame(begin_frame_args); | 2806 scheduler_->WillBeginFrame(begin_frame_args); |
| 2793 scheduler_->DidAnimateForInputOnCompositorThread(); | 2807 scheduler_->DidAnimateForInputOnCompositorThread(); |
| 2794 | 2808 |
| 2795 compositor_task_runner_->PostTask( | 2809 compositor_task_runner_->PostTask( |
| 2796 FROM_HERE, | 2810 FROM_HERE, |
| 2797 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 2811 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| 2798 base::Unretained(this), | 2812 base::Unretained(this), |
| 2799 base::TimeDelta::FromMilliseconds(8))); | 2813 base::TimeDelta::FromMilliseconds(8))); |
| 2800 timer_task_runner_->PostTask( | 2814 timer_task_runner_->PostTask( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2820 TEST_F(RendererSchedulerImplTest, | 2834 TEST_F(RendererSchedulerImplTest, |
| 2821 ExpensiveTimer_NotBlocked_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLING) { | 2835 ExpensiveTimer_NotBlocked_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLING) { |
| 2822 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2836 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2823 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, | 2837 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, |
| 2824 blink::WebInputEvent::TouchMove); | 2838 blink::WebInputEvent::TouchMove); |
| 2825 RunUntilIdle(); | 2839 RunUntilIdle(); |
| 2826 for (int i = 0; i < 20; i++) { | 2840 for (int i = 0; i < 20; i++) { |
| 2827 simulate_timer_task_ran_ = false; | 2841 simulate_timer_task_ran_ = false; |
| 2828 | 2842 |
| 2829 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2843 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2830 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2844 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2831 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2845 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2846 cc::BeginFrameArgs::NORMAL); |
| 2832 begin_frame_args.on_critical_path = false; | 2847 begin_frame_args.on_critical_path = false; |
| 2833 scheduler_->WillBeginFrame(begin_frame_args); | 2848 scheduler_->WillBeginFrame(begin_frame_args); |
| 2834 | 2849 |
| 2835 compositor_task_runner_->PostTask( | 2850 compositor_task_runner_->PostTask( |
| 2836 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: | 2851 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: |
| 2837 SimulateMainThreadInputHandlingCompositorTask, | 2852 SimulateMainThreadInputHandlingCompositorTask, |
| 2838 base::Unretained(this), | 2853 base::Unretained(this), |
| 2839 base::TimeDelta::FromMilliseconds(8))); | 2854 base::TimeDelta::FromMilliseconds(8))); |
| 2840 timer_task_runner_->PostTask( | 2855 timer_task_runner_->PostTask( |
| 2841 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, | 2856 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2884 EXPECT_EQ(UseCase::LOADING, ForceUpdatePolicyAndGetCurrentUseCase()); | 2899 EXPECT_EQ(UseCase::LOADING, ForceUpdatePolicyAndGetCurrentUseCase()); |
| 2885 EXPECT_EQ(rails_response_time(), | 2900 EXPECT_EQ(rails_response_time(), |
| 2886 scheduler_->EstimateLongestJankFreeTaskDuration()); | 2901 scheduler_->EstimateLongestJankFreeTaskDuration()); |
| 2887 } | 2902 } |
| 2888 | 2903 |
| 2889 TEST_F(RendererSchedulerImplTest, | 2904 TEST_F(RendererSchedulerImplTest, |
| 2890 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_GESTURE) { | 2905 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_GESTURE) { |
| 2891 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, | 2906 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, |
| 2892 blink::WebInputEvent::GestureScrollUpdate); | 2907 blink::WebInputEvent::GestureScrollUpdate); |
| 2893 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2908 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2894 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2909 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2895 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2910 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2911 cc::BeginFrameArgs::NORMAL); |
| 2896 begin_frame_args.on_critical_path = false; | 2912 begin_frame_args.on_critical_path = false; |
| 2897 scheduler_->WillBeginFrame(begin_frame_args); | 2913 scheduler_->WillBeginFrame(begin_frame_args); |
| 2898 | 2914 |
| 2899 compositor_task_runner_->PostTask( | 2915 compositor_task_runner_->PostTask( |
| 2900 FROM_HERE, | 2916 FROM_HERE, |
| 2901 base::Bind(&RendererSchedulerImplTest:: | 2917 base::Bind(&RendererSchedulerImplTest:: |
| 2902 SimulateMainThreadInputHandlingCompositorTask, | 2918 SimulateMainThreadInputHandlingCompositorTask, |
| 2903 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); | 2919 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); |
| 2904 | 2920 |
| 2905 RunUntilIdle(); | 2921 RunUntilIdle(); |
| 2906 EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()); | 2922 EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()); |
| 2907 | 2923 |
| 2908 // 16ms frame - 5ms compositor work = 11ms for other stuff. | 2924 // 16ms frame - 5ms compositor work = 11ms for other stuff. |
| 2909 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), | 2925 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), |
| 2910 scheduler_->EstimateLongestJankFreeTaskDuration()); | 2926 scheduler_->EstimateLongestJankFreeTaskDuration()); |
| 2911 } | 2927 } |
| 2912 | 2928 |
| 2913 TEST_F( | 2929 TEST_F( |
| 2914 RendererSchedulerImplTest, | 2930 RendererSchedulerImplTest, |
| 2915 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLIN
G) { | 2931 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLIN
G) { |
| 2916 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2932 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2917 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2933 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2918 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2934 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2935 cc::BeginFrameArgs::NORMAL); |
| 2919 begin_frame_args.on_critical_path = false; | 2936 begin_frame_args.on_critical_path = false; |
| 2920 scheduler_->WillBeginFrame(begin_frame_args); | 2937 scheduler_->WillBeginFrame(begin_frame_args); |
| 2921 | 2938 |
| 2922 compositor_task_runner_->PostTask( | 2939 compositor_task_runner_->PostTask( |
| 2923 FROM_HERE, | 2940 FROM_HERE, |
| 2924 base::Bind(&RendererSchedulerImplTest:: | 2941 base::Bind(&RendererSchedulerImplTest:: |
| 2925 SimulateMainThreadInputHandlingCompositorTask, | 2942 SimulateMainThreadInputHandlingCompositorTask, |
| 2926 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); | 2943 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); |
| 2927 | 2944 |
| 2928 RunUntilIdle(); | 2945 RunUntilIdle(); |
| 2929 EXPECT_EQ(UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, CurrentUseCase()); | 2946 EXPECT_EQ(UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, CurrentUseCase()); |
| 2930 | 2947 |
| 2931 // 16ms frame - 5ms compositor work = 11ms for other stuff. | 2948 // 16ms frame - 5ms compositor work = 11ms for other stuff. |
| 2932 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), | 2949 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), |
| 2933 scheduler_->EstimateLongestJankFreeTaskDuration()); | 2950 scheduler_->EstimateLongestJankFreeTaskDuration()); |
| 2934 } | 2951 } |
| 2935 | 2952 |
| 2936 TEST_F(RendererSchedulerImplTest, | 2953 TEST_F(RendererSchedulerImplTest, |
| 2937 EstimateLongestJankFreeTaskDuration_UseCase_SYNCHRONIZED_GESTURE) { | 2954 EstimateLongestJankFreeTaskDuration_UseCase_SYNCHRONIZED_GESTURE) { |
| 2938 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); | 2955 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); |
| 2939 | 2956 |
| 2940 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2957 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2941 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2958 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2942 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2959 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2960 cc::BeginFrameArgs::NORMAL); |
| 2943 begin_frame_args.on_critical_path = true; | 2961 begin_frame_args.on_critical_path = true; |
| 2944 scheduler_->WillBeginFrame(begin_frame_args); | 2962 scheduler_->WillBeginFrame(begin_frame_args); |
| 2945 | 2963 |
| 2946 compositor_task_runner_->PostTask( | 2964 compositor_task_runner_->PostTask( |
| 2947 FROM_HERE, | 2965 FROM_HERE, |
| 2948 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 2966 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| 2949 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); | 2967 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); |
| 2950 | 2968 |
| 2951 RunUntilIdle(); | 2969 RunUntilIdle(); |
| 2952 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, CurrentUseCase()); | 2970 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, CurrentUseCase()); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3042 BlockedTimerNotification_SYNCHRONIZED_GESTURE) { | 3060 BlockedTimerNotification_SYNCHRONIZED_GESTURE) { |
| 3043 // Make sure we only report warnings during a high blocking threshold. | 3061 // Make sure we only report warnings during a high blocking threshold. |
| 3044 WebViewSchedulerImplForTest web_view_scheduler(scheduler_.get()); | 3062 WebViewSchedulerImplForTest web_view_scheduler(scheduler_.get()); |
| 3045 | 3063 |
| 3046 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 3064 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 3047 DoMainFrame(); | 3065 DoMainFrame(); |
| 3048 SimulateExpensiveTasks(timer_task_runner_); | 3066 SimulateExpensiveTasks(timer_task_runner_); |
| 3049 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); | 3067 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); |
| 3050 | 3068 |
| 3051 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3069 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3052 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3070 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3053 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3071 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3072 cc::BeginFrameArgs::NORMAL); |
| 3054 begin_frame_args.on_critical_path = true; | 3073 begin_frame_args.on_critical_path = true; |
| 3055 scheduler_->WillBeginFrame(begin_frame_args); | 3074 scheduler_->WillBeginFrame(begin_frame_args); |
| 3056 | 3075 |
| 3057 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, | 3076 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, |
| 3058 ForceUpdatePolicyAndGetCurrentUseCase()); | 3077 ForceUpdatePolicyAndGetCurrentUseCase()); |
| 3059 | 3078 |
| 3060 std::vector<std::string> run_order; | 3079 std::vector<std::string> run_order; |
| 3061 PostTestTasks(&run_order, "T1 T2"); | 3080 PostTestTasks(&run_order, "T1 T2"); |
| 3062 RunUntilIdle(); | 3081 RunUntilIdle(); |
| 3063 | 3082 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3087 | 3106 |
| 3088 size_t count = 0; | 3107 size_t count = 0; |
| 3089 // With the compositor task taking 10ms, there is not enough time to run this | 3108 // With the compositor task taking 10ms, there is not enough time to run this |
| 3090 // 7ms timer task in the 16ms frame. | 3109 // 7ms timer task in the 16ms frame. |
| 3091 scheduler_->TimerTaskRunner()->PostTask( | 3110 scheduler_->TimerTaskRunner()->PostTask( |
| 3092 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, | 3111 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, |
| 3093 scheduler_->TimerTaskRunner())); | 3112 scheduler_->TimerTaskRunner())); |
| 3094 | 3113 |
| 3095 for (int i = 0; i < 1000; i++) { | 3114 for (int i = 0; i < 1000; i++) { |
| 3096 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3115 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3097 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3116 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3098 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3117 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3118 cc::BeginFrameArgs::NORMAL); |
| 3099 begin_frame_args.on_critical_path = true; | 3119 begin_frame_args.on_critical_path = true; |
| 3100 scheduler_->WillBeginFrame(begin_frame_args); | 3120 scheduler_->WillBeginFrame(begin_frame_args); |
| 3101 scheduler_->DidHandleInputEventOnCompositorThread( | 3121 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3102 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3122 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3103 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3123 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3104 | 3124 |
| 3105 simulate_compositor_task_ran_ = false; | 3125 simulate_compositor_task_ran_ = false; |
| 3106 compositor_task_runner_->PostTask( | 3126 compositor_task_runner_->PostTask( |
| 3107 FROM_HERE, | 3127 FROM_HERE, |
| 3108 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3128 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3150 size_t count = 0; | 3170 size_t count = 0; |
| 3151 // With the compositor task taking 10ms, there is not enough time to run this | 3171 // With the compositor task taking 10ms, there is not enough time to run this |
| 3152 // 7ms timer task in the 16ms frame. | 3172 // 7ms timer task in the 16ms frame. |
| 3153 scheduler_->TimerTaskRunner()->PostTask( | 3173 scheduler_->TimerTaskRunner()->PostTask( |
| 3154 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, | 3174 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, |
| 3155 scheduler_->TimerTaskRunner())); | 3175 scheduler_->TimerTaskRunner())); |
| 3156 | 3176 |
| 3157 bool suspended = false; | 3177 bool suspended = false; |
| 3158 for (int i = 0; i < 1000; i++) { | 3178 for (int i = 0; i < 1000; i++) { |
| 3159 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3179 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3160 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3180 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3161 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3181 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3182 cc::BeginFrameArgs::NORMAL); |
| 3162 begin_frame_args.on_critical_path = true; | 3183 begin_frame_args.on_critical_path = true; |
| 3163 scheduler_->WillBeginFrame(begin_frame_args); | 3184 scheduler_->WillBeginFrame(begin_frame_args); |
| 3164 scheduler_->DidHandleInputEventOnCompositorThread( | 3185 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3165 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3186 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3166 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3187 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3167 | 3188 |
| 3168 simulate_compositor_task_ran_ = false; | 3189 simulate_compositor_task_ran_ = false; |
| 3169 compositor_task_runner_->PostTask( | 3190 compositor_task_runner_->PostTask( |
| 3170 FROM_HERE, | 3191 FROM_HERE, |
| 3171 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3192 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3207 | 3228 |
| 3208 size_t count = 0; | 3229 size_t count = 0; |
| 3209 // With the compositor task taking 10ms, there is enough time to run this 6ms | 3230 // With the compositor task taking 10ms, there is enough time to run this 6ms |
| 3210 // timer task in the 16ms frame. | 3231 // timer task in the 16ms frame. |
| 3211 scheduler_->TimerTaskRunner()->PostTask( | 3232 scheduler_->TimerTaskRunner()->PostTask( |
| 3212 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 6, | 3233 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 6, |
| 3213 scheduler_->TimerTaskRunner())); | 3234 scheduler_->TimerTaskRunner())); |
| 3214 | 3235 |
| 3215 for (int i = 0; i < 1000; i++) { | 3236 for (int i = 0; i < 1000; i++) { |
| 3216 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3237 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3217 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3238 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3218 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3239 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3240 cc::BeginFrameArgs::NORMAL); |
| 3219 begin_frame_args.on_critical_path = true; | 3241 begin_frame_args.on_critical_path = true; |
| 3220 scheduler_->WillBeginFrame(begin_frame_args); | 3242 scheduler_->WillBeginFrame(begin_frame_args); |
| 3221 scheduler_->DidHandleInputEventOnCompositorThread( | 3243 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3222 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3244 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3223 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3245 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3224 | 3246 |
| 3225 simulate_compositor_task_ran_ = false; | 3247 simulate_compositor_task_ran_ = false; |
| 3226 compositor_task_runner_->PostTask( | 3248 compositor_task_runner_->PostTask( |
| 3227 FROM_HERE, | 3249 FROM_HERE, |
| 3228 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3250 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3246 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); | 3268 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); |
| 3247 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 3269 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 3248 ForceTouchStartToBeExpectedSoon(); | 3270 ForceTouchStartToBeExpectedSoon(); |
| 3249 | 3271 |
| 3250 // Bump us into SYNCHRONIZED_GESTURE. | 3272 // Bump us into SYNCHRONIZED_GESTURE. |
| 3251 scheduler_->DidHandleInputEventOnCompositorThread( | 3273 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3252 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3274 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3253 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3275 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3254 | 3276 |
| 3255 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3277 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3256 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3278 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3257 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3279 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3280 cc::BeginFrameArgs::NORMAL); |
| 3258 begin_frame_args.on_critical_path = true; | 3281 begin_frame_args.on_critical_path = true; |
| 3259 scheduler_->WillBeginFrame(begin_frame_args); | 3282 scheduler_->WillBeginFrame(begin_frame_args); |
| 3260 | 3283 |
| 3261 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, | 3284 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, |
| 3262 ForceUpdatePolicyAndGetCurrentUseCase()); | 3285 ForceUpdatePolicyAndGetCurrentUseCase()); |
| 3263 | 3286 |
| 3264 EXPECT_TRUE(TimerTasksSeemExpensive()); | 3287 EXPECT_TRUE(TimerTasksSeemExpensive()); |
| 3265 EXPECT_TRUE(TouchStartExpectedSoon()); | 3288 EXPECT_TRUE(TouchStartExpectedSoon()); |
| 3266 EXPECT_FALSE(scheduler_->TimerTaskRunner()->IsQueueEnabled()); | 3289 EXPECT_FALSE(scheduler_->TimerTaskRunner()->IsQueueEnabled()); |
| 3267 } | 3290 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3307 | 3330 |
| 3308 // With the compositor task taking 20ms, there is not enough time to run | 3331 // With the compositor task taking 20ms, there is not enough time to run |
| 3309 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks | 3332 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks |
| 3310 // should therefore not get prioritized. | 3333 // should therefore not get prioritized. |
| 3311 std::vector<std::string> run_order; | 3334 std::vector<std::string> run_order; |
| 3312 for (int i = 0; i < 1000; i++) | 3335 for (int i = 0; i < 1000; i++) |
| 3313 PostTestTasks(&run_order, "T1"); | 3336 PostTestTasks(&run_order, "T1"); |
| 3314 | 3337 |
| 3315 for (int i = 0; i < 100; i++) { | 3338 for (int i = 0; i < 100; i++) { |
| 3316 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3339 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3317 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3340 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3318 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3341 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3342 cc::BeginFrameArgs::NORMAL); |
| 3319 begin_frame_args.on_critical_path = true; | 3343 begin_frame_args.on_critical_path = true; |
| 3320 scheduler_->WillBeginFrame(begin_frame_args); | 3344 scheduler_->WillBeginFrame(begin_frame_args); |
| 3321 scheduler_->DidHandleInputEventOnCompositorThread( | 3345 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3322 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3346 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3323 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3347 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3324 | 3348 |
| 3325 simulate_compositor_task_ran_ = false; | 3349 simulate_compositor_task_ran_ = false; |
| 3326 compositor_task_runner_->PostTask( | 3350 compositor_task_runner_->PostTask( |
| 3327 FROM_HERE, | 3351 FROM_HERE, |
| 3328 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3352 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3348 | 3372 |
| 3349 // With the compositor task taking 20ms, there is not enough time to run | 3373 // With the compositor task taking 20ms, there is not enough time to run |
| 3350 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks | 3374 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks |
| 3351 // should therefore not get prioritized. | 3375 // should therefore not get prioritized. |
| 3352 std::vector<std::string> run_order; | 3376 std::vector<std::string> run_order; |
| 3353 for (int i = 0; i < 1000; i++) | 3377 for (int i = 0; i < 1000; i++) |
| 3354 PostTestTasks(&run_order, "T1"); | 3378 PostTestTasks(&run_order, "T1"); |
| 3355 | 3379 |
| 3356 for (int i = 0; i < 100; i++) { | 3380 for (int i = 0; i < 100; i++) { |
| 3357 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3381 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3358 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3382 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3359 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3383 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3384 cc::BeginFrameArgs::NORMAL); |
| 3360 begin_frame_args.on_critical_path = true; | 3385 begin_frame_args.on_critical_path = true; |
| 3361 scheduler_->WillBeginFrame(begin_frame_args); | 3386 scheduler_->WillBeginFrame(begin_frame_args); |
| 3362 scheduler_->DidHandleInputEventOnCompositorThread( | 3387 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3363 FakeInputEvent(blink::WebInputEvent::TouchMove), | 3388 FakeInputEvent(blink::WebInputEvent::TouchMove), |
| 3364 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); | 3389 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); |
| 3365 | 3390 |
| 3366 simulate_compositor_task_ran_ = false; | 3391 simulate_compositor_task_ran_ = false; |
| 3367 compositor_task_runner_->PostTask( | 3392 compositor_task_runner_->PostTask( |
| 3368 FROM_HERE, | 3393 FROM_HERE, |
| 3369 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3394 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3391 // With the compositor task taking 20ms, there is not enough time to run | 3416 // With the compositor task taking 20ms, there is not enough time to run |
| 3392 // other tasks in the same 16ms frame. However because this is a main thread | 3417 // other tasks in the same 16ms frame. However because this is a main thread |
| 3393 // gesture instead of custom main thread input handling, we allow the timer | 3418 // gesture instead of custom main thread input handling, we allow the timer |
| 3394 // tasks to be starved. | 3419 // tasks to be starved. |
| 3395 std::vector<std::string> run_order; | 3420 std::vector<std::string> run_order; |
| 3396 for (int i = 0; i < 1000; i++) | 3421 for (int i = 0; i < 1000; i++) |
| 3397 PostTestTasks(&run_order, "T1"); | 3422 PostTestTasks(&run_order, "T1"); |
| 3398 | 3423 |
| 3399 for (int i = 0; i < 100; i++) { | 3424 for (int i = 0; i < 100; i++) { |
| 3400 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3425 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3401 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3426 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3402 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3427 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3428 cc::BeginFrameArgs::NORMAL); |
| 3403 begin_frame_args.on_critical_path = true; | 3429 begin_frame_args.on_critical_path = true; |
| 3404 scheduler_->WillBeginFrame(begin_frame_args); | 3430 scheduler_->WillBeginFrame(begin_frame_args); |
| 3405 scheduler_->DidHandleInputEventOnCompositorThread( | 3431 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3406 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3432 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3407 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); | 3433 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); |
| 3408 | 3434 |
| 3409 simulate_compositor_task_ran_ = false; | 3435 simulate_compositor_task_ran_ = false; |
| 3410 compositor_task_runner_->PostTask( | 3436 compositor_task_runner_->PostTask( |
| 3411 FROM_HERE, | 3437 FROM_HERE, |
| 3412 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3438 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3515 scheduler_->TimerTaskRunner()->PostTask( | 3541 scheduler_->TimerTaskRunner()->PostTask( |
| 3516 FROM_HERE, base::Bind(SlowCountingTask, &timer_count, clock_.get(), 7, | 3542 FROM_HERE, base::Bind(SlowCountingTask, &timer_count, clock_.get(), 7, |
| 3517 scheduler_->TimerTaskRunner())); | 3543 scheduler_->TimerTaskRunner())); |
| 3518 unthrottled_task_runner->PostTask( | 3544 unthrottled_task_runner->PostTask( |
| 3519 FROM_HERE, base::Bind(SlowCountingTask, &unthrottled_count, clock_.get(), | 3545 FROM_HERE, base::Bind(SlowCountingTask, &unthrottled_count, clock_.get(), |
| 3520 7, unthrottled_task_runner)); | 3546 7, unthrottled_task_runner)); |
| 3521 scheduler_->SuspendTimerQueue(); | 3547 scheduler_->SuspendTimerQueue(); |
| 3522 | 3548 |
| 3523 for (int i = 0; i < 1000; i++) { | 3549 for (int i = 0; i < 1000; i++) { |
| 3524 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3550 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3525 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3551 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3526 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3552 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3553 cc::BeginFrameArgs::NORMAL); |
| 3527 begin_frame_args.on_critical_path = true; | 3554 begin_frame_args.on_critical_path = true; |
| 3528 scheduler_->WillBeginFrame(begin_frame_args); | 3555 scheduler_->WillBeginFrame(begin_frame_args); |
| 3529 scheduler_->DidHandleInputEventOnCompositorThread( | 3556 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3530 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3557 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3531 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3558 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3532 | 3559 |
| 3533 simulate_compositor_task_ran_ = false; | 3560 simulate_compositor_task_ran_ = false; |
| 3534 compositor_task_runner_->PostTask( | 3561 compositor_task_runner_->PostTask( |
| 3535 FROM_HERE, | 3562 FROM_HERE, |
| 3536 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3563 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3692 // While the queueing time estimator is locked, we believe the thread to still | 3719 // While the queueing time estimator is locked, we believe the thread to still |
| 3693 // be unresponsive. | 3720 // be unresponsive. |
| 3694 EXPECT_TRUE(scheduler_->MainThreadSeemsUnresponsive()); | 3721 EXPECT_TRUE(scheduler_->MainThreadSeemsUnresponsive()); |
| 3695 // Once we've dropped the lock, we realize the main thread is responsive. | 3722 // Once we've dropped the lock, we realize the main thread is responsive. |
| 3696 DropQueueingTimeEstimatorLock(); | 3723 DropQueueingTimeEstimatorLock(); |
| 3697 EXPECT_FALSE(scheduler_->MainThreadSeemsUnresponsive()); | 3724 EXPECT_FALSE(scheduler_->MainThreadSeemsUnresponsive()); |
| 3698 } | 3725 } |
| 3699 | 3726 |
| 3700 } // namespace scheduler | 3727 } // namespace scheduler |
| 3701 } // namespace blink | 3728 } // namespace blink |
| OLD | NEW |