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

Unified Diff: content/browser/renderer_host/input/input_router_impl.cc

Issue 2162143002: Don't use PostTask queueing between compositor and main thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't ack mouse move right away send them unthrottled Created 4 years, 5 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/browser/renderer_host/input/input_router_impl.cc
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
index ab6ab3e5d40e55db4f257d9847b5ab8e3091ab49..e83bb5c6472749c31b065e090a0dbb3fdce09f60 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -79,7 +79,6 @@ InputRouterImpl::InputRouterImpl(IPC::Sender* sender,
frame_tree_node_id_(-1),
select_message_pending_(false),
move_caret_pending_(false),
- mouse_move_pending_(false),
current_ack_source_(ACK_SOURCE_NONE),
flush_requested_(false),
active_renderer_fling_count_(0),
@@ -188,21 +187,8 @@ void InputRouterImpl::SendTouchEvent(
// TouchpadTapSuppressionController.
void InputRouterImpl::SendMouseEventImmediately(
const MouseEventWithLatencyInfo& mouse_event) {
- // Avoid spamming the renderer with mouse move events. It is important
- // to note that WM_MOUSEMOVE events are anyways synthetic, but since our
- // thread is able to rapidly consume WM_MOUSEMOVE events, we may get way
- // more WM_MOUSEMOVE events than we wish to send to the renderer.
- if (mouse_event.event.type == WebInputEvent::MouseMove) {
- if (mouse_move_pending_) {
- if (!next_mouse_move_)
- next_mouse_move_.reset(new MouseEventWithLatencyInfo(mouse_event));
- else
- next_mouse_move_->CoalesceWith(mouse_event);
- return;
- }
- mouse_move_pending_ = true;
- current_mouse_move_ = mouse_event;
- }
+ if (mouse_event.event.type == blink::WebInputEvent::MouseMove)
+ mouse_move_queue_.push_back(mouse_event);
tdresser 2016/07/20 20:52:27 Don't we still only need the most recent mousemove
dtapuska 2016/07/27 05:29:00 Unfortunately with the latency info we need to hav
FilterAndSendWebInputEvent(mouse_event.event, mouse_event.latency);
}
@@ -243,7 +229,7 @@ void InputRouterImpl::RequestNotificationWhenFlushed() {
bool InputRouterImpl::HasPendingEvents() const {
return !touch_event_queue_.empty() || !gesture_event_queue_.empty() ||
- !key_queue_.empty() || mouse_move_pending_ ||
+ !key_queue_.empty() || !mouse_move_queue_.empty() ||
wheel_event_queue_.has_pending() || select_message_pending_ ||
move_caret_pending_ || active_renderer_fling_count_ > 0;
}
@@ -370,9 +356,6 @@ void InputRouterImpl::FilterAndSendWebInputEvent(
"step", "SendInputEventUI",
"frameTreeNodeId", frame_tree_node_id_);
- // Any input event cancels a pending mouse move event.
- next_mouse_move_.reset();
-
OfferToHandlers(input_event, latency_info);
}
@@ -408,7 +391,6 @@ bool InputRouterImpl::OfferToClient(const WebInputEvent& input_event,
case INPUT_EVENT_ACK_STATE_CONSUMED:
case INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS:
// Send the ACK and early exit.
- next_mouse_move_.reset();
ProcessInputEventAck(
input_event.type, filter_ack, latency_info,
WebInputEventTraits::GetUniqueTouchEventId(input_event), CLIENT);
@@ -591,17 +573,13 @@ void InputRouterImpl::ProcessMouseAck(blink::WebInputEvent::Type type,
if (type != WebInputEvent::MouseMove)
return;
- current_mouse_move_.latency.AddNewLatencyFrom(latency);
- ack_handler_->OnMouseEventAck(current_mouse_move_, ack_result);
-
- DCHECK(mouse_move_pending_);
- mouse_move_pending_ = false;
-
- if (next_mouse_move_) {
- DCHECK(next_mouse_move_->event.type == WebInputEvent::MouseMove);
- std::unique_ptr<MouseEventWithLatencyInfo> next_mouse_move =
- std::move(next_mouse_move_);
- SendMouseEvent(*next_mouse_move);
+ if (mouse_move_queue_.empty()) {
+ ack_handler_->OnUnexpectedEventAck(InputAckHandler::UNEXPECTED_ACK);
+ } else {
+ MouseEventWithLatencyInfo front_item = mouse_move_queue_.front();
+ front_item.latency.AddNewLatencyFrom(latency);
+ mouse_move_queue_.pop_front();
+ ack_handler_->OnMouseEventAck(front_item, ack_result);
}
}

Powered by Google App Engine
This is Rietveld 408576698