OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_ | 5 #ifndef CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_ |
6 #define CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_ | 6 #define CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "content/common/message_router.h" | 21 #include "content/common/message_router.h" |
22 #include "content/public/common/gpu_info.h" | 22 #include "content/public/common/gpu_info.h" |
23 #include "ipc/ipc_channel_handle.h" | 23 #include "ipc/ipc_channel_handle.h" |
24 #include "ipc/ipc_channel_proxy.h" | 24 #include "ipc/ipc_channel_proxy.h" |
25 #include "ipc/ipc_sync_channel.h" | 25 #include "ipc/ipc_sync_channel.h" |
26 #include "ui/gfx/native_widget_types.h" | 26 #include "ui/gfx/native_widget_types.h" |
27 #include "ui/gfx/size.h" | 27 #include "ui/gfx/size.h" |
28 #include "ui/gl/gpu_preference.h" | 28 #include "ui/gl/gpu_preference.h" |
29 | 29 |
30 class CommandBufferProxy; | 30 class CommandBufferProxy; |
31 class CommandBufferProxyImpl; | 31 class GURL; |
| 32 class MessageLoop; |
| 33 class TransportTextureService; |
32 struct GPUCreateCommandBufferConfig; | 34 struct GPUCreateCommandBufferConfig; |
33 class GURL; | |
34 class TransportTextureService; | |
35 class MessageLoop; | |
36 | 35 |
37 namespace base { | 36 namespace base { |
38 class MessageLoopProxy; | 37 class MessageLoopProxy; |
39 } | 38 } |
40 | 39 |
41 namespace content { | |
42 struct GpuRenderingStats; | |
43 } | |
44 | |
45 namespace IPC { | 40 namespace IPC { |
46 class SyncMessageFilter; | 41 class SyncMessageFilter; |
47 } | 42 } |
48 | 43 |
| 44 namespace content { |
| 45 class CommandBufferProxyImpl; |
| 46 struct GpuRenderingStats; |
| 47 |
49 struct GpuListenerInfo { | 48 struct GpuListenerInfo { |
50 GpuListenerInfo(); | 49 GpuListenerInfo(); |
51 ~GpuListenerInfo(); | 50 ~GpuListenerInfo(); |
52 | 51 |
53 base::WeakPtr<IPC::Listener> listener; | 52 base::WeakPtr<IPC::Listener> listener; |
54 scoped_refptr<base::MessageLoopProxy> loop; | 53 scoped_refptr<base::MessageLoopProxy> loop; |
55 }; | 54 }; |
56 | 55 |
57 class CONTENT_EXPORT GpuChannelHostFactory { | 56 class CONTENT_EXPORT GpuChannelHostFactory { |
58 public: | 57 public: |
59 typedef base::Callback<void(const gfx::Size)> CreateImageCallback; | 58 typedef base::Callback<void(const gfx::Size)> CreateImageCallback; |
60 | 59 |
61 virtual ~GpuChannelHostFactory() {} | 60 virtual ~GpuChannelHostFactory() {} |
62 | 61 |
63 virtual bool IsMainThread() = 0; | 62 virtual bool IsMainThread() = 0; |
64 virtual bool IsIOThread() = 0; | 63 virtual bool IsIOThread() = 0; |
65 virtual MessageLoop* GetMainLoop() = 0; | 64 virtual MessageLoop* GetMainLoop() = 0; |
66 virtual scoped_refptr<base::MessageLoopProxy> GetIOLoopProxy() = 0; | 65 virtual scoped_refptr<base::MessageLoopProxy> GetIOLoopProxy() = 0; |
67 virtual base::WaitableEvent* GetShutDownEvent() = 0; | 66 virtual base::WaitableEvent* GetShutDownEvent() = 0; |
68 virtual scoped_ptr<base::SharedMemory> AllocateSharedMemory(uint32 size) = 0; | 67 virtual scoped_ptr<base::SharedMemory> AllocateSharedMemory(uint32 size) = 0; |
69 virtual int32 CreateViewCommandBuffer( | 68 virtual int32 CreateViewCommandBuffer( |
70 int32 surface_id, const GPUCreateCommandBufferConfig& init_params) = 0; | 69 int32 surface_id, const GPUCreateCommandBufferConfig& init_params) = 0; |
71 virtual GpuChannelHost* EstablishGpuChannelSync( | 70 virtual GpuChannelHost* EstablishGpuChannelSync(CauseForGpuLaunch) = 0; |
72 content::CauseForGpuLaunch) = 0; | |
73 virtual void CreateImage( | 71 virtual void CreateImage( |
74 gfx::PluginWindowHandle window, | 72 gfx::PluginWindowHandle window, |
75 int32 image_id, | 73 int32 image_id, |
76 const CreateImageCallback& callback) = 0; | 74 const CreateImageCallback& callback) = 0; |
77 virtual void DeleteImage(int32 image_id, int32 sync_point) = 0; | 75 virtual void DeleteImage(int32 image_id, int32 sync_point) = 0; |
78 }; | 76 }; |
79 | 77 |
80 // Encapsulates an IPC channel between the client and one GPU process. | 78 // Encapsulates an IPC channel between the client and one GPU process. |
81 // On the GPU process side there's a corresponding GpuChannel. | 79 // On the GPU process side there's a corresponding GpuChannel. |
82 class GpuChannelHost : public IPC::Sender, | 80 class GpuChannelHost : public IPC::Sender, |
(...skipping 16 matching lines...) Expand all Loading... |
99 | 97 |
100 // Connect to GPU process channel. | 98 // Connect to GPU process channel. |
101 void Connect(const IPC::ChannelHandle& channel_handle); | 99 void Connect(const IPC::ChannelHandle& channel_handle); |
102 | 100 |
103 State state() const { return state_; } | 101 State state() const { return state_; } |
104 | 102 |
105 // Change state to kLost. | 103 // Change state to kLost. |
106 void SetStateLost(); | 104 void SetStateLost(); |
107 | 105 |
108 // The GPU stats reported by the GPU process. | 106 // The GPU stats reported by the GPU process. |
109 void set_gpu_info(const content::GPUInfo& gpu_info); | 107 void set_gpu_info(const GPUInfo& gpu_info); |
110 const content::GPUInfo& gpu_info() const; | 108 const GPUInfo& gpu_info() const; |
111 | 109 |
112 void OnChannelError(); | 110 void OnChannelError(); |
113 | 111 |
114 // IPC::Sender implementation: | 112 // IPC::Sender implementation: |
115 virtual bool Send(IPC::Message* msg) OVERRIDE; | 113 virtual bool Send(IPC::Message* msg) OVERRIDE; |
116 | 114 |
117 // Create and connect to a command buffer in the GPU process. | 115 // Create and connect to a command buffer in the GPU process. |
118 CommandBufferProxy* CreateViewCommandBuffer( | 116 CommandBufferProxy* CreateViewCommandBuffer( |
119 int32 surface_id, | 117 int32 surface_id, |
120 CommandBufferProxy* share_group, | 118 CommandBufferProxy* share_group, |
(...skipping 16 matching lines...) Expand all Loading... |
137 GpuVideoDecodeAcceleratorHost* CreateVideoDecoder( | 135 GpuVideoDecodeAcceleratorHost* CreateVideoDecoder( |
138 int command_buffer_route_id, | 136 int command_buffer_route_id, |
139 media::VideoCodecProfile profile, | 137 media::VideoCodecProfile profile, |
140 media::VideoDecodeAccelerator::Client* client); | 138 media::VideoDecodeAccelerator::Client* client); |
141 | 139 |
142 // Destroy a command buffer created by this channel. | 140 // Destroy a command buffer created by this channel. |
143 void DestroyCommandBuffer(CommandBufferProxy* command_buffer); | 141 void DestroyCommandBuffer(CommandBufferProxy* command_buffer); |
144 | 142 |
145 // Collect rendering stats from GPU process. | 143 // Collect rendering stats from GPU process. |
146 bool CollectRenderingStatsForSurface( | 144 bool CollectRenderingStatsForSurface( |
147 int surface_id, content::GpuRenderingStats* stats); | 145 int surface_id, GpuRenderingStats* stats); |
148 | 146 |
149 // Add a route for the current message loop. | 147 // Add a route for the current message loop. |
150 void AddRoute(int route_id, base::WeakPtr<IPC::Listener> listener); | 148 void AddRoute(int route_id, base::WeakPtr<IPC::Listener> listener); |
151 void RemoveRoute(int route_id); | 149 void RemoveRoute(int route_id); |
152 | 150 |
153 GpuChannelHostFactory* factory() const { return factory_; } | 151 GpuChannelHostFactory* factory() const { return factory_; } |
154 int gpu_host_id() const { return gpu_host_id_; } | 152 int gpu_host_id() const { return gpu_host_id_; } |
155 base::ProcessId gpu_pid() const { return channel_->peer_pid(); } | 153 base::ProcessId gpu_pid() const { return channel_->peer_pid(); } |
156 int client_id() const { return client_id_; } | 154 int client_id() const { return client_id_; } |
157 | 155 |
(...skipping 24 matching lines...) Expand all Loading... |
182 typedef base::hash_map<int, GpuListenerInfo> ListenerMap; | 180 typedef base::hash_map<int, GpuListenerInfo> ListenerMap; |
183 ListenerMap listeners_; | 181 ListenerMap listeners_; |
184 }; | 182 }; |
185 | 183 |
186 GpuChannelHostFactory* factory_; | 184 GpuChannelHostFactory* factory_; |
187 int client_id_; | 185 int client_id_; |
188 int gpu_host_id_; | 186 int gpu_host_id_; |
189 | 187 |
190 State state_; | 188 State state_; |
191 | 189 |
192 content::GPUInfo gpu_info_; | 190 GPUInfo gpu_info_; |
193 | 191 |
194 scoped_ptr<IPC::SyncChannel> channel_; | 192 scoped_ptr<IPC::SyncChannel> channel_; |
195 scoped_refptr<MessageFilter> channel_filter_; | 193 scoped_refptr<MessageFilter> channel_filter_; |
196 | 194 |
197 // Used to look up a proxy from its routing id. | 195 // Used to look up a proxy from its routing id. |
198 typedef base::hash_map<int, CommandBufferProxyImpl*> ProxyMap; | 196 typedef base::hash_map<int, CommandBufferProxyImpl*> ProxyMap; |
199 ProxyMap proxies_; | 197 ProxyMap proxies_; |
200 | 198 |
201 // A lock to guard against concurrent access to members like the proxies map | 199 // A lock to guard against concurrent access to members like the proxies map |
202 // for calls from contexts that may live on the compositor or main thread. | 200 // for calls from contexts that may live on the compositor or main thread. |
203 mutable base::Lock context_lock_; | 201 mutable base::Lock context_lock_; |
204 | 202 |
205 // A filter for sending messages from thread other than the main thread. | 203 // A filter for sending messages from thread other than the main thread. |
206 scoped_refptr<IPC::SyncMessageFilter> sync_filter_; | 204 scoped_refptr<IPC::SyncMessageFilter> sync_filter_; |
207 | 205 |
208 DISALLOW_COPY_AND_ASSIGN(GpuChannelHost); | 206 DISALLOW_COPY_AND_ASSIGN(GpuChannelHost); |
209 }; | 207 }; |
210 | 208 |
| 209 } // namespace content |
| 210 |
211 #endif // CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_ | 211 #endif // CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_ |
OLD | NEW |