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

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

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Brian's comments. Created 4 years 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
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | ui/android/DEPS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | ui/android/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698