summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsievers@chromium.org <sievers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-13 22:04:00 +0000
committersievers@chromium.org <sievers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-13 22:04:00 +0000
commit3876da00af4660fdd8daf59c076b7676316b2d02 (patch)
treef58b169f98611f8924c9df182f71292b26c7dacd
parentacc4eb8c1e9474ee6e72bedbc5f2b8a32c76036f (diff)
downloadchromium_src-3876da00af4660fdd8daf59c076b7676316b2d02.zip
chromium_src-3876da00af4660fdd8daf59c076b7676316b2d02.tar.gz
chromium_src-3876da00af4660fdd8daf59c076b7676316b2d02.tar.bz2
Remove obsolete layer of indirection in gpu msg routing.
With the new base::Bind() support for weak pointers and IgnoreResults(), the code that routes IPC messages from the GPU process to the correct thread in the render process can be simplified a bit. Review URL: http://codereview.chromium.org/9168001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117707 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/renderer/gpu/gpu_channel_host.cc41
-rw-r--r--content/renderer/gpu/gpu_channel_host.h31
2 files changed, 24 insertions, 48 deletions
diff --git a/content/renderer/gpu/gpu_channel_host.cc b/content/renderer/gpu/gpu_channel_host.cc
index 6e3038c..5bedc69 100644
--- a/content/renderer/gpu/gpu_channel_host.cc
+++ b/content/renderer/gpu/gpu_channel_host.cc
@@ -18,26 +18,10 @@
using base::AutoLock;
using base::MessageLoopProxy;
-GpuChannelHost::Listener::Listener(
- base::WeakPtr<IPC::Channel::Listener> listener,
- scoped_refptr<base::MessageLoopProxy> loop)
- : listener_(listener),
- loop_(loop) {
-
-}
-
-GpuChannelHost::Listener::~Listener() {
-
-}
-
-void GpuChannelHost::Listener::DispatchMessage(const IPC::Message& msg) {
- if (listener_.get())
- listener_->OnMessageReceived(msg);
+GpuListenerInfo::GpuListenerInfo() {
}
-void GpuChannelHost::Listener::DispatchError() {
- if (listener_.get())
- listener_->OnChannelError();
+GpuListenerInfo::~GpuListenerInfo() {
}
GpuChannelHost::MessageFilter::MessageFilter(GpuChannelHost* parent)
@@ -54,7 +38,10 @@ void GpuChannelHost::MessageFilter::AddRoute(
scoped_refptr<MessageLoopProxy> loop) {
DCHECK(MessageLoop::current() == ChildProcess::current()->io_message_loop());
DCHECK(listeners_.find(route_id) == listeners_.end());
- listeners_[route_id] = new GpuChannelHost::Listener(listener, loop);
+ GpuListenerInfo info;
+ info.listener = listener;
+ info.loop = loop;
+ listeners_[route_id] = info;
}
void GpuChannelHost::MessageFilter::RemoveRoute(int route_id) {
@@ -76,11 +63,13 @@ bool GpuChannelHost::MessageFilter::OnMessageReceived(
ListenerMap::iterator it = listeners_.find(message.routing_id());
if (it != listeners_.end()) {
- const scoped_refptr<GpuChannelHost::Listener>& listener = it->second;
- listener->loop()->PostTask(
+ const GpuListenerInfo& info = it->second;
+ info.loop->PostTask(
FROM_HERE,
- base::Bind(&GpuChannelHost::Listener::DispatchMessage, listener.get(),
- message));
+ base::Bind(
+ base::IgnoreResult(&IPC::Channel::Listener::OnMessageReceived),
+ info.listener,
+ message));
}
return true;
@@ -93,10 +82,10 @@ void GpuChannelHost::MessageFilter::OnChannelError() {
for (ListenerMap::iterator it = listeners_.begin();
it != listeners_.end();
it++) {
- const scoped_refptr<GpuChannelHost::Listener>& listener = it->second;
- listener->loop()->PostTask(
+ const GpuListenerInfo& info = it->second;
+ info.loop->PostTask(
FROM_HERE,
- base::Bind(&GpuChannelHost::Listener::DispatchError, listener.get()));
+ base::Bind(&IPC::Channel::Listener::OnChannelError, info.listener));
}
listeners_.clear();
diff --git a/content/renderer/gpu/gpu_channel_host.h b/content/renderer/gpu/gpu_channel_host.h
index 7bdad49..c69e6b7 100644
--- a/content/renderer/gpu/gpu_channel_host.h
+++ b/content/renderer/gpu/gpu_channel_host.h
@@ -37,6 +37,14 @@ namespace IPC {
class SyncMessageFilter;
}
+struct GpuListenerInfo {
+ GpuListenerInfo();
+ ~GpuListenerInfo();
+
+ base::WeakPtr<IPC::Channel::Listener> listener;
+ scoped_refptr<base::MessageLoopProxy> loop;
+};
+
// Encapsulates an IPC channel between the renderer and one plugin process.
// On the plugin side there's a corresponding GpuChannel.
class GpuChannelHost : public IPC::Message::Sender,
@@ -121,26 +129,6 @@ class GpuChannelHost : public IPC::Message::Sender,
void ForciblyCloseChannel();
private:
- // An shim class for working with listeners between threads.
- // It is used to post a task to the thread that owns the listener,
- // and where it's safe to dereference the weak pointer.
- class Listener :
- public base::RefCountedThreadSafe<Listener> {
- public:
- Listener(base::WeakPtr<IPC::Channel::Listener> listener,
- scoped_refptr<base::MessageLoopProxy> loop);
- virtual ~Listener();
-
- void DispatchMessage(const IPC::Message& msg);
- void DispatchError();
-
- scoped_refptr<base::MessageLoopProxy> loop() { return loop_; }
-
- private:
- base::WeakPtr<IPC::Channel::Listener> listener_;
- scoped_refptr<base::MessageLoopProxy> loop_;
- };
-
// A filter used internally to route incoming messages from the IO thread
// to the correct message loop.
class MessageFilter : public IPC::ChannelProxy::MessageFilter {
@@ -160,8 +148,7 @@ class GpuChannelHost : public IPC::Message::Sender,
private:
GpuChannelHost* parent_;
- typedef base::hash_map<int,
- scoped_refptr<GpuChannelHost::Listener> > ListenerMap;
+ typedef base::hash_map<int, GpuListenerInfo> ListenerMap;
ListenerMap listeners_;
};