| 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 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 // Only one of mock_task_runner_ or message_loop_ should be set. | 306 // Only one of mock_task_runner_ or message_loop_ should be set. |
| 305 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); | 307 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); |
| 306 if (mock_task_runner_.get()) | 308 if (mock_task_runner_.get()) |
| 307 mock_task_runner_->RunUntilIdle(); | 309 mock_task_runner_->RunUntilIdle(); |
| 308 else | 310 else |
| 309 base::RunLoop().RunUntilIdle(); | 311 base::RunLoop().RunUntilIdle(); |
| 310 } | 312 } |
| 311 | 313 |
| 312 void DoMainFrame() { | 314 void DoMainFrame() { |
| 313 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 315 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 314 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 316 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 315 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 317 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 318 cc::BeginFrameArgs::NORMAL); |
| 316 begin_frame_args.on_critical_path = false; | 319 begin_frame_args.on_critical_path = false; |
| 317 scheduler_->WillBeginFrame(begin_frame_args); | 320 scheduler_->WillBeginFrame(begin_frame_args); |
| 318 scheduler_->DidCommitFrameToCompositor(); | 321 scheduler_->DidCommitFrameToCompositor(); |
| 319 } | 322 } |
| 320 | 323 |
| 321 void DoMainFrameOnCriticalPath() { | 324 void DoMainFrameOnCriticalPath() { |
| 322 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 325 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 323 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 326 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 324 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 327 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 328 cc::BeginFrameArgs::NORMAL); |
| 325 begin_frame_args.on_critical_path = true; | 329 begin_frame_args.on_critical_path = true; |
| 326 scheduler_->WillBeginFrame(begin_frame_args); | 330 scheduler_->WillBeginFrame(begin_frame_args); |
| 327 } | 331 } |
| 328 | 332 |
| 329 void ForceTouchStartToBeExpectedSoon() { | 333 void ForceTouchStartToBeExpectedSoon() { |
| 330 scheduler_->DidHandleInputEventOnCompositorThread( | 334 scheduler_->DidHandleInputEventOnCompositorThread( |
| 331 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 335 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 332 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 336 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 333 scheduler_->DidHandleInputEventOnCompositorThread( | 337 scheduler_->DidHandleInputEventOnCompositorThread( |
| 334 FakeInputEvent(blink::WebInputEvent::GestureScrollEnd), | 338 FakeInputEvent(blink::WebInputEvent::GestureScrollEnd), |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 | 645 |
| 642 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; | 646 scoped_refptr<SchedulerTqmDelegate> main_task_runner_; |
| 643 std::unique_ptr<RendererSchedulerImplForTest> scheduler_; | 647 std::unique_ptr<RendererSchedulerImplForTest> scheduler_; |
| 644 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; | 648 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; |
| 645 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; | 649 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; |
| 646 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; | 650 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; |
| 647 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; | 651 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; |
| 648 scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner_; | 652 scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner_; |
| 649 bool simulate_timer_task_ran_; | 653 bool simulate_timer_task_ran_; |
| 650 bool simulate_compositor_task_ran_; | 654 bool simulate_compositor_task_ran_; |
| 655 uint64_t next_begin_frame_number_ = 1; |
| 651 | 656 |
| 652 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); | 657 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); |
| 653 }; | 658 }; |
| 654 | 659 |
| 655 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { | 660 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { |
| 656 std::vector<std::string> run_order; | 661 std::vector<std::string> run_order; |
| 657 PostTestTasks(&run_order, "D1 D2 D3 D4"); | 662 PostTestTasks(&run_order, "D1 D2 D3 D4"); |
| 658 | 663 |
| 659 RunUntilIdle(); | 664 RunUntilIdle(); |
| 660 EXPECT_THAT(run_order, | 665 EXPECT_THAT(run_order, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 689 base::TimeTicks deadline_in_task; | 694 base::TimeTicks deadline_in_task; |
| 690 | 695 |
| 691 clock_->Advance(base::TimeDelta::FromMilliseconds(100)); | 696 clock_->Advance(base::TimeDelta::FromMilliseconds(100)); |
| 692 idle_task_runner_->PostIdleTask( | 697 idle_task_runner_->PostIdleTask( |
| 693 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); | 698 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| 694 | 699 |
| 695 RunUntilIdle(); | 700 RunUntilIdle(); |
| 696 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. | 701 EXPECT_EQ(0, run_count); // Shouldn't run yet as no WillBeginFrame. |
| 697 | 702 |
| 698 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 703 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 699 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 704 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 700 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 705 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 706 cc::BeginFrameArgs::NORMAL)); |
| 701 RunUntilIdle(); | 707 RunUntilIdle(); |
| 702 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. | 708 EXPECT_EQ(0, run_count); // Shouldn't run as no DidCommitFrameToCompositor. |
| 703 | 709 |
| 704 clock_->Advance(base::TimeDelta::FromMilliseconds(1200)); | 710 clock_->Advance(base::TimeDelta::FromMilliseconds(1200)); |
| 705 scheduler_->DidCommitFrameToCompositor(); | 711 scheduler_->DidCommitFrameToCompositor(); |
| 706 RunUntilIdle(); | 712 RunUntilIdle(); |
| 707 EXPECT_EQ(0, run_count); // We missed the deadline. | 713 EXPECT_EQ(0, run_count); // We missed the deadline. |
| 708 | 714 |
| 709 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 715 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 710 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 716 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 711 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 717 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 718 cc::BeginFrameArgs::NORMAL)); |
| 712 clock_->Advance(base::TimeDelta::FromMilliseconds(800)); | 719 clock_->Advance(base::TimeDelta::FromMilliseconds(800)); |
| 713 scheduler_->DidCommitFrameToCompositor(); | 720 scheduler_->DidCommitFrameToCompositor(); |
| 714 RunUntilIdle(); | 721 RunUntilIdle(); |
| 715 EXPECT_EQ(1, run_count); | 722 EXPECT_EQ(1, run_count); |
| 716 EXPECT_EQ(expected_deadline, deadline_in_task); | 723 EXPECT_EQ(expected_deadline, deadline_in_task); |
| 717 } | 724 } |
| 718 | 725 |
| 719 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { | 726 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { |
| 720 int run_count = 0; | 727 int run_count = 0; |
| 721 | 728 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 | 768 |
| 762 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { | 769 TEST_F(RendererSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { |
| 763 int run_count = 0; | 770 int run_count = 0; |
| 764 | 771 |
| 765 base::TimeTicks deadline_in_task; | 772 base::TimeTicks deadline_in_task; |
| 766 idle_task_runner_->PostIdleTask( | 773 idle_task_runner_->PostIdleTask( |
| 767 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); | 774 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); |
| 768 | 775 |
| 769 // Trigger the beginning of an idle period for 1000ms. | 776 // Trigger the beginning of an idle period for 1000ms. |
| 770 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 777 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 771 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 778 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 772 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 779 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 780 cc::BeginFrameArgs::NORMAL)); |
| 773 DoMainFrame(); | 781 DoMainFrame(); |
| 774 | 782 |
| 775 // End the idle period early (after 500ms), and send a WillBeginFrame which | 783 // End the idle period early (after 500ms), and send a WillBeginFrame which |
| 776 // specifies that the next idle period should end 1000ms from now. | 784 // specifies that the next idle period should end 1000ms from now. |
| 777 clock_->Advance(base::TimeDelta::FromMilliseconds(500)); | 785 clock_->Advance(base::TimeDelta::FromMilliseconds(500)); |
| 778 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 786 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 779 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 787 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 780 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 788 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 789 cc::BeginFrameArgs::NORMAL)); |
| 781 | 790 |
| 782 RunUntilIdle(); | 791 RunUntilIdle(); |
| 783 EXPECT_EQ(0, run_count); // Not currently in an idle period. | 792 EXPECT_EQ(0, run_count); // Not currently in an idle period. |
| 784 | 793 |
| 785 // Trigger the start of the idle period before the task to end the previous | 794 // Trigger the start of the idle period before the task to end the previous |
| 786 // idle period has been triggered. | 795 // idle period has been triggered. |
| 787 clock_->Advance(base::TimeDelta::FromMilliseconds(400)); | 796 clock_->Advance(base::TimeDelta::FromMilliseconds(400)); |
| 788 scheduler_->DidCommitFrameToCompositor(); | 797 scheduler_->DidCommitFrameToCompositor(); |
| 789 | 798 |
| 790 // Post a task which simulates running until after the previous end idle | 799 // 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... |
| 2053 | 2062 |
| 2054 // Check that idle tasks don't run after the idle period ends with a | 2063 // Check that idle tasks don't run after the idle period ends with a |
| 2055 // new BeginMainFrame. | 2064 // new BeginMainFrame. |
| 2056 max_idle_task_reposts = 5; | 2065 max_idle_task_reposts = 5; |
| 2057 idle_task_runner_->PostIdleTask( | 2066 idle_task_runner_->PostIdleTask( |
| 2058 FROM_HERE, | 2067 FROM_HERE, |
| 2059 base::Bind(&RepostingUpdateClockIdleTestTask, | 2068 base::Bind(&RepostingUpdateClockIdleTestTask, |
| 2060 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(), | 2069 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(), |
| 2061 idle_task_runtime, &actual_deadlines)); | 2070 idle_task_runtime, &actual_deadlines)); |
| 2062 idle_task_runner_->PostIdleTask( | 2071 idle_task_runner_->PostIdleTask( |
| 2063 FROM_HERE, base::Bind(&WillBeginFrameIdleTask, | 2072 FROM_HERE, |
| 2064 base::Unretained(scheduler_.get()), clock_.get())); | 2073 base::Bind(&WillBeginFrameIdleTask, base::Unretained(scheduler_.get()), |
| 2074 next_begin_frame_number_++, clock_.get())); |
| 2065 RunUntilIdle(); | 2075 RunUntilIdle(); |
| 2066 EXPECT_EQ(4, run_count); | 2076 EXPECT_EQ(4, run_count); |
| 2067 } | 2077 } |
| 2068 | 2078 |
| 2069 | 2079 |
| 2070 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { | 2080 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { |
| 2071 base::TimeTicks deadline_in_task; | 2081 base::TimeTicks deadline_in_task; |
| 2072 int run_count = 0; | 2082 int run_count = 0; |
| 2073 | 2083 |
| 2074 idle_task_runner_->PostIdleTask( | 2084 idle_task_runner_->PostIdleTask( |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2133 FROM_HERE, | 2143 FROM_HERE, |
| 2134 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), | 2144 base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
| 2135 &can_exceed_idle_deadline, &run_count)); | 2145 &can_exceed_idle_deadline, &run_count)); |
| 2136 RunUntilIdle(); | 2146 RunUntilIdle(); |
| 2137 EXPECT_EQ(3, run_count); | 2147 EXPECT_EQ(3, run_count); |
| 2138 EXPECT_TRUE(can_exceed_idle_deadline); | 2148 EXPECT_TRUE(can_exceed_idle_deadline); |
| 2139 | 2149 |
| 2140 // Next long idle period will be for the maximum time, so | 2150 // Next long idle period will be for the maximum time, so |
| 2141 // CanExceedIdleDeadlineIfRequired should return true. | 2151 // CanExceedIdleDeadlineIfRequired should return true. |
| 2142 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( | 2152 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
| 2143 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2153 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2144 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); | 2154 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 2155 cc::BeginFrameArgs::NORMAL)); |
| 2145 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); | 2156 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); |
| 2146 } | 2157 } |
| 2147 | 2158 |
| 2148 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { | 2159 TEST_F(RendererSchedulerImplTest, TestRendererHiddenIdlePeriod) { |
| 2149 int run_count = 0; | 2160 int run_count = 0; |
| 2150 | 2161 |
| 2151 max_idle_task_reposts = 2; | 2162 max_idle_task_reposts = 2; |
| 2152 idle_task_runner_->PostIdleTask( | 2163 idle_task_runner_->PostIdleTask( |
| 2153 FROM_HERE, base::Bind(&RepostingIdleTestTask, | 2164 FROM_HERE, base::Bind(&RepostingIdleTestTask, |
| 2154 base::RetainedRef(idle_task_runner_), &run_count)); | 2165 base::RetainedRef(idle_task_runner_), &run_count)); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2329 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the | 2340 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the |
| 2330 // compositor to not be there and we don't want to make debugging impossible. | 2341 // compositor to not be there and we don't want to make debugging impossible. |
| 2331 scheduler_->DidHandleInputEventOnMainThread( | 2342 scheduler_->DidHandleInputEventOnMainThread( |
| 2332 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); | 2343 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); |
| 2333 } | 2344 } |
| 2334 | 2345 |
| 2335 TEST_F(RendererSchedulerImplTest, BeginMainFrameOnCriticalPath) { | 2346 TEST_F(RendererSchedulerImplTest, BeginMainFrameOnCriticalPath) { |
| 2336 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); | 2347 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); |
| 2337 | 2348 |
| 2338 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2349 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2339 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2350 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2340 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL); | 2351 base::TimeTicks(), base::TimeDelta::FromMilliseconds(1000), |
| 2352 cc::BeginFrameArgs::NORMAL); |
| 2341 scheduler_->WillBeginFrame(begin_frame_args); | 2353 scheduler_->WillBeginFrame(begin_frame_args); |
| 2342 ASSERT_TRUE(scheduler_->BeginMainFrameOnCriticalPath()); | 2354 ASSERT_TRUE(scheduler_->BeginMainFrameOnCriticalPath()); |
| 2343 | 2355 |
| 2344 begin_frame_args.on_critical_path = false; | 2356 begin_frame_args.on_critical_path = false; |
| 2345 scheduler_->WillBeginFrame(begin_frame_args); | 2357 scheduler_->WillBeginFrame(begin_frame_args); |
| 2346 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); | 2358 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); |
| 2347 } | 2359 } |
| 2348 | 2360 |
| 2349 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { | 2361 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { |
| 2350 scheduler_->Shutdown(); | 2362 scheduler_->Shutdown(); |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2706 | 2718 |
| 2707 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) { | 2719 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) { |
| 2708 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2720 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2709 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, | 2721 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, |
| 2710 blink::WebInputEvent::TouchMove); | 2722 blink::WebInputEvent::TouchMove); |
| 2711 RunUntilIdle(); | 2723 RunUntilIdle(); |
| 2712 for (int i = 0; i < 20; i++) { | 2724 for (int i = 0; i < 20; i++) { |
| 2713 simulate_timer_task_ran_ = false; | 2725 simulate_timer_task_ran_ = false; |
| 2714 | 2726 |
| 2715 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2727 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2716 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2728 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2717 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2729 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2730 cc::BeginFrameArgs::NORMAL); |
| 2718 begin_frame_args.on_critical_path = false; | 2731 begin_frame_args.on_critical_path = false; |
| 2719 scheduler_->WillBeginFrame(begin_frame_args); | 2732 scheduler_->WillBeginFrame(begin_frame_args); |
| 2720 | 2733 |
| 2721 compositor_task_runner_->PostTask( | 2734 compositor_task_runner_->PostTask( |
| 2722 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: | 2735 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: |
| 2723 SimulateMainThreadInputHandlingCompositorTask, | 2736 SimulateMainThreadInputHandlingCompositorTask, |
| 2724 base::Unretained(this), | 2737 base::Unretained(this), |
| 2725 base::TimeDelta::FromMilliseconds(8))); | 2738 base::TimeDelta::FromMilliseconds(8))); |
| 2726 timer_task_runner_->PostTask( | 2739 timer_task_runner_->PostTask( |
| 2727 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, | 2740 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2744 } | 2757 } |
| 2745 | 2758 |
| 2746 TEST_F(RendererSchedulerImplTest, | 2759 TEST_F(RendererSchedulerImplTest, |
| 2747 FourtyMsTimer_NotBlocked_CompositorScrolling) { | 2760 FourtyMsTimer_NotBlocked_CompositorScrolling) { |
| 2748 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2761 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2749 RunUntilIdle(); | 2762 RunUntilIdle(); |
| 2750 for (int i = 0; i < 20; i++) { | 2763 for (int i = 0; i < 20; i++) { |
| 2751 simulate_timer_task_ran_ = false; | 2764 simulate_timer_task_ran_ = false; |
| 2752 | 2765 |
| 2753 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2766 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2754 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2767 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2755 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2768 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2769 cc::BeginFrameArgs::NORMAL); |
| 2756 begin_frame_args.on_critical_path = false; | 2770 begin_frame_args.on_critical_path = false; |
| 2757 scheduler_->WillBeginFrame(begin_frame_args); | 2771 scheduler_->WillBeginFrame(begin_frame_args); |
| 2758 scheduler_->DidAnimateForInputOnCompositorThread(); | 2772 scheduler_->DidAnimateForInputOnCompositorThread(); |
| 2759 | 2773 |
| 2760 compositor_task_runner_->PostTask( | 2774 compositor_task_runner_->PostTask( |
| 2761 FROM_HERE, | 2775 FROM_HERE, |
| 2762 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 2776 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| 2763 base::Unretained(this), | 2777 base::Unretained(this), |
| 2764 base::TimeDelta::FromMilliseconds(8))); | 2778 base::TimeDelta::FromMilliseconds(8))); |
| 2765 timer_task_runner_->PostTask( | 2779 timer_task_runner_->PostTask( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2785 TEST_F(RendererSchedulerImplTest, | 2799 TEST_F(RendererSchedulerImplTest, |
| 2786 ExpensiveTimer_NotBlocked_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLING) { | 2800 ExpensiveTimer_NotBlocked_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLING) { |
| 2787 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 2801 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 2788 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, | 2802 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, |
| 2789 blink::WebInputEvent::TouchMove); | 2803 blink::WebInputEvent::TouchMove); |
| 2790 RunUntilIdle(); | 2804 RunUntilIdle(); |
| 2791 for (int i = 0; i < 20; i++) { | 2805 for (int i = 0; i < 20; i++) { |
| 2792 simulate_timer_task_ran_ = false; | 2806 simulate_timer_task_ran_ = false; |
| 2793 | 2807 |
| 2794 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2808 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2795 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2809 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2796 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2810 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2811 cc::BeginFrameArgs::NORMAL); |
| 2797 begin_frame_args.on_critical_path = false; | 2812 begin_frame_args.on_critical_path = false; |
| 2798 scheduler_->WillBeginFrame(begin_frame_args); | 2813 scheduler_->WillBeginFrame(begin_frame_args); |
| 2799 | 2814 |
| 2800 compositor_task_runner_->PostTask( | 2815 compositor_task_runner_->PostTask( |
| 2801 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: | 2816 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: |
| 2802 SimulateMainThreadInputHandlingCompositorTask, | 2817 SimulateMainThreadInputHandlingCompositorTask, |
| 2803 base::Unretained(this), | 2818 base::Unretained(this), |
| 2804 base::TimeDelta::FromMilliseconds(8))); | 2819 base::TimeDelta::FromMilliseconds(8))); |
| 2805 timer_task_runner_->PostTask( | 2820 timer_task_runner_->PostTask( |
| 2806 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, | 2821 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2849 EXPECT_EQ(UseCase::LOADING, ForceUpdatePolicyAndGetCurrentUseCase()); | 2864 EXPECT_EQ(UseCase::LOADING, ForceUpdatePolicyAndGetCurrentUseCase()); |
| 2850 EXPECT_EQ(rails_response_time(), | 2865 EXPECT_EQ(rails_response_time(), |
| 2851 scheduler_->EstimateLongestJankFreeTaskDuration()); | 2866 scheduler_->EstimateLongestJankFreeTaskDuration()); |
| 2852 } | 2867 } |
| 2853 | 2868 |
| 2854 TEST_F(RendererSchedulerImplTest, | 2869 TEST_F(RendererSchedulerImplTest, |
| 2855 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_GESTURE) { | 2870 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_GESTURE) { |
| 2856 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, | 2871 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, |
| 2857 blink::WebInputEvent::GestureScrollUpdate); | 2872 blink::WebInputEvent::GestureScrollUpdate); |
| 2858 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2873 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2859 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2874 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2860 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2875 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2876 cc::BeginFrameArgs::NORMAL); |
| 2861 begin_frame_args.on_critical_path = false; | 2877 begin_frame_args.on_critical_path = false; |
| 2862 scheduler_->WillBeginFrame(begin_frame_args); | 2878 scheduler_->WillBeginFrame(begin_frame_args); |
| 2863 | 2879 |
| 2864 compositor_task_runner_->PostTask( | 2880 compositor_task_runner_->PostTask( |
| 2865 FROM_HERE, | 2881 FROM_HERE, |
| 2866 base::Bind(&RendererSchedulerImplTest:: | 2882 base::Bind(&RendererSchedulerImplTest:: |
| 2867 SimulateMainThreadInputHandlingCompositorTask, | 2883 SimulateMainThreadInputHandlingCompositorTask, |
| 2868 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); | 2884 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); |
| 2869 | 2885 |
| 2870 RunUntilIdle(); | 2886 RunUntilIdle(); |
| 2871 EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()); | 2887 EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()); |
| 2872 | 2888 |
| 2873 // 16ms frame - 5ms compositor work = 11ms for other stuff. | 2889 // 16ms frame - 5ms compositor work = 11ms for other stuff. |
| 2874 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), | 2890 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), |
| 2875 scheduler_->EstimateLongestJankFreeTaskDuration()); | 2891 scheduler_->EstimateLongestJankFreeTaskDuration()); |
| 2876 } | 2892 } |
| 2877 | 2893 |
| 2878 TEST_F( | 2894 TEST_F( |
| 2879 RendererSchedulerImplTest, | 2895 RendererSchedulerImplTest, |
| 2880 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLIN
G) { | 2896 EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLIN
G) { |
| 2881 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2897 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2882 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2898 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2883 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2899 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2900 cc::BeginFrameArgs::NORMAL); |
| 2884 begin_frame_args.on_critical_path = false; | 2901 begin_frame_args.on_critical_path = false; |
| 2885 scheduler_->WillBeginFrame(begin_frame_args); | 2902 scheduler_->WillBeginFrame(begin_frame_args); |
| 2886 | 2903 |
| 2887 compositor_task_runner_->PostTask( | 2904 compositor_task_runner_->PostTask( |
| 2888 FROM_HERE, | 2905 FROM_HERE, |
| 2889 base::Bind(&RendererSchedulerImplTest:: | 2906 base::Bind(&RendererSchedulerImplTest:: |
| 2890 SimulateMainThreadInputHandlingCompositorTask, | 2907 SimulateMainThreadInputHandlingCompositorTask, |
| 2891 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); | 2908 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); |
| 2892 | 2909 |
| 2893 RunUntilIdle(); | 2910 RunUntilIdle(); |
| 2894 EXPECT_EQ(UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, CurrentUseCase()); | 2911 EXPECT_EQ(UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, CurrentUseCase()); |
| 2895 | 2912 |
| 2896 // 16ms frame - 5ms compositor work = 11ms for other stuff. | 2913 // 16ms frame - 5ms compositor work = 11ms for other stuff. |
| 2897 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), | 2914 EXPECT_EQ(base::TimeDelta::FromMilliseconds(11), |
| 2898 scheduler_->EstimateLongestJankFreeTaskDuration()); | 2915 scheduler_->EstimateLongestJankFreeTaskDuration()); |
| 2899 } | 2916 } |
| 2900 | 2917 |
| 2901 TEST_F(RendererSchedulerImplTest, | 2918 TEST_F(RendererSchedulerImplTest, |
| 2902 EstimateLongestJankFreeTaskDuration_UseCase_SYNCHRONIZED_GESTURE) { | 2919 EstimateLongestJankFreeTaskDuration_UseCase_SYNCHRONIZED_GESTURE) { |
| 2903 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); | 2920 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); |
| 2904 | 2921 |
| 2905 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 2922 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 2906 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 2923 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 2907 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 2924 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 2925 cc::BeginFrameArgs::NORMAL); |
| 2908 begin_frame_args.on_critical_path = true; | 2926 begin_frame_args.on_critical_path = true; |
| 2909 scheduler_->WillBeginFrame(begin_frame_args); | 2927 scheduler_->WillBeginFrame(begin_frame_args); |
| 2910 | 2928 |
| 2911 compositor_task_runner_->PostTask( | 2929 compositor_task_runner_->PostTask( |
| 2912 FROM_HERE, | 2930 FROM_HERE, |
| 2913 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 2931 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| 2914 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); | 2932 base::Unretained(this), base::TimeDelta::FromMilliseconds(5))); |
| 2915 | 2933 |
| 2916 RunUntilIdle(); | 2934 RunUntilIdle(); |
| 2917 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, CurrentUseCase()); | 2935 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, CurrentUseCase()); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3007 BlockedTimerNotification_SYNCHRONIZED_GESTURE) { | 3025 BlockedTimerNotification_SYNCHRONIZED_GESTURE) { |
| 3008 // Make sure we only report warnings during a high blocking threshold. | 3026 // Make sure we only report warnings during a high blocking threshold. |
| 3009 WebViewSchedulerImplForTest web_view_scheduler(scheduler_.get()); | 3027 WebViewSchedulerImplForTest web_view_scheduler(scheduler_.get()); |
| 3010 | 3028 |
| 3011 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 3029 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 3012 DoMainFrame(); | 3030 DoMainFrame(); |
| 3013 SimulateExpensiveTasks(timer_task_runner_); | 3031 SimulateExpensiveTasks(timer_task_runner_); |
| 3014 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); | 3032 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); |
| 3015 | 3033 |
| 3016 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3034 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3017 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3035 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3018 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3036 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3037 cc::BeginFrameArgs::NORMAL); |
| 3019 begin_frame_args.on_critical_path = true; | 3038 begin_frame_args.on_critical_path = true; |
| 3020 scheduler_->WillBeginFrame(begin_frame_args); | 3039 scheduler_->WillBeginFrame(begin_frame_args); |
| 3021 | 3040 |
| 3022 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, | 3041 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, |
| 3023 ForceUpdatePolicyAndGetCurrentUseCase()); | 3042 ForceUpdatePolicyAndGetCurrentUseCase()); |
| 3024 | 3043 |
| 3025 std::vector<std::string> run_order; | 3044 std::vector<std::string> run_order; |
| 3026 PostTestTasks(&run_order, "T1 T2"); | 3045 PostTestTasks(&run_order, "T1 T2"); |
| 3027 RunUntilIdle(); | 3046 RunUntilIdle(); |
| 3028 | 3047 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3052 | 3071 |
| 3053 size_t count = 0; | 3072 size_t count = 0; |
| 3054 // With the compositor task taking 10ms, there is not enough time to run this | 3073 // With the compositor task taking 10ms, there is not enough time to run this |
| 3055 // 7ms timer task in the 16ms frame. | 3074 // 7ms timer task in the 16ms frame. |
| 3056 scheduler_->TimerTaskRunner()->PostTask( | 3075 scheduler_->TimerTaskRunner()->PostTask( |
| 3057 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, | 3076 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, |
| 3058 scheduler_->TimerTaskRunner())); | 3077 scheduler_->TimerTaskRunner())); |
| 3059 | 3078 |
| 3060 for (int i = 0; i < 1000; i++) { | 3079 for (int i = 0; i < 1000; i++) { |
| 3061 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3080 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3062 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3081 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3063 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3082 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3083 cc::BeginFrameArgs::NORMAL); |
| 3064 begin_frame_args.on_critical_path = true; | 3084 begin_frame_args.on_critical_path = true; |
| 3065 scheduler_->WillBeginFrame(begin_frame_args); | 3085 scheduler_->WillBeginFrame(begin_frame_args); |
| 3066 scheduler_->DidHandleInputEventOnCompositorThread( | 3086 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3067 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3087 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3068 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3088 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3069 | 3089 |
| 3070 simulate_compositor_task_ran_ = false; | 3090 simulate_compositor_task_ran_ = false; |
| 3071 compositor_task_runner_->PostTask( | 3091 compositor_task_runner_->PostTask( |
| 3072 FROM_HERE, | 3092 FROM_HERE, |
| 3073 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3093 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3115 size_t count = 0; | 3135 size_t count = 0; |
| 3116 // With the compositor task taking 10ms, there is not enough time to run this | 3136 // With the compositor task taking 10ms, there is not enough time to run this |
| 3117 // 7ms timer task in the 16ms frame. | 3137 // 7ms timer task in the 16ms frame. |
| 3118 scheduler_->TimerTaskRunner()->PostTask( | 3138 scheduler_->TimerTaskRunner()->PostTask( |
| 3119 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, | 3139 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 7, |
| 3120 scheduler_->TimerTaskRunner())); | 3140 scheduler_->TimerTaskRunner())); |
| 3121 | 3141 |
| 3122 bool suspended = false; | 3142 bool suspended = false; |
| 3123 for (int i = 0; i < 1000; i++) { | 3143 for (int i = 0; i < 1000; i++) { |
| 3124 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3144 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3125 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3145 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3126 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3146 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3147 cc::BeginFrameArgs::NORMAL); |
| 3127 begin_frame_args.on_critical_path = true; | 3148 begin_frame_args.on_critical_path = true; |
| 3128 scheduler_->WillBeginFrame(begin_frame_args); | 3149 scheduler_->WillBeginFrame(begin_frame_args); |
| 3129 scheduler_->DidHandleInputEventOnCompositorThread( | 3150 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3130 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3151 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3131 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3152 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3132 | 3153 |
| 3133 simulate_compositor_task_ran_ = false; | 3154 simulate_compositor_task_ran_ = false; |
| 3134 compositor_task_runner_->PostTask( | 3155 compositor_task_runner_->PostTask( |
| 3135 FROM_HERE, | 3156 FROM_HERE, |
| 3136 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3157 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3172 | 3193 |
| 3173 size_t count = 0; | 3194 size_t count = 0; |
| 3174 // With the compositor task taking 10ms, there is enough time to run this 6ms | 3195 // With the compositor task taking 10ms, there is enough time to run this 6ms |
| 3175 // timer task in the 16ms frame. | 3196 // timer task in the 16ms frame. |
| 3176 scheduler_->TimerTaskRunner()->PostTask( | 3197 scheduler_->TimerTaskRunner()->PostTask( |
| 3177 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 6, | 3198 FROM_HERE, base::Bind(SlowCountingTask, &count, clock_.get(), 6, |
| 3178 scheduler_->TimerTaskRunner())); | 3199 scheduler_->TimerTaskRunner())); |
| 3179 | 3200 |
| 3180 for (int i = 0; i < 1000; i++) { | 3201 for (int i = 0; i < 1000; i++) { |
| 3181 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3202 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3182 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3203 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3183 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3204 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3205 cc::BeginFrameArgs::NORMAL); |
| 3184 begin_frame_args.on_critical_path = true; | 3206 begin_frame_args.on_critical_path = true; |
| 3185 scheduler_->WillBeginFrame(begin_frame_args); | 3207 scheduler_->WillBeginFrame(begin_frame_args); |
| 3186 scheduler_->DidHandleInputEventOnCompositorThread( | 3208 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3187 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3209 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3188 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3210 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3189 | 3211 |
| 3190 simulate_compositor_task_ran_ = false; | 3212 simulate_compositor_task_ran_ = false; |
| 3191 compositor_task_runner_->PostTask( | 3213 compositor_task_runner_->PostTask( |
| 3192 FROM_HERE, | 3214 FROM_HERE, |
| 3193 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3215 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3211 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); | 3233 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); |
| 3212 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); | 3234 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); |
| 3213 ForceTouchStartToBeExpectedSoon(); | 3235 ForceTouchStartToBeExpectedSoon(); |
| 3214 | 3236 |
| 3215 // Bump us into SYNCHRONIZED_GESTURE. | 3237 // Bump us into SYNCHRONIZED_GESTURE. |
| 3216 scheduler_->DidHandleInputEventOnCompositorThread( | 3238 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3217 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3239 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3218 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3240 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3219 | 3241 |
| 3220 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3242 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3221 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3243 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3222 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3244 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3245 cc::BeginFrameArgs::NORMAL); |
| 3223 begin_frame_args.on_critical_path = true; | 3246 begin_frame_args.on_critical_path = true; |
| 3224 scheduler_->WillBeginFrame(begin_frame_args); | 3247 scheduler_->WillBeginFrame(begin_frame_args); |
| 3225 | 3248 |
| 3226 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, | 3249 EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, |
| 3227 ForceUpdatePolicyAndGetCurrentUseCase()); | 3250 ForceUpdatePolicyAndGetCurrentUseCase()); |
| 3228 | 3251 |
| 3229 EXPECT_TRUE(TimerTasksSeemExpensive()); | 3252 EXPECT_TRUE(TimerTasksSeemExpensive()); |
| 3230 EXPECT_TRUE(TouchStartExpectedSoon()); | 3253 EXPECT_TRUE(TouchStartExpectedSoon()); |
| 3231 EXPECT_FALSE(scheduler_->TimerTaskRunner()->IsQueueEnabled()); | 3254 EXPECT_FALSE(scheduler_->TimerTaskRunner()->IsQueueEnabled()); |
| 3232 } | 3255 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3272 | 3295 |
| 3273 // With the compositor task taking 20ms, there is not enough time to run | 3296 // With the compositor task taking 20ms, there is not enough time to run |
| 3274 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks | 3297 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks |
| 3275 // should therefore not get prioritized. | 3298 // should therefore not get prioritized. |
| 3276 std::vector<std::string> run_order; | 3299 std::vector<std::string> run_order; |
| 3277 for (int i = 0; i < 1000; i++) | 3300 for (int i = 0; i < 1000; i++) |
| 3278 PostTestTasks(&run_order, "T1"); | 3301 PostTestTasks(&run_order, "T1"); |
| 3279 | 3302 |
| 3280 for (int i = 0; i < 100; i++) { | 3303 for (int i = 0; i < 100; i++) { |
| 3281 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3304 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3282 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3305 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3283 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3306 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3307 cc::BeginFrameArgs::NORMAL); |
| 3284 begin_frame_args.on_critical_path = true; | 3308 begin_frame_args.on_critical_path = true; |
| 3285 scheduler_->WillBeginFrame(begin_frame_args); | 3309 scheduler_->WillBeginFrame(begin_frame_args); |
| 3286 scheduler_->DidHandleInputEventOnCompositorThread( | 3310 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3287 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3311 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3288 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3312 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3289 | 3313 |
| 3290 simulate_compositor_task_ran_ = false; | 3314 simulate_compositor_task_ran_ = false; |
| 3291 compositor_task_runner_->PostTask( | 3315 compositor_task_runner_->PostTask( |
| 3292 FROM_HERE, | 3316 FROM_HERE, |
| 3293 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3317 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3313 | 3337 |
| 3314 // With the compositor task taking 20ms, there is not enough time to run | 3338 // With the compositor task taking 20ms, there is not enough time to run |
| 3315 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks | 3339 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks |
| 3316 // should therefore not get prioritized. | 3340 // should therefore not get prioritized. |
| 3317 std::vector<std::string> run_order; | 3341 std::vector<std::string> run_order; |
| 3318 for (int i = 0; i < 1000; i++) | 3342 for (int i = 0; i < 1000; i++) |
| 3319 PostTestTasks(&run_order, "T1"); | 3343 PostTestTasks(&run_order, "T1"); |
| 3320 | 3344 |
| 3321 for (int i = 0; i < 100; i++) { | 3345 for (int i = 0; i < 100; i++) { |
| 3322 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3346 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3323 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3347 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3324 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3348 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3349 cc::BeginFrameArgs::NORMAL); |
| 3325 begin_frame_args.on_critical_path = true; | 3350 begin_frame_args.on_critical_path = true; |
| 3326 scheduler_->WillBeginFrame(begin_frame_args); | 3351 scheduler_->WillBeginFrame(begin_frame_args); |
| 3327 scheduler_->DidHandleInputEventOnCompositorThread( | 3352 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3328 FakeInputEvent(blink::WebInputEvent::TouchMove), | 3353 FakeInputEvent(blink::WebInputEvent::TouchMove), |
| 3329 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); | 3354 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); |
| 3330 | 3355 |
| 3331 simulate_compositor_task_ran_ = false; | 3356 simulate_compositor_task_ran_ = false; |
| 3332 compositor_task_runner_->PostTask( | 3357 compositor_task_runner_->PostTask( |
| 3333 FROM_HERE, | 3358 FROM_HERE, |
| 3334 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3359 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3356 // With the compositor task taking 20ms, there is not enough time to run | 3381 // With the compositor task taking 20ms, there is not enough time to run |
| 3357 // other tasks in the same 16ms frame. However because this is a main thread | 3382 // other tasks in the same 16ms frame. However because this is a main thread |
| 3358 // gesture instead of custom main thread input handling, we allow the timer | 3383 // gesture instead of custom main thread input handling, we allow the timer |
| 3359 // tasks to be starved. | 3384 // tasks to be starved. |
| 3360 std::vector<std::string> run_order; | 3385 std::vector<std::string> run_order; |
| 3361 for (int i = 0; i < 1000; i++) | 3386 for (int i = 0; i < 1000; i++) |
| 3362 PostTestTasks(&run_order, "T1"); | 3387 PostTestTasks(&run_order, "T1"); |
| 3363 | 3388 |
| 3364 for (int i = 0; i < 100; i++) { | 3389 for (int i = 0; i < 100; i++) { |
| 3365 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3390 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3366 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3391 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3367 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3392 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3393 cc::BeginFrameArgs::NORMAL); |
| 3368 begin_frame_args.on_critical_path = true; | 3394 begin_frame_args.on_critical_path = true; |
| 3369 scheduler_->WillBeginFrame(begin_frame_args); | 3395 scheduler_->WillBeginFrame(begin_frame_args); |
| 3370 scheduler_->DidHandleInputEventOnCompositorThread( | 3396 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3371 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3397 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3372 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); | 3398 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); |
| 3373 | 3399 |
| 3374 simulate_compositor_task_ran_ = false; | 3400 simulate_compositor_task_ran_ = false; |
| 3375 compositor_task_runner_->PostTask( | 3401 compositor_task_runner_->PostTask( |
| 3376 FROM_HERE, | 3402 FROM_HERE, |
| 3377 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3403 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3480 scheduler_->TimerTaskRunner()->PostTask( | 3506 scheduler_->TimerTaskRunner()->PostTask( |
| 3481 FROM_HERE, base::Bind(SlowCountingTask, &timer_count, clock_.get(), 7, | 3507 FROM_HERE, base::Bind(SlowCountingTask, &timer_count, clock_.get(), 7, |
| 3482 scheduler_->TimerTaskRunner())); | 3508 scheduler_->TimerTaskRunner())); |
| 3483 unthrottled_task_runner->PostTask( | 3509 unthrottled_task_runner->PostTask( |
| 3484 FROM_HERE, base::Bind(SlowCountingTask, &unthrottled_count, clock_.get(), | 3510 FROM_HERE, base::Bind(SlowCountingTask, &unthrottled_count, clock_.get(), |
| 3485 7, unthrottled_task_runner)); | 3511 7, unthrottled_task_runner)); |
| 3486 scheduler_->SuspendTimerQueue(); | 3512 scheduler_->SuspendTimerQueue(); |
| 3487 | 3513 |
| 3488 for (int i = 0; i < 1000; i++) { | 3514 for (int i = 0; i < 1000; i++) { |
| 3489 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( | 3515 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( |
| 3490 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), | 3516 BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, clock_->NowTicks(), |
| 3491 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); | 3517 base::TimeTicks(), base::TimeDelta::FromMilliseconds(16), |
| 3518 cc::BeginFrameArgs::NORMAL); |
| 3492 begin_frame_args.on_critical_path = true; | 3519 begin_frame_args.on_critical_path = true; |
| 3493 scheduler_->WillBeginFrame(begin_frame_args); | 3520 scheduler_->WillBeginFrame(begin_frame_args); |
| 3494 scheduler_->DidHandleInputEventOnCompositorThread( | 3521 scheduler_->DidHandleInputEventOnCompositorThread( |
| 3495 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), | 3522 FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate), |
| 3496 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); | 3523 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); |
| 3497 | 3524 |
| 3498 simulate_compositor_task_ran_ = false; | 3525 simulate_compositor_task_ran_ = false; |
| 3499 compositor_task_runner_->PostTask( | 3526 compositor_task_runner_->PostTask( |
| 3500 FROM_HERE, | 3527 FROM_HERE, |
| 3501 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, | 3528 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3616 mock_task_runner_->RunUntilTime(base::TimeTicks() + | 3643 mock_task_runner_->RunUntilTime(base::TimeTicks() + |
| 3617 base::TimeDelta::FromMilliseconds(1500)); | 3644 base::TimeDelta::FromMilliseconds(1500)); |
| 3618 | 3645 |
| 3619 EXPECT_THAT(run_times, | 3646 EXPECT_THAT(run_times, |
| 3620 testing::ElementsAre(base::TimeTicks() + | 3647 testing::ElementsAre(base::TimeTicks() + |
| 3621 base::TimeDelta::FromMilliseconds(1300))); | 3648 base::TimeDelta::FromMilliseconds(1300))); |
| 3622 } | 3649 } |
| 3623 | 3650 |
| 3624 } // namespace scheduler | 3651 } // namespace scheduler |
| 3625 } // namespace blink | 3652 } // namespace blink |
| OLD | NEW |