Chromium Code Reviews| Index: content/renderer/gpu/compositor_thread.cc |
| diff --git a/content/renderer/gpu/compositor_thread.cc b/content/renderer/gpu/compositor_thread.cc |
| index b52e485053a63c16f35adc239988ca7af0ba21ae..3d71d74e1032d1d9390063ab9c7bef6e30c97e32 100644 |
| --- a/content/renderer/gpu/compositor_thread.cc |
| +++ b/content/renderer/gpu/compositor_thread.cc |
| @@ -6,6 +6,7 @@ |
| #include "base/bind.h" |
| #include "base/debug/trace_event.h" |
| +#include "content/common/view_messages.h" |
| #include "content/renderer/gpu/input_event_filter.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebActiveWheelFlingParameters.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositorInputHandlerClient.h" |
| @@ -54,11 +55,11 @@ class CompositorThread::InputHandlerWrapper |
| } |
| virtual void didHandleInputEvent() { |
| - compositor_thread_->filter_->DidHandleInputEvent(); |
| + compositor_thread_->input_filter_->DidHandleInputEvent(); |
| } |
| virtual void didNotHandleInputEvent(bool send_to_widget) { |
| - compositor_thread_->filter_->DidNotHandleInputEvent(send_to_widget); |
| + compositor_thread_->input_filter_->DidNotHandleInputEvent(send_to_widget); |
| } |
| private: |
| @@ -83,28 +84,42 @@ class CompositorThread::InputHandlerWrapper |
| CompositorThread::CompositorThread(IPC::Listener* main_listener) |
| : thread_("Compositor") { |
| - filter_ = |
| + input_filter_ = |
| new InputEventFilter(main_listener, |
| thread_.message_loop()->message_loop_proxy(), |
| base::Bind(&CompositorThread::HandleInputEvent, |
| base::Unretained(this))); |
| + |
| + uint32 messages[] = {ViewMsg_UpdateVSyncParameters::ID}; |
|
darin (slow to review)
2012/07/24 23:56:43
nit: const uint32 kMessages[] = { ViewMsg_...::ID
|
| + compositor_filter_ = |
| + new IPC::ForwardingMessageFilter( |
| + messages, arraysize(messages), |
| + thread_.message_loop()->message_loop_proxy(), |
| + base::Bind(&CompositorThread::OnCompositorMessageReceived, |
| + base::Unretained(this))); |
| } |
| CompositorThread::~CompositorThread() { |
| } |
| -IPC::ChannelProxy::MessageFilter* CompositorThread::GetMessageFilter() const { |
| - return filter_; |
| +IPC::ChannelProxy::MessageFilter* CompositorThread::GetInputFilter() const { |
| + return input_filter_; |
| +} |
| + |
| +IPC::ChannelProxy::MessageFilter* |
| + CompositorThread::GetCompositorFilter() const { |
| + return compositor_filter_; |
| } |
|
darin (slow to review)
2012/07/24 23:56:43
nit: extra new line
|
| -void CompositorThread::AddInputHandler( |
| + |
| +void CompositorThread::AddHandlers( |
| int routing_id, int input_handler_id, |
| const base::WeakPtr<RenderViewImpl>& render_view_impl) { |
| DCHECK_NE(thread_.message_loop(), MessageLoop::current()); |
| thread_.message_loop()->PostTask( |
| FROM_HERE, |
| - base::Bind(&CompositorThread::AddInputHandlerOnCompositorThread, |
| + base::Bind(&CompositorThread::AddHandlersOnCompositorThread, |
| base::Unretained(this), |
| routing_id, |
| input_handler_id, |
| @@ -112,7 +127,7 @@ void CompositorThread::AddInputHandler( |
| render_view_impl)); |
| } |
| -void CompositorThread::AddInputHandlerOnCompositorThread( |
| +void CompositorThread::AddHandlersOnCompositorThread( |
| int routing_id, int input_handler_id, |
| scoped_refptr<base::MessageLoopProxy> main_loop, |
| const base::WeakPtr<RenderViewImpl>& render_view_impl) { |
| @@ -132,8 +147,9 @@ void CompositorThread::AddInputHandlerOnCompositorThread( |
| return; |
| } |
| - TRACE_EVENT0("CompositorThread::AddInputHandler", "AddingRoute"); |
| - filter_->AddRoute(routing_id); |
| + TRACE_EVENT0("renderer", "CompositorThread::AddHandlersOnCompositorThread"); |
| + input_filter_->AddRoute(routing_id); |
| + compositor_filter_->AddRoute(routing_id); |
| input_handlers_[routing_id] = |
| make_scoped_refptr(new InputHandlerWrapper(this, |
| routing_id, input_handler, main_loop, render_view_impl)); |
| @@ -142,24 +158,38 @@ void CompositorThread::AddInputHandlerOnCompositorThread( |
| void CompositorThread::RemoveInputHandler(int routing_id) { |
| DCHECK_EQ(MessageLoop::current(), thread_.message_loop()); |
| - TRACE_EVENT0("CompositorThread::RemoveInputHandler", "RemovingRoute"); |
| + TRACE_EVENT0("renderer", "CompositorThread::RemoveInputHandler"); |
| - filter_->RemoveRoute(routing_id); |
| + input_filter_->RemoveRoute(routing_id); |
| + compositor_filter_->RemoveRoute(routing_id); |
| input_handlers_.erase(routing_id); |
| } |
| void CompositorThread::HandleInputEvent( |
| int routing_id, |
| const WebInputEvent* input_event) { |
| + TRACE_EVENT0("renderer", "CompositorThread::HandleInputEvent"); |
| DCHECK_EQ(MessageLoop::current(), thread_.message_loop()); |
| InputHandlerMap::iterator it = input_handlers_.find(routing_id); |
| if (it == input_handlers_.end()) { |
| - TRACE_EVENT0("CompositorThread::HandleInputEvent", "NoInputHandlerFound"); |
| + TRACE_EVENT0("renderer", "NoInputHandlerFound"); |
| // Oops, we no longer have an interested input handler.. |
| - filter_->DidNotHandleInputEvent(true); |
| + input_filter_->DidNotHandleInputEvent(true); |
| return; |
| } |
| it->second->input_handler()->handleInputEvent(*input_event); |
| } |
| + |
| +void CompositorThread::OnCompositorMessageReceived( |
| + const IPC::Message& message) { |
| + TRACE_EVENT0("renderer", "CompositorThread::OnCompositorMessageReceived"); |
| + DCHECK_EQ(message.type(), ViewMsg_UpdateVSyncParameters::ID); |
| + |
| + InputHandlerMap::iterator it = input_handlers_.find(message.routing_id()); |
|
darin (slow to review)
2012/07/24 23:56:43
on the webkit side, perhaps we should be pushing t
|
| + if (it == input_handlers_.end()) |
| + return; |
| + |
| + // TODO(nduca): Push the updated vsync paramters to the compositor. |
| +} |