Index: content/renderer/input/input_event_filter.cc |
diff --git a/content/renderer/input/input_event_filter.cc b/content/renderer/input/input_event_filter.cc |
index cd5a8cd36c7b383a3145b213c1745c33ef68a3c7..6d9883234a7c8cf4dcb906551dfc48145be5d94d 100644 |
--- a/content/renderer/input/input_event_filter.cc |
+++ b/content/renderer/input/input_event_filter.cc |
@@ -8,6 +8,7 @@ |
#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
#include "base/location.h" |
+#include "base/message_loop/high_priority_task_runner.h" |
#include "base/message_loop/message_loop_proxy.h" |
#include "cc/input/input_handler.h" |
#include "content/common/input/did_overscroll_params.h" |
@@ -134,14 +135,25 @@ void InputEventFilter::ForwardToHandler(const IPC::Message& message) { |
"message_type", GetInputMessageTypeName(message)); |
if (message.type() != InputMsg_HandleInputEvent::ID) { |
- TRACE_EVENT_INSTANT0( |
- "input", |
- "InputEventFilter::ForwardToHandler::ForwardToMainListener", |
- TRACE_EVENT_SCOPE_THREAD); |
- main_loop_->PostTask( |
- FROM_HERE, |
- base::Bind(&InputEventFilter::ForwardToMainListener, |
- this, message)); |
+ if (high_priority_task_runner_.get()) { |
+ TRACE_EVENT_INSTANT0( |
+ "input", |
+ "InputEventFilter::ForwardToHandler::ForwardToMainListenerHigh", |
+ TRACE_EVENT_SCOPE_THREAD); |
+ high_priority_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&InputEventFilter::ForwardToMainListener, |
+ this, message)); |
+ } else { |
+ TRACE_EVENT_INSTANT0( |
+ "input", |
+ "InputEventFilter::ForwardToHandler::ForwardToMainListener", |
+ TRACE_EVENT_SCOPE_THREAD); |
+ main_loop_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&InputEventFilter::ForwardToMainListener, |
+ this, message)); |
+ } |
return; |
} |
@@ -157,16 +169,27 @@ void InputEventFilter::ForwardToHandler(const IPC::Message& message) { |
InputEventAckState ack = handler_.Run(routing_id, event, &latency_info); |
if (ack == INPUT_EVENT_ACK_STATE_NOT_CONSUMED) { |
- TRACE_EVENT_INSTANT0( |
- "input", |
- "InputEventFilter::ForwardToHandler::ForwardToMainListener", |
- TRACE_EVENT_SCOPE_THREAD); |
IPC::Message new_msg = InputMsg_HandleInputEvent( |
routing_id, event, latency_info, is_keyboard_shortcut); |
- main_loop_->PostTask( |
- FROM_HERE, |
- base::Bind(&InputEventFilter::ForwardToMainListener, |
- this, new_msg)); |
+ if (high_priority_task_runner_.get()) { |
+ TRACE_EVENT_INSTANT0( |
+ "input", |
+ "InputEventFilter::ForwardToHandler::ForwardToMainListenerHigh", |
+ TRACE_EVENT_SCOPE_THREAD); |
+ high_priority_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&InputEventFilter::ForwardToMainListener, |
+ this, new_msg)); |
+ } else { |
+ TRACE_EVENT_INSTANT0( |
+ "input", |
+ "InputEventFilter::ForwardToHandler::ForwardToMainListener", |
+ TRACE_EVENT_SCOPE_THREAD); |
+ main_loop_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&InputEventFilter::ForwardToMainListener, |
+ this, new_msg)); |
+ } |
return; |
} |
@@ -199,4 +222,9 @@ void InputEventFilter::SendMessageOnIOThread(const IPC::Message& message) { |
sender_->Send(new IPC::Message(message)); |
} |
+void InputEventFilter::SetHighPriorityTaskRunner( |
+ scoped_refptr<base::HighPriorityTaskRunner> high_priority_task_runner) { |
+ high_priority_task_runner_ = high_priority_task_runner; |
+} |
+ |
} // namespace content |