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 |