Index: content/renderer/gpu/gpu_video_service_host.h |
diff --git a/content/renderer/gpu/gpu_video_service_host.h b/content/renderer/gpu/gpu_video_service_host.h |
index 83028c112348565ec07755cbc830e375ce83dafd..db519eff25d3809f339e561bc0e0e4b75d423654 100644 |
--- a/content/renderer/gpu/gpu_video_service_host.h |
+++ b/content/renderer/gpu/gpu_video_service_host.h |
@@ -6,6 +6,7 @@ |
#define CONTENT_RENDERER_GPU_GPU_VIDEO_SERVICE_HOST_H_ |
#include "base/memory/singleton.h" |
+#include "base/threading/non_thread_safe.h" |
#include "content/renderer/gpu/gpu_channel_host.h" |
#include "ipc/ipc_channel.h" |
#include "media/base/buffers.h" |
@@ -13,19 +14,26 @@ |
#include "media/video/video_decode_accelerator.h" |
class GpuVideoDecodeAcceleratorHost; |
+namespace gpu { |
+class CommandBufferHelper; |
+} |
-// GpuVideoServiceHost lives on IO thread and is used to dispatch IPC messages |
-// to GpuVideoDecoderHost objects. |
-class GpuVideoServiceHost : public IPC::ChannelProxy::MessageFilter { |
+// GpuVideoServiceHost lives on renderer thread and is used to dispatch IPC |
+// messages to GpuVideoDecodeAcceleratorHost objects. |
+class GpuVideoServiceHost |
+ : public IPC::Channel::Listener, |
+ public base::NonThreadSafe, |
+ public base::RefCountedThreadSafe<GpuVideoServiceHost> { |
public: |
GpuVideoServiceHost(); |
virtual ~GpuVideoServiceHost(); |
- // IPC::ChannelProxy::MessageFilter implementations, called on IO thread. |
- virtual bool OnMessageReceived(const IPC::Message& message); |
- virtual void OnFilterAdded(IPC::Channel* channel); |
- virtual void OnFilterRemoved(); |
- virtual void OnChannelClosing(); |
+ void set_channel(IPC::SyncChannel* channel); |
+ |
+ // IPC::Channel::Listener implementation; called on render thread because of |
+ // GpuChannelHost's use of a ChannelProxy/SyncChannel. |
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
+ virtual void OnChannelError() OVERRIDE; |
// Register a callback to be notified when |*this| can be used to |
// CreateVideo{Decoder,Accelerator} below. Called on RenderThread. |
@@ -38,14 +46,12 @@ class GpuVideoServiceHost : public IPC::ChannelProxy::MessageFilter { |
// in the GPU process. |
GpuVideoDecodeAcceleratorHost* CreateVideoAccelerator( |
media::VideoDecodeAccelerator::Client* client, |
- int command_buffer_route_id); |
+ int32 command_buffer_route_id, |
+ gpu::CommandBufferHelper* cmd_buffer_helper); |
private: |
- // Guards all members other than |router_|. |
- base::Lock lock_; |
- |
// Reference to the channel that the service listens to. |
- IPC::Channel* channel_; |
+ IPC::SyncChannel* channel_; |
// Router to send messages to a GpuVideoDecoderHost. |
MessageRouter router_; |