Index: content/renderer/gpu/input_handler_manager.cc |
diff --git a/content/renderer/gpu/input_handler_manager.cc b/content/renderer/gpu/input_handler_manager.cc |
index ef6bc3f1357113904a54f24e641a48048e0a19ca..646f6e6e0942c4e1f253285bd5db3cc7663c7235 100644 |
--- a/content/renderer/gpu/input_handler_manager.cc |
+++ b/content/renderer/gpu/input_handler_manager.cc |
@@ -7,66 +7,47 @@ |
#include "base/bind.h" |
#include "base/debug/trace_event.h" |
#include "cc/input/input_handler.h" |
+#include "content/common/gpu/input_handler_manager_client.h" |
#include "content/renderer/gpu/input_event_filter.h" |
#include "content/renderer/gpu/input_handler_wrapper.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebActiveWheelFlingParameters.h" |
- |
-#if defined(OS_ANDROID) |
-// TODO(epenner): Move thread priorities to base. (crbug.com/170549) |
-#include <sys/resource.h> |
-#endif |
using WebKit::WebInputEvent; |
namespace content { |
-#if defined(OS_ANDROID) |
-// TODO(epenner): Move thread priorities to base. (crbug.com/170549) |
-namespace { |
-void SetHighThreadPriority() { |
- int nice_value = -6; // High priority. |
- setpriority(PRIO_PROCESS, base::PlatformThread::CurrentId(), nice_value); |
-} |
-} |
-#endif |
- |
InputHandlerManager::InputHandlerManager( |
- IPC::Listener* main_listener, |
const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy) |
- : message_loop_proxy_(message_loop_proxy) { |
- filter_ = |
- new InputEventFilter(main_listener, |
- message_loop_proxy, |
- base::Bind(&InputHandlerManager::HandleInputEvent, |
- base::Unretained(this))); |
-#if defined(OS_ANDROID) |
-// TODO(epenner): Move thread priorities to base. (crbug.com/170549) |
- message_loop_proxy->PostTask(FROM_HERE, base::Bind(&SetHighThreadPriority)); |
-#endif |
+ : message_loop_proxy_(message_loop_proxy), |
+ client_(NULL) { |
} |
InputHandlerManager::~InputHandlerManager() { |
} |
-IPC::ChannelProxy::MessageFilter* |
-InputHandlerManager::GetMessageFilter() const { |
- return filter_; |
+void InputHandlerManager::BindToClient(InputHandlerManagerClient* client) { |
+ DCHECK(!client_ || !client); |
+ client_ = client; |
} |
void InputHandlerManager::AddInputHandler( |
int routing_id, |
const base::WeakPtr<cc::InputHandler>& input_handler, |
const base::WeakPtr<RenderViewImpl>& render_view_impl) { |
- DCHECK(!message_loop_proxy_->BelongsToCurrentThread()); |
- |
- message_loop_proxy_->PostTask( |
- FROM_HERE, |
- base::Bind(&InputHandlerManager::AddInputHandlerOnCompositorThread, |
- base::Unretained(this), |
- routing_id, |
- base::MessageLoopProxy::current(), |
- input_handler, |
- render_view_impl)); |
+ if (message_loop_proxy_->BelongsToCurrentThread()) { |
+ AddInputHandlerOnCompositorThread(routing_id, |
+ base::MessageLoopProxy::current(), |
+ input_handler, |
+ render_view_impl); |
+ } else { |
+ message_loop_proxy_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&InputHandlerManager::AddInputHandlerOnCompositorThread, |
+ base::Unretained(this), |
+ routing_id, |
+ base::MessageLoopProxy::current(), |
+ input_handler, |
+ render_view_impl)); |
+ } |
} |
void InputHandlerManager::AddInputHandlerOnCompositorThread( |
@@ -74,6 +55,7 @@ void InputHandlerManager::AddInputHandlerOnCompositorThread( |
const scoped_refptr<base::MessageLoopProxy>& main_loop, |
const base::WeakPtr<cc::InputHandler>& input_handler, |
const base::WeakPtr<RenderViewImpl>& render_view_impl) { |
+ DCHECK(client_); |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
// The handler could be gone by this point if the compositor has shut down. |
@@ -85,24 +67,26 @@ void InputHandlerManager::AddInputHandlerOnCompositorThread( |
return; |
TRACE_EVENT0("InputHandlerManager::AddInputHandler", "AddingRoute"); |
- filter_->AddRoute(routing_id); |
+ client_->DidAddInputHandler(routing_id); |
input_handlers_[routing_id] = |
make_scoped_refptr(new InputHandlerWrapper(this, |
routing_id, main_loop, input_handler, render_view_impl)); |
} |
void InputHandlerManager::RemoveInputHandler(int routing_id) { |
+ DCHECK(client_); |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
TRACE_EVENT0("InputHandlerManager::RemoveInputHandler", "RemovingRoute"); |
- filter_->RemoveRoute(routing_id); |
+ client_->DidRemoveInputHandler(routing_id); |
input_handlers_.erase(routing_id); |
} |
void InputHandlerManager::HandleInputEvent( |
int routing_id, |
const WebInputEvent* input_event) { |
+ DCHECK(client_); |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
InputHandlerMap::iterator it = input_handlers_.find(routing_id); |
@@ -110,7 +94,7 @@ void InputHandlerManager::HandleInputEvent( |
TRACE_EVENT0("InputHandlerManager::HandleInputEvent", |
"NoInputHandlerFound"); |
// Oops, we no longer have an interested input handler.. |
- filter_->DidNotHandleInputEvent(true); |
+ client_->DidNotHandleInputEvent(true); |
return; |
} |