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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698