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

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

Issue 1780953003: Change the non-blocking event queue to the main thread event queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_wheel_regression_5
Patch Set: Fix android Created 4 years, 9 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 | « content/renderer/input/input_event_filter.cc ('k') | content/renderer/input/input_handler_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/input/input_event_filter_unittest.cc
diff --git a/content/renderer/input/input_event_filter_unittest.cc b/content/renderer/input/input_event_filter_unittest.cc
index 4520228fb5438a75f0d66dd189e0a7c0b9fc600b..c20bd9cc3f79a62e64c5c48a70bb446a74d34ad7 100644
--- a/content/renderer/input/input_event_filter_unittest.cc
+++ b/content/renderer/input/input_event_filter_unittest.cc
@@ -59,9 +59,7 @@ class InputEventRecorder {
const WebInputEvent* event,
ui::LatencyInfo* latency_info) {
DCHECK_EQ(kTestRoutingID, routing_id);
-
records_.push_back(Record(event));
-
if (handle_events_) {
return INPUT_EVENT_ACK_STATE_CONSUMED;
} else if (send_to_widget_) {
@@ -113,9 +111,8 @@ class IPCMessageRecorder : public IPC::Listener {
void AddMessagesToFilter(IPC::MessageFilter* message_filter,
const std::vector<IPC::Message>& events) {
- for (size_t i = 0; i < events.size(); ++i) {
+ for (size_t i = 0; i < events.size(); ++i)
message_filter->OnMessageReceived(events[i]);
- }
base::MessageLoop::current()->RunUntilIdle();
}
@@ -128,7 +125,9 @@ void AddEventsToFilter(IPC::MessageFilter* message_filter,
for (size_t i = 0; i < count; ++i) {
messages.push_back(InputMsg_HandleInputEvent(
kTestRoutingID, &events[i], ui::LatencyInfo(),
- InputEventDispatchType::DISPATCH_TYPE_NORMAL));
+ WebInputEventTraits::ShouldBlockEventStream(events[i])
+ ? InputEventDispatchType::DISPATCH_TYPE_BLOCKING
+ : InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING));
}
AddMessagesToFilter(message_filter, messages);
@@ -264,9 +263,11 @@ TEST_F(InputEventFilterTest, PreserveRelativeOrder) {
SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseUp);
std::vector<IPC::Message> messages;
- messages.push_back(
- InputMsg_HandleInputEvent(kTestRoutingID, &mouse_down, ui::LatencyInfo(),
- InputEventDispatchType::DISPATCH_TYPE_NORMAL));
+ messages.push_back(InputMsg_HandleInputEvent(
+ kTestRoutingID, &mouse_down, ui::LatencyInfo(),
+ WebInputEventTraits::ShouldBlockEventStream(mouse_down)
+ ? InputEventDispatchType::DISPATCH_TYPE_BLOCKING
+ : InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING));
// Control where input events are delivered.
messages.push_back(InputMsg_MouseCaptureLost(kTestRoutingID));
messages.push_back(InputMsg_SetFocus(kTestRoutingID, true));
@@ -292,9 +293,11 @@ TEST_F(InputEventFilterTest, PreserveRelativeOrder) {
gfx::Point(), gfx::Point()));
messages.push_back(InputMsg_MoveCaret(kTestRoutingID, gfx::Point()));
- messages.push_back(
- InputMsg_HandleInputEvent(kTestRoutingID, &mouse_up, ui::LatencyInfo(),
- InputEventDispatchType::DISPATCH_TYPE_NORMAL));
+ messages.push_back(InputMsg_HandleInputEvent(
+ kTestRoutingID, &mouse_up, ui::LatencyInfo(),
+ WebInputEventTraits::ShouldBlockEventStream(mouse_up)
+ ? InputEventDispatchType::DISPATCH_TYPE_BLOCKING
+ : InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING));
AddMessagesToFilter(filter_.get(), messages);
// We should have sent all messages back to the main thread and preserved
@@ -325,22 +328,19 @@ TEST_F(InputEventFilterTest, NonBlockingWheel) {
EXPECT_EQ(1u, message_recorder_.message_count());
// Second event was queued; ack the first.
- filter_->NonBlockingInputEventHandled(kTestRoutingID,
- WebInputEvent::MouseWheel);
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::MouseWheel);
base::MessageLoop::current()->RunUntilIdle();
ASSERT_EQ(4u, ipc_sink_.message_count());
EXPECT_EQ(2u, message_recorder_.message_count());
// Third event won't be coalesced into the second because modifiers are
// different.
- filter_->NonBlockingInputEventHandled(kTestRoutingID,
- WebInputEvent::MouseWheel);
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::MouseWheel);
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(3u, message_recorder_.message_count());
// The last events will be coalesced.
- filter_->NonBlockingInputEventHandled(kTestRoutingID,
- WebInputEvent::MouseWheel);
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::MouseWheel);
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(3u, message_recorder_.message_count());
@@ -356,7 +356,7 @@ TEST_F(InputEventFilterTest, NonBlockingWheel) {
EXPECT_EQ(kEvents[i].size, event->size);
EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0);
- EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
+ EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
dispatch_type);
}
@@ -374,7 +374,7 @@ TEST_F(InputEventFilterTest, NonBlockingWheel) {
EXPECT_EQ(kEvents[2].size, event->size);
EXPECT_EQ(kEvents[2].deltaX + kEvents[3].deltaX, event->deltaX);
EXPECT_EQ(kEvents[2].deltaY + kEvents[3].deltaY, event->deltaY);
- EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
+ EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
dispatch_type);
}
}
@@ -402,22 +402,19 @@ TEST_F(InputEventFilterTest, NonBlockingTouch) {
EXPECT_EQ(1u, message_recorder_.message_count());
// Second event was queued; ack the first.
- filter_->NonBlockingInputEventHandled(kTestRoutingID,
- WebInputEvent::TouchStart);
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchStart);
base::MessageLoop::current()->RunUntilIdle();
ASSERT_EQ(4u, ipc_sink_.message_count());
EXPECT_EQ(2u, message_recorder_.message_count());
// Third event won't be coalesced into the second because modifiers are
// different.
- filter_->NonBlockingInputEventHandled(kTestRoutingID,
- WebInputEvent::TouchMove);
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchMove);
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(3u, message_recorder_.message_count());
// The last events will be coalesced.
- filter_->NonBlockingInputEventHandled(kTestRoutingID,
- WebInputEvent::TouchMove);
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchMove);
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(3u, message_recorder_.message_count());
@@ -433,7 +430,7 @@ TEST_F(InputEventFilterTest, NonBlockingTouch) {
EXPECT_EQ(kEvents[i].size, event->size);
EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0);
- EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
+ EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
dispatch_type);
}
@@ -452,7 +449,83 @@ TEST_F(InputEventFilterTest, NonBlockingTouch) {
EXPECT_EQ(1u, kEvents[3].touchesLength);
EXPECT_EQ(kEvents[3].touches[0].position.x, event->touches[0].position.x);
EXPECT_EQ(kEvents[3].touches[0].position.y, event->touches[0].position.y);
- EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING,
+ EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
+ dispatch_type);
+ }
+}
+
+TEST_F(InputEventFilterTest, IntermingledNonBlockingTouch) {
+ SyntheticWebTouchEvent kEvents[2];
+ kEvents[0].PressPoint(10, 10);
+ kEvents[1].PressPoint(10, 10);
+ kEvents[1].ReleasePoint(0);
+ SyntheticWebTouchEvent kBlockingEvents[1];
+ kBlockingEvents[0].PressPoint(10, 10);
+
+ filter_->DidAddInputHandler(kTestRoutingID);
+ event_recorder_.set_send_to_widget(true);
+ event_recorder_.set_passive(true);
+ AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents));
+ EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count());
+
+ event_recorder_.set_passive(false);
+ AddEventsToFilter(filter_.get(), kBlockingEvents, arraysize(kBlockingEvents));
+ EXPECT_EQ(arraysize(kEvents) + arraysize(kBlockingEvents),
+ event_recorder_.record_count());
+ ASSERT_EQ(3u, event_recorder_.record_count());
+
+ {
+ // First event is sent right away.
+ EXPECT_EQ(1u, message_recorder_.message_count());
+
+ const IPC::Message& message = message_recorder_.message_at(0);
+ ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type());
+ InputMsg_HandleInputEvent::Param params;
+ EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, &params));
+ const WebInputEvent* event = base::get<0>(params);
+ InputEventDispatchType dispatch_type = base::get<2>(params);
+
+ EXPECT_EQ(kEvents[0].size, event->size);
+ EXPECT_TRUE(memcmp(&kEvents[0], event, event->size) == 0);
+ EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
+ dispatch_type);
+ }
+
+ {
+ // Second event was queued; ack the first.
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchStart);
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_EQ(2u, message_recorder_.message_count());
+
+ const IPC::Message& message = message_recorder_.message_at(1);
+ ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type());
+ InputMsg_HandleInputEvent::Param params;
+ EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, &params));
+ const WebInputEvent* event = base::get<0>(params);
+ InputEventDispatchType dispatch_type = base::get<2>(params);
+
+ EXPECT_EQ(kEvents[1].size, event->size);
+ EXPECT_TRUE(memcmp(&kEvents[1], event, event->size) == 0);
+ EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN,
+ dispatch_type);
+ }
+
+ {
+ // Third event should be put in the queue.
+ filter_->NotifyInputEventHandled(kTestRoutingID, WebInputEvent::TouchEnd);
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_EQ(3u, message_recorder_.message_count());
+
+ const IPC::Message& message = message_recorder_.message_at(2);
+ ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type());
+ InputMsg_HandleInputEvent::Param params;
+ EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, &params));
+ const WebInputEvent* event = base::get<0>(params);
+ InputEventDispatchType dispatch_type = base::get<2>(params);
+
+ EXPECT_EQ(kBlockingEvents[0].size, event->size);
+ EXPECT_TRUE(memcmp(&kBlockingEvents[0], event, event->size) == 0);
+ EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_BLOCKING_NOTIFY_MAIN,
dispatch_type);
}
}
« no previous file with comments | « content/renderer/input/input_event_filter.cc ('k') | content/renderer/input/input_handler_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698