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

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

Issue 1003023002: Signal input flush when all flings have terminated (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
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 54bf892014c80b6884e624cdcdaac312c0817e46..654830ff79c0c0bf09b555388824afedd759b7fd 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -76,6 +76,7 @@ InputRouterImpl::InputRouterImpl(IPC::Sender* sender,
current_view_flags_(0),
current_ack_source_(ACK_SOURCE_NONE),
flush_requested_(false),
+ active_fling_count_(0),
touch_event_queue_(this, config.touch_config),
gesture_event_queue_(this, this, config.gesture_config) {
DCHECK(sender);
@@ -88,11 +89,6 @@ InputRouterImpl::~InputRouterImpl() {
STLDeleteElements(&pending_select_messages_);
}
-void InputRouterImpl::Flush() {
- flush_requested_ = true;
- SignalFlushedIfNecessary();
-}
-
bool InputRouterImpl::SendInput(scoped_ptr<IPC::Message> message) {
DCHECK(IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart);
switch (message->type()) {
@@ -244,6 +240,22 @@ void InputRouterImpl::OnViewUpdated(int view_flags) {
UpdateTouchAckTimeoutEnabled();
}
+void InputRouterImpl::RequestNotificationWhenFlushed() {
+ flush_requested_ = true;
+ SignalFlushedIfNecessary();
+}
+
+bool InputRouterImpl::HasPendingEvents() const {
+ return !touch_event_queue_.empty() ||
+ !gesture_event_queue_.empty() ||
+ !key_queue_.empty() ||
+ mouse_move_pending_ ||
+ mouse_wheel_pending_ ||
+ select_message_pending_ ||
+ move_caret_pending_ ||
+ active_fling_count_ > 0;
+}
+
bool InputRouterImpl::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(InputRouterImpl, message)
@@ -257,6 +269,7 @@ bool InputRouterImpl::OnMessageReceived(const IPC::Message& message) {
OnHasTouchEventHandlers)
IPC_MESSAGE_HANDLER(InputHostMsg_SetTouchAction,
OnSetTouchAction)
+ IPC_MESSAGE_HANDLER(InputHostMsg_DidStopFlinging, OnFlingingStopped)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -485,6 +498,13 @@ void InputRouterImpl::OnSetTouchAction(TouchAction touch_action) {
UpdateTouchAckTimeoutEnabled();
}
+void InputRouterImpl::OnFlingingStopped() {
+ DCHECK_GT(active_fling_count_, 0);
+ --active_fling_count_;
+ SignalFlushedIfNecessary();
+ client_->DidStopFlinging();
+}
+
void InputRouterImpl::ProcessInputEventAck(
WebInputEvent::Type event_type,
InputEventAckState ack_result,
@@ -586,6 +606,11 @@ void InputRouterImpl::ProcessWheelAck(InputEventAckState ack_result,
void InputRouterImpl::ProcessGestureAck(WebInputEvent::Type type,
InputEventAckState ack_result,
const ui::LatencyInfo& latency) {
+ if (type == blink::WebInputEvent::GestureFlingStart &&
+ ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) {
+ ++active_fling_count_;
+ }
Yufeng Shen (Slow to review) 2015/03/13 15:53:42 I saw that gesture event queue also maintains a fl
jdduke (slow) 2015/03/13 16:08:04 Probably, although the gesture queue fling in prog
+
// |gesture_event_queue_| will forward to OnGestureEventAck when appropriate.
gesture_event_queue_.ProcessGestureAck(ack_result, type, latency);
}
@@ -626,14 +651,4 @@ void InputRouterImpl::SignalFlushedIfNecessary() {
client_->DidFlush();
}
-bool InputRouterImpl::HasPendingEvents() const {
- return !touch_event_queue_.empty() ||
- !gesture_event_queue_.empty() ||
- !key_queue_.empty() ||
- mouse_move_pending_ ||
- mouse_wheel_pending_ ||
- select_message_pending_ ||
- move_caret_pending_;
-}
-
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698