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

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

Issue 1971763003: scheduler: Detect when a main thread touch stream turns into a compositor gesture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments 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 26660654372bdb8c4b14e59063a73ade866adbd0..f58100c3feca527f7af0ca815e0dc2b5400d9efc 100644
--- a/components/scheduler/renderer/renderer_scheduler_impl_unittest.cc
+++ b/components/scheduler/renderer/renderer_scheduler_impl_unittest.cc
@@ -361,7 +361,11 @@ class RendererSchedulerImplTest : public testing::Test {
RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
}
- void SimulateMainThreadGestureWithCancelledScroll() {
+ // Simulate a gesture where there is an active compositor scroll, but no
+ // scroll updates are generated. Instead, the main thread handles
+ // non-canceleable touch events, making this an effectively main thread
+ // driven gesture.
+ void SimulateMainThreadGestureWithoutScrollUpdates() {
scheduler_->DidHandleInputEventOnCompositorThread(
FakeInputEvent(blink::WebInputEvent::TouchStart),
RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
@@ -376,6 +380,53 @@ class RendererSchedulerImplTest : public testing::Test {
RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
}
+ // Simulate a gesture where the main thread handles touch events but does not
+ // preventDefault(), allowing the gesture to turn into a compositor driven
+ // gesture. This function also verifies the necessary policy updates are
+ // scheduled.
+ void SimulateMainThreadGestureWithoutPreventDefault() {
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::TouchStart),
+ RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
+
+ // Touchstart policy update.
+ EXPECT_TRUE(scheduler_->PolicyNeedsUpdateForTesting());
+ EXPECT_EQ(UseCase::TOUCHSTART, ForceUpdatePolicyAndGetCurrentUseCase());
+ EXPECT_FALSE(scheduler_->PolicyNeedsUpdateForTesting());
+
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::TouchMove),
+ RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::GestureTapCancel),
+ RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::GestureScrollBegin),
+ RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
+
+ // Main thread gesture policy update.
+ EXPECT_TRUE(scheduler_->PolicyNeedsUpdateForTesting());
+ EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE,
+ ForceUpdatePolicyAndGetCurrentUseCase());
+ EXPECT_FALSE(scheduler_->PolicyNeedsUpdateForTesting());
+
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::GestureScrollUpdate),
+ RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::TouchScrollStarted),
+ RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
+ scheduler_->DidHandleInputEventOnCompositorThread(
+ FakeInputEvent(blink::WebInputEvent::TouchMove),
+ RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
+
+ // Compositor thread gesture policy update.
+ EXPECT_TRUE(scheduler_->PolicyNeedsUpdateForTesting());
+ EXPECT_EQ(UseCase::COMPOSITOR_GESTURE,
+ ForceUpdatePolicyAndGetCurrentUseCase());
+ EXPECT_FALSE(scheduler_->PolicyNeedsUpdateForTesting());
+ }
+
void SimulateMainThreadGestureStart(TouchEventPolicy touch_event_policy,
blink::WebInputEvent::Type gesture_type) {
if (touch_event_policy == TouchEventPolicy::SEND_TOUCH_START) {
@@ -814,13 +865,13 @@ TEST_F(RendererSchedulerImplTest,
}
TEST_F(RendererSchedulerImplTest,
- TestCompositorPolicy_MainThreadHandlesInput_WithCancelledScroll) {
+ TestCompositorPolicy_MainThreadHandlesInput_WithoutScrollUpdates) {
std::vector<std::string> run_order;
PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
EnableIdleTasks();
- SimulateMainThreadGestureWithCancelledScroll();
+ SimulateMainThreadGestureWithoutScrollUpdates();
RunUntilIdle();
EXPECT_THAT(run_order,
testing::ElementsAre(std::string("C1"), std::string("C2"),
@@ -830,6 +881,22 @@ TEST_F(RendererSchedulerImplTest,
}
TEST_F(RendererSchedulerImplTest,
+ TestCompositorPolicy_MainThreadHandlesInput_WithoutPreventDefault) {
+ std::vector<std::string> run_order;
+ PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
+
+ scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
+ EnableIdleTasks();
+ SimulateMainThreadGestureWithoutPreventDefault();
+ RunUntilIdle();
+ EXPECT_THAT(run_order,
+ testing::ElementsAre(std::string("L1"), std::string("D1"),
+ std::string("D2"), std::string("I1"),
+ std::string("C1"), std::string("C2")));
+ EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, CurrentUseCase());
+}
+
+TEST_F(RendererSchedulerImplTest,
TestCompositorPolicy_CompositorHandlesInput_LongGestureDuration) {
scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
EnableIdleTasks();
« 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