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

Unified Diff: content/renderer/gpu/compositor_thread.cc

Issue 9802006: Implement active wheel fling transfer via WebCompositorInputHandlerClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 8 years, 9 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
« no previous file with comments | « content/renderer/gpu/compositor_thread.h ('k') | content/renderer/render_view_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/gpu/compositor_thread.cc
diff --git a/content/renderer/gpu/compositor_thread.cc b/content/renderer/gpu/compositor_thread.cc
index d4c790c297ff3a5973b22bd3abf1c52fa328617b..aa7fec47d393b53fa9c13758441e99e0d29e9da0 100644
--- a/content/renderer/gpu/compositor_thread.cc
+++ b/content/renderer/gpu/compositor_thread.cc
@@ -6,9 +6,10 @@
#include "base/bind.h"
#include "content/renderer/gpu/input_event_filter.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositor.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositorClient.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebActiveWheelFlingParameters.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositorInputHandlerClient.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositorInputHandler.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
using WebKit::WebCompositorInputHandler;
using WebKit::WebInputEvent;
@@ -16,17 +17,30 @@ using WebKit::WebInputEvent;
//------------------------------------------------------------------------------
class CompositorThread::InputHandlerWrapper
- : public WebKit::WebCompositorClient {
+ : public WebKit::WebCompositorInputHandlerClient,
+ public base::RefCountedThreadSafe<InputHandlerWrapper> {
public:
InputHandlerWrapper(CompositorThread* compositor_thread,
int routing_id,
- WebKit::WebCompositorInputHandler* input_handler)
+ WebKit::WebCompositorInputHandler* input_handler,
+ scoped_refptr<base::MessageLoopProxy> main_loop,
+ const base::WeakPtr<RenderViewImpl>& render_view_impl)
: compositor_thread_(compositor_thread),
routing_id_(routing_id),
- input_handler_(input_handler) {
+ input_handler_(input_handler),
+ main_loop_(main_loop),
+ render_view_impl_(render_view_impl) {
input_handler_->setClient(this);
}
+ virtual void transferActiveWheelFlingAnimation(
+ const WebKit::WebActiveWheelFlingParameters& params) {
+ main_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&RenderViewImpl::TransferActiveWheelFlingAnimation,
+ render_view_impl_, params));
+ }
+
virtual ~InputHandlerWrapper() {
input_handler_->setClient(NULL);
}
@@ -36,7 +50,7 @@ class CompositorThread::InputHandlerWrapper
return input_handler_;
}
- // WebCompositorClient methods:
+ // WebCompositorInputHandlerClient methods:
virtual void willShutdown() {
compositor_thread_->RemoveInputHandler(routing_id_);
@@ -54,6 +68,10 @@ class CompositorThread::InputHandlerWrapper
CompositorThread* compositor_thread_;
int routing_id_;
WebKit::WebCompositorInputHandler* input_handler_;
+ scoped_refptr<base::MessageLoopProxy> main_loop_;
+
+ // Can only be accessed on the main thread.
+ base::WeakPtr<RenderViewImpl> render_view_impl_;
DISALLOW_COPY_AND_ASSIGN(InputHandlerWrapper);
};
@@ -76,14 +94,27 @@ IPC::ChannelProxy::MessageFilter* CompositorThread::GetMessageFilter() const {
return filter_;
}
-void CompositorThread::AddInputHandler(int routing_id, int input_handler_id) {
- if (thread_.message_loop() != MessageLoop::current()) {
- thread_.message_loop()->PostTask(
- FROM_HERE,
- base::Bind(&CompositorThread::AddInputHandler, base::Unretained(this),
- routing_id, input_handler_id));
- return;
- }
+void CompositorThread::AddInputHandler(
+ 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::Unretained(this),
+ routing_id,
+ input_handler_id,
+ base::MessageLoopProxy::current(),
+ render_view_impl));
jamesr 2012/03/27 17:38:57 Since you asked for const ref on the WeakPtr I'm a
+}
+
+void CompositorThread::AddInputHandlerOnCompositorThread(
+ int routing_id, int input_handler_id,
+ scoped_refptr<base::MessageLoopProxy> main_loop,
+ const base::WeakPtr<RenderViewImpl>& render_view_impl) {
+
+ DCHECK_EQ(thread_.message_loop(), MessageLoop::current());
WebCompositorInputHandler* input_handler =
WebCompositorInputHandler::fromIdentifier(input_handler_id);
@@ -100,11 +131,12 @@ void CompositorThread::AddInputHandler(int routing_id, int input_handler_id) {
filter_->AddRoute(routing_id);
input_handlers_[routing_id] =
- make_linked_ptr(new InputHandlerWrapper(this, routing_id, input_handler));
+ make_scoped_refptr(new InputHandlerWrapper(this,
+ routing_id, input_handler, main_loop, render_view_impl));
}
void CompositorThread::RemoveInputHandler(int routing_id) {
- DCHECK(thread_.message_loop() == MessageLoop::current());
+ DCHECK_EQ(MessageLoop::current(), thread_.message_loop());
filter_->RemoveRoute(routing_id);
input_handlers_.erase(routing_id);
« no previous file with comments | « content/renderer/gpu/compositor_thread.h ('k') | content/renderer/render_view_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698