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

Unified Diff: content/renderer/input/main_thread_event_queue_unittest.cc

Issue 2621303004: Keep track of coalesced events in main thread event queue (Closed)
Patch Set: Rebase Created 3 years, 11 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
Index: content/renderer/input/main_thread_event_queue_unittest.cc
diff --git a/content/renderer/input/main_thread_event_queue_unittest.cc b/content/renderer/input/main_thread_event_queue_unittest.cc
index 3eec236e186e590b50e82ce7c572a41cc901a452..dda0969c4a3683b047a611814703bccb80101a83 100644
--- a/content/renderer/input/main_thread_event_queue_unittest.cc
+++ b/content/renderer/input/main_thread_event_queue_unittest.cc
@@ -70,12 +70,15 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>,
}
void HandleEventOnMainThread(int routing_id,
- const blink::WebInputEvent* event,
+ const blink::WebCoalescedInputEvent* event,
const ui::LatencyInfo& latency,
InputEventDispatchType type) override {
EXPECT_EQ(kTestRoutingID, routing_id);
- handled_events_.push_back(ui::WebInputEventTraits::Clone(*event));
- queue_->EventHandled(event->type(), INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ handled_events_.push_back(blink::WebCoalescedInputEvent(
+ event->event(), event->getCoalescedEventsPointers()));
+
+ queue_->EventHandled(event->event().type(),
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
}
void SendInputEventAck(int routing_id,
@@ -125,7 +128,8 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>,
scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_;
blink::scheduler::MockRendererScheduler renderer_scheduler_;
scoped_refptr<MainThreadEventQueue> queue_;
- std::vector<blink::WebScopedInputEvent> handled_events_;
+ std::vector<blink::WebCoalescedInputEvent> handled_events_;
+
std::vector<uint32_t> additional_acked_events_;
int raf_aligned_input_setting_;
bool needs_main_frame_;
@@ -154,12 +158,16 @@ TEST_P(MainThreadEventQueueTest, NonBlockingWheel) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(2u, handled_events_.size());
+ for (const auto& coalesced_event : handled_events_) {
+ EXPECT_EQ(2u, coalesced_event.coalescedEventSize());
+ }
{
- EXPECT_EQ(kEvents[0].size(), handled_events_.at(0)->size());
- EXPECT_EQ(kEvents[0].type(), handled_events_.at(0)->type());
+ EXPECT_EQ(kEvents[0].size(), handled_events_.at(0).event().size());
+ EXPECT_EQ(kEvents[0].type(), handled_events_.at(0).event().type());
const WebMouseWheelEvent* last_wheel_event =
- static_cast<const WebMouseWheelEvent*>(handled_events_.at(0).get());
+ static_cast<const WebMouseWheelEvent*>(
+ handled_events_.at(0).eventPointer());
EXPECT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive,
last_wheel_event->dispatchType);
WebMouseWheelEvent coalesced_event = kEvents[0];
@@ -170,14 +178,52 @@ TEST_P(MainThreadEventQueueTest, NonBlockingWheel) {
}
{
+ WebMouseWheelEvent coalesced_event = kEvents[0];
+ std::vector<const WebInputEvent*> coalesced_events =
+ handled_events_[0].getCoalescedEventsPointers();
+ const WebMouseWheelEvent* coalesced_wheel_event0 =
+ static_cast<const WebMouseWheelEvent*>(coalesced_events[0]);
+ coalesced_event.dispatchType =
+ WebInputEvent::DispatchType::ListenersNonBlockingPassive;
+ EXPECT_EQ(coalesced_event, *coalesced_wheel_event0);
+
+ coalesced_event = kEvents[1];
+ const WebMouseWheelEvent* coalesced_wheel_event1 =
+ static_cast<const WebMouseWheelEvent*>(coalesced_events[1]);
+ coalesced_event.dispatchType =
+ WebInputEvent::DispatchType::ListenersNonBlockingPassive;
+ EXPECT_EQ(coalesced_event, *coalesced_wheel_event1);
+ }
+
+ {
const WebMouseWheelEvent* last_wheel_event =
- static_cast<const WebMouseWheelEvent*>(handled_events_.at(1).get());
+ static_cast<const WebMouseWheelEvent*>(
+ handled_events_.at(1).eventPointer());
WebMouseWheelEvent coalesced_event = kEvents[2];
ui::Coalesce(kEvents[3], &coalesced_event);
coalesced_event.dispatchType =
WebInputEvent::DispatchType::ListenersNonBlockingPassive;
EXPECT_EQ(coalesced_event, *last_wheel_event);
}
+
+ {
+ WebMouseWheelEvent coalesced_event = kEvents[2];
+ std::vector<const WebInputEvent*> coalesced_events =
+ handled_events_[1].getCoalescedEventsPointers();
+ const WebMouseWheelEvent* coalesced_wheel_event0 =
+ static_cast<const WebMouseWheelEvent*>(coalesced_events[0]);
+ coalesced_event.dispatchType =
+ WebInputEvent::DispatchType::ListenersNonBlockingPassive;
+ EXPECT_EQ(coalesced_event, *coalesced_wheel_event0);
+
+ coalesced_event = kEvents[3];
+ const WebMouseWheelEvent* coalesced_wheel_event1 =
+ static_cast<const WebMouseWheelEvent*>(coalesced_events[1]);
+ coalesced_event.dispatchType =
+ WebInputEvent::DispatchType::ListenersNonBlockingPassive;
+ EXPECT_EQ(coalesced_event, *coalesced_wheel_event1);
+ }
+
histogram_tester.ExpectUniqueSample(kCoalescedCountHistogram, 1, 2);
}
@@ -204,31 +250,67 @@ TEST_P(MainThreadEventQueueTest, NonBlockingTouch) {
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(3u, handled_events_.size());
- EXPECT_EQ(kEvents[0].size(), handled_events_.at(0)->size());
- EXPECT_EQ(kEvents[0].type(), handled_events_.at(0)->type());
+ EXPECT_EQ(kEvents[0].size(), handled_events_.at(0).event().size());
+ EXPECT_EQ(kEvents[0].type(), handled_events_.at(0).event().type());
const WebTouchEvent* last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(0).eventPointer());
kEvents[0].dispatchType =
WebInputEvent::DispatchType::ListenersNonBlockingPassive;
EXPECT_EQ(kEvents[0], *last_touch_event);
- EXPECT_EQ(kEvents[1].size(), handled_events_.at(1)->size());
- EXPECT_EQ(kEvents[1].type(), handled_events_.at(1)->type());
+ {
+ EXPECT_EQ(1u, handled_events_[0].coalescedEventSize());
+ const WebTouchEvent* coalesced_touch_event =
+ static_cast<const WebTouchEvent*>(
+ handled_events_[0].getCoalescedEventsPointers()[0]);
+ EXPECT_EQ(kEvents[0], *coalesced_touch_event);
+ }
+
+ EXPECT_EQ(kEvents[1].size(), handled_events_.at(1).event().size());
+ EXPECT_EQ(kEvents[1].type(), handled_events_.at(1).event().type());
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
kEvents[1].dispatchType =
WebInputEvent::DispatchType::ListenersNonBlockingPassive;
EXPECT_EQ(kEvents[1], *last_touch_event);
- EXPECT_EQ(kEvents[2].size(), handled_events_.at(1)->size());
- EXPECT_EQ(kEvents[2].type(), handled_events_.at(2)->type());
+ {
+ EXPECT_EQ(1u, handled_events_[1].coalescedEventSize());
+ const WebTouchEvent* coalesced_touch_event =
+ static_cast<const WebTouchEvent*>(
+ handled_events_[1].getCoalescedEventsPointers()[0]);
+ EXPECT_EQ(kEvents[1], *coalesced_touch_event);
+ }
+
+ EXPECT_EQ(kEvents[2].size(), handled_events_.at(1).event().size());
+ EXPECT_EQ(kEvents[2].type(), handled_events_.at(2).event().type());
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(2).eventPointer());
WebTouchEvent coalesced_event = kEvents[2];
ui::Coalesce(kEvents[3], &coalesced_event);
coalesced_event.dispatchType =
WebInputEvent::DispatchType::ListenersNonBlockingPassive;
EXPECT_EQ(coalesced_event, *last_touch_event);
+
+ {
+ EXPECT_EQ(2u, handled_events_[2].coalescedEventSize());
+ WebTouchEvent coalesced_event = kEvents[2];
+ std::vector<const WebInputEvent*> coalesced_events =
+ handled_events_[2].getCoalescedEventsPointers();
+ const WebTouchEvent* coalesced_touch_event0 =
+ static_cast<const WebTouchEvent*>(coalesced_events[0]);
+ coalesced_event.dispatchType =
+ WebInputEvent::DispatchType::ListenersNonBlockingPassive;
+ EXPECT_EQ(coalesced_event, *coalesced_touch_event0);
+
+ coalesced_event = kEvents[3];
+ const WebTouchEvent* coalesced_touch_event1 =
+ static_cast<const WebTouchEvent*>(coalesced_events[1]);
+ coalesced_event.dispatchType =
+ WebInputEvent::DispatchType::ListenersNonBlockingPassive;
+ EXPECT_EQ(coalesced_event, *coalesced_touch_event1);
+ }
+
histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 0, 1);
histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 1, 1);
}
@@ -297,10 +379,11 @@ TEST_P(MainThreadEventQueueTest, InterleavedEvents) {
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(2u, handled_events_.size());
{
- EXPECT_EQ(kWheelEvents[0].size(), handled_events_.at(0)->size());
- EXPECT_EQ(kWheelEvents[0].type(), handled_events_.at(0)->type());
+ EXPECT_EQ(kWheelEvents[0].size(), handled_events_.at(0).event().size());
+ EXPECT_EQ(kWheelEvents[0].type(), handled_events_.at(0).event().type());
const WebMouseWheelEvent* last_wheel_event =
- static_cast<const WebMouseWheelEvent*>(handled_events_.at(0).get());
+ static_cast<const WebMouseWheelEvent*>(
+ handled_events_.at(0).eventPointer());
EXPECT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive,
last_wheel_event->dispatchType);
WebMouseWheelEvent coalesced_event = kWheelEvents[0];
@@ -310,10 +393,10 @@ TEST_P(MainThreadEventQueueTest, InterleavedEvents) {
EXPECT_EQ(coalesced_event, *last_wheel_event);
}
{
- EXPECT_EQ(kTouchEvents[0].size(), handled_events_.at(1)->size());
- EXPECT_EQ(kTouchEvents[0].type(), handled_events_.at(1)->type());
+ EXPECT_EQ(kTouchEvents[0].size(), handled_events_.at(1).event().size());
+ EXPECT_EQ(kTouchEvents[0].type(), handled_events_.at(1).event().type());
const WebTouchEvent* last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
WebTouchEvent coalesced_event = kTouchEvents[0];
ui::Coalesce(kTouchEvents[1], &coalesced_event);
coalesced_event.dispatchType =
@@ -503,11 +586,11 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(1u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(0)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(0)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(0).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(0).event().type());
EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling());
const WebTouchEvent* last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(0).eventPointer());
kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling;
EXPECT_EQ(kEvents, *last_touch_event);
@@ -520,11 +603,11 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(2u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(1)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(1)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(1).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(1).event().type());
EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling());
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling;
EXPECT_EQ(kEvents, *last_touch_event);
@@ -535,11 +618,11 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(3u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(2)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(2)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(2).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(2).event().type());
EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(2).eventPointer());
EXPECT_EQ(kEvents, *last_touch_event);
kEvents.ReleasePoint(0);
@@ -548,11 +631,11 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(4u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(3)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(3)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(3).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(3).event().type());
EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(3).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(3).eventPointer());
EXPECT_EQ(kEvents, *last_touch_event);
}
@@ -567,12 +650,12 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(1u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(0)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(0)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(0).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(0).event().type());
EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
const WebTouchEvent* last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(0).eventPointer());
EXPECT_EQ(kEvents, *last_touch_event);
set_enable_fling_passive_listener_flag(false);
@@ -581,12 +664,12 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(2u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(1)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(1)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(1).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(1).event().type());
EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
EXPECT_EQ(kEvents, *last_touch_event);
set_enable_fling_passive_listener_flag(true);
@@ -595,12 +678,12 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(3u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(2)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(2)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(2).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(2).event().type());
EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(2).eventPointer());
EXPECT_EQ(kEvents, *last_touch_event);
kEvents.MovePoint(0, 30, 30);
@@ -609,12 +692,12 @@ TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) {
EXPECT_FALSE(main_task_runner_->HasPendingTask());
EXPECT_EQ(0u, event_queue().size());
EXPECT_EQ(4u, handled_events_.size());
- EXPECT_EQ(kEvents.size(), handled_events_.at(3)->size());
- EXPECT_EQ(kEvents.type(), handled_events_.at(3)->type());
+ EXPECT_EQ(kEvents.size(), handled_events_.at(3).event().size());
+ EXPECT_EQ(kEvents.type(), handled_events_.at(3).event().type());
EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
last_touch_event =
- static_cast<const WebTouchEvent*>(handled_events_.at(3).get());
+ static_cast<const WebTouchEvent*>(handled_events_.at(3).eventPointer());
EXPECT_EQ(kEvents, *last_touch_event);
}
« no previous file with comments | « content/renderer/input/main_thread_event_queue.cc ('k') | content/renderer/input/render_widget_input_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698