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

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

Issue 2166703003: Implement Main Thread RAF Aligned Input (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_main_thread_queue
Patch Set: Clean prototype up Created 4 years, 4 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/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(
&current_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

Powered by Google App Engine
This is Rietveld 408576698