Chromium Code Reviews| 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 076eec831668228b1cadaa95a7c005f4f70700cc..36df2f47559d95ff99e0a28aa17031838d60310c 100644 |
| --- a/content/renderer/input/input_event_filter.cc |
| +++ b/content/renderer/input/input_event_filter.cc |
| @@ -16,7 +16,9 @@ |
| #include "base/trace_event/trace_event.h" |
| #include "content/common/input_messages.h" |
| #include "content/common/view_messages.h" |
| +#include "content/public/common/content_features.h" |
| #include "content/public/common/content_switches.h" |
| +#include "content/renderer/input/input_handler_manager.h" |
| #include "content/renderer/render_thread_impl.h" |
| #include "ipc/ipc_listener.h" |
| #include "ipc/ipc_sender.h" |
| @@ -53,6 +55,7 @@ InputEventFilter::InputEventFilter( |
| main_listener_(main_listener), |
| sender_(NULL), |
| target_task_runner_(target_task_runner), |
| + input_handler_manager_(NULL), |
| current_overscroll_params_(NULL), |
| renderer_scheduler_(NULL) { |
| DCHECK(target_task_runner_.get()); |
| @@ -62,9 +65,10 @@ InputEventFilter::InputEventFilter( |
| render_thread_impl ? render_thread_impl->GetRendererScheduler() : nullptr; |
| } |
| -void InputEventFilter::SetBoundHandler(const Handler& handler) { |
| +void InputEventFilter::SetInputHandlerManager( |
| + InputHandlerManager* input_handler_manager) { |
| DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| - handler_ = handler; |
| + input_handler_manager_ = input_handler_manager; |
| } |
| void InputEventFilter::SetIsFlingingInMainThreadEventQueue(int routing_id, |
| @@ -80,7 +84,8 @@ void InputEventFilter::RegisterRoutingID(int routing_id) { |
| base::AutoLock locked(routes_lock_); |
| routes_.insert(routing_id); |
| route_queues_[routing_id] = new MainThreadEventQueue( |
|
tdresser
2016/08/24 13:42:59
Should we move reading the flag into the MTEQ? It
dtapuska
2016/08/24 17:10:06
I guess. I did it this way as it made TEST_P easie
|
| - routing_id, this, main_task_runner_, renderer_scheduler_); |
| + routing_id, this, main_task_runner_, renderer_scheduler_, |
| + base::FeatureList::IsEnabled(features::kRafAlignedInputEvents)); |
| } |
| void InputEventFilter::UnregisterRoutingID(int routing_id) { |
| @@ -125,6 +130,20 @@ void InputEventFilter::NotifyInputEventHandled(int routing_id, |
| queue->EventHandled(type, ack_result); |
| } |
| +void InputEventFilter::ProcessRafAlignedInput(int routing_id) { |
| + DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| + scoped_refptr<MainThreadEventQueue> queue; |
| + { |
| + base::AutoLock locked(routes_lock_); |
| + RouteQueueMap::iterator iter = route_queues_.find(routing_id); |
| + if (iter == route_queues_.end() || !iter->second) |
| + return; |
| + queue = iter->second; |
| + } |
| + |
| + queue->DispatchRafAlignedInput(); |
| +} |
| + |
| void InputEventFilter::OnFilterAdded(IPC::Sender* sender) { |
| io_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
| sender_ = sender; |
| @@ -170,7 +189,7 @@ InputEventFilter::~InputEventFilter() { |
| } |
| void InputEventFilter::ForwardToHandler(const IPC::Message& message) { |
| - DCHECK(!handler_.is_null()); |
| + DCHECK(input_handler_manager_); |
| DCHECK(target_task_runner_->BelongsToCurrentThread()); |
| TRACE_EVENT1("input", "InputEventFilter::ForwardToHandler", |
| "message_type", GetInputMessageTypeName(message)); |
| @@ -205,8 +224,8 @@ void InputEventFilter::ForwardToHandler(const IPC::Message& message) { |
| auto_reset_current_overscroll_params( |
| ¤t_overscroll_params_, send_ack ? &overscroll_params : NULL); |
| - InputEventAckState ack_state = |
| - handler_.Run(routing_id, event.get(), &latency_info); |
| + InputEventAckState ack_state = input_handler_manager_->HandleInputEvent( |
| + routing_id, event.get(), &latency_info); |
| uint32_t unique_touch_event_id = |
| ui::WebInputEventTraits::GetUniqueTouchEventId(*event); |
| @@ -269,4 +288,8 @@ void InputEventFilter::SendInputEventAck(int routing_id, |
| new InputHostMsg_HandleInputEvent_ACK(routing_id, ack))); |
| } |
| +void InputEventFilter::NeedsMainFrame(int routing_id) { |
| + input_handler_manager_->NeedsMainFrame(routing_id); |
| +} |
| + |
| } // namespace content |