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

Unified Diff: components/scheduler/renderer/renderer_scheduler_impl_unittest.cc

Issue 1950913005: scheduler: Only prioritize rAF if it is fast (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/scheduler/renderer/renderer_scheduler_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/scheduler/renderer/renderer_scheduler_impl_unittest.cc
diff --git a/components/scheduler/renderer/renderer_scheduler_impl_unittest.cc b/components/scheduler/renderer/renderer_scheduler_impl_unittest.cc
index 6cd96dcd8cbc458b143e55902b61624115868453..1127f88c26df0af7d354a725bb208e41c900d665 100644
--- a/components/scheduler/renderer/renderer_scheduler_impl_unittest.cc
+++ b/components/scheduler/renderer/renderer_scheduler_impl_unittest.cc
@@ -2806,4 +2806,85 @@ TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_TouchStartDuringFling) {
ForceUpdatePolicyAndGetCurrentUseCase());
}
+TEST_F(RendererSchedulerImplTest, SYNCHRONIZED_GESTURE_CompositingExpensive) {
+ SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START);
+
+ // With the compositor task taking 20ms, there is not enough time to run
+ // other tasks in the same 16ms frame. To avoid starvation, compositing tasks
+ // should therefore not get prioritized.
+ std::vector<std::string> run_order;
+ for (int i = 0; i < 1000; i++)
+ PostTestTasks(&run_order, "T1");
+
+ for (int i = 0; i < 100; i++) {
+ cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create(
+ BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
+ base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL);
+ begin_frame_args.on_critical_path = true;
+ scheduler_->WillBeginFrame(begin_frame_args);
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate),
+ RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
+
+ simulate_compositor_task_ran_ = false;
+ compositor_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask,
+ base::Unretained(this),
+ base::TimeDelta::FromMilliseconds(20)));
+
+ mock_task_runner_->RunTasksWhile(
+ base::Bind(&RendererSchedulerImplTest::SimulatedCompositorTaskPending,
+ base::Unretained(this)));
+ EXPECT_EQ(UseCase::SYNCHRONIZED_GESTURE, CurrentUseCase()) << "i = " << i;
+ }
+
+ // Timer tasks should not have been starved by the expensive compositor
+ // tasks.
+ EXPECT_EQ(TaskQueue::NORMAL_PRIORITY,
+ scheduler_->CompositorTaskRunner()->GetQueuePriority());
+ EXPECT_EQ(1000u, run_order.size());
+}
+
+TEST_F(RendererSchedulerImplTest, MAIN_THREAD_GESTURE_CompositingExpensive) {
+ SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START,
+ blink::WebInputEvent::GestureScrollBegin);
+
+ // With the compositor task taking 20ms, there is not enough time to run
+ // other tasks in the same 16ms frame. To avoid starvation, compositing tasks
+ // should therefore not get prioritized.
+ std::vector<std::string> run_order;
+ for (int i = 0; i < 1000; i++)
+ PostTestTasks(&run_order, "T1");
+
+ for (int i = 0; i < 100; i++) {
+ cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create(
+ BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
+ base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL);
+ begin_frame_args.on_critical_path = true;
+ scheduler_->WillBeginFrame(begin_frame_args);
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate),
+ RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
+
+ simulate_compositor_task_ran_ = false;
+ compositor_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask,
+ base::Unretained(this),
+ base::TimeDelta::FromMilliseconds(20)));
+
+ mock_task_runner_->RunTasksWhile(
+ base::Bind(&RendererSchedulerImplTest::SimulatedCompositorTaskPending,
+ base::Unretained(this)));
+ EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()) << "i = " << i;
+ }
+
+ // Timer tasks should not have been starved by the expensive compositor
+ // tasks.
+ EXPECT_EQ(TaskQueue::NORMAL_PRIORITY,
+ scheduler_->CompositorTaskRunner()->GetQueuePriority());
+ EXPECT_EQ(1000u, run_order.size());
+}
+
} // namespace scheduler
« no previous file with comments | « components/scheduler/renderer/renderer_scheduler_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698