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

Side by Side Diff: content/common/gpu/client/gpu_channel_host.h

Issue 111063003: Aura: Don't create GL context for CreateSharedSurfaceHandle() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: try to make tests happy by still creating shared context Created 6 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 // Encapsulates an IPC channel between the client and one GPU process. 86 // Encapsulates an IPC channel between the client and one GPU process.
87 // On the GPU process side there's a corresponding GpuChannel. 87 // On the GPU process side there's a corresponding GpuChannel.
88 // Every method can be called on any thread with a message loop, except for the 88 // Every method can be called on any thread with a message loop, except for the
89 // IO thread. 89 // IO thread.
90 class GpuChannelHost : public IPC::Sender, 90 class GpuChannelHost : public IPC::Sender,
91 public base::RefCountedThreadSafe<GpuChannelHost> { 91 public base::RefCountedThreadSafe<GpuChannelHost> {
92 public: 92 public:
93 // Must be called on the main thread (as defined by the factory). 93 // Must be called on the main thread (as defined by the factory).
94 static scoped_refptr<GpuChannelHost> Create( 94 static scoped_refptr<GpuChannelHost> Create(
95 GpuChannelHostFactory* factory, 95 GpuChannelHostFactory* factory,
96 int gpu_host_id,
97 const gpu::GPUInfo& gpu_info, 96 const gpu::GPUInfo& gpu_info,
98 const IPC::ChannelHandle& channel_handle); 97 const IPC::ChannelHandle& channel_handle);
99 98
100 // Returns true if |handle| is a valid GpuMemoryBuffer handle that 99 // Returns true if |handle| is a valid GpuMemoryBuffer handle that
101 // can be shared to the GPU process. 100 // can be shared to the GPU process.
102 static bool IsValidGpuMemoryBuffer(gfx::GpuMemoryBufferHandle handle); 101 static bool IsValidGpuMemoryBuffer(gfx::GpuMemoryBufferHandle handle);
103 102
104 bool IsLost() const { 103 bool IsLost() const {
105 DCHECK(channel_filter_.get()); 104 DCHECK(channel_filter_.get());
106 return channel_filter_->IsLost(); 105 return channel_filter_->IsLost();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 142
144 // Collect rendering stats from GPU process. 143 // Collect rendering stats from GPU process.
145 bool CollectRenderingStatsForSurface( 144 bool CollectRenderingStatsForSurface(
146 int surface_id, GpuRenderingStats* stats); 145 int surface_id, GpuRenderingStats* stats);
147 146
148 // Add a route for the current message loop. 147 // Add a route for the current message loop.
149 void AddRoute(int route_id, base::WeakPtr<IPC::Listener> listener); 148 void AddRoute(int route_id, base::WeakPtr<IPC::Listener> listener);
150 void RemoveRoute(int route_id); 149 void RemoveRoute(int route_id);
151 150
152 GpuChannelHostFactory* factory() const { return factory_; } 151 GpuChannelHostFactory* factory() const { return factory_; }
153 int gpu_host_id() const { return gpu_host_id_; }
154 152
155 // Returns a handle to the shared memory that can be sent via IPC to the 153 // Returns a handle to the shared memory that can be sent via IPC to the
156 // GPU process. The caller is responsible for ensuring it is closed. Returns 154 // GPU process. The caller is responsible for ensuring it is closed. Returns
157 // an invalid handle on failure. 155 // an invalid handle on failure.
158 base::SharedMemoryHandle ShareToGpuProcess( 156 base::SharedMemoryHandle ShareToGpuProcess(
159 base::SharedMemoryHandle source_handle); 157 base::SharedMemoryHandle source_handle);
160 158
161 // Generates |num| unique mailbox names that can be used with 159 // Generates |num| unique mailbox names that can be used with
162 // GL_texture_mailbox_CHROMIUM. Unlike genMailboxCHROMIUM, this IPC is 160 // GL_texture_mailbox_CHROMIUM. Unlike genMailboxCHROMIUM, this IPC is
163 // handled only on the GPU process' IO thread, and so is not effectively 161 // handled only on the GPU process' IO thread, and so is not effectively
164 // a finish. 162 // a finish.
165 bool GenerateMailboxNames(unsigned num, std::vector<gpu::Mailbox>* names); 163 bool GenerateMailboxNames(unsigned num, std::vector<gpu::Mailbox>* names);
166 164
167 // Reserve one unused transfer buffer ID. 165 // Reserve one unused transfer buffer ID.
168 int32 ReserveTransferBufferId(); 166 int32 ReserveTransferBufferId();
169 167
170 // Returns a GPU memory buffer handle to the buffer that can be sent via 168 // Returns a GPU memory buffer handle to the buffer that can be sent via
171 // IPC to the GPU process. The caller is responsible for ensuring it is 169 // IPC to the GPU process. The caller is responsible for ensuring it is
172 // closed. Returns an invalid handle on failure. 170 // closed. Returns an invalid handle on failure.
173 gfx::GpuMemoryBufferHandle ShareGpuMemoryBufferToGpuProcess( 171 gfx::GpuMemoryBufferHandle ShareGpuMemoryBufferToGpuProcess(
174 gfx::GpuMemoryBufferHandle source_handle); 172 gfx::GpuMemoryBufferHandle source_handle);
175 173
176 // Reserve one unused gpu memory buffer ID. 174 // Reserve one unused gpu memory buffer ID.
177 int32 ReserveGpuMemoryBufferId(); 175 int32 ReserveGpuMemoryBufferId();
178 176
179 private: 177 private:
180 friend class base::RefCountedThreadSafe<GpuChannelHost>; 178 friend class base::RefCountedThreadSafe<GpuChannelHost>;
181 GpuChannelHost(GpuChannelHostFactory* factory, 179 GpuChannelHost(GpuChannelHostFactory* factory,
182 int gpu_host_id,
183 const gpu::GPUInfo& gpu_info); 180 const gpu::GPUInfo& gpu_info);
184 virtual ~GpuChannelHost(); 181 virtual ~GpuChannelHost();
185 void Connect(const IPC::ChannelHandle& channel_handle); 182 void Connect(const IPC::ChannelHandle& channel_handle);
186 183
187 // A filter used internally to route incoming messages from the IO thread 184 // A filter used internally to route incoming messages from the IO thread
188 // to the correct message loop. It also maintains some shared state between 185 // to the correct message loop. It also maintains some shared state between
189 // all the contexts. 186 // all the contexts.
190 class MessageFilter : public IPC::ChannelProxy::MessageFilter { 187 class MessageFilter : public IPC::ChannelProxy::MessageFilter {
191 public: 188 public:
192 MessageFilter(); 189 MessageFilter();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 // Number of pending mailbox requested from the GPU process. 234 // Number of pending mailbox requested from the GPU process.
238 size_t requested_mailboxes_; 235 size_t requested_mailboxes_;
239 }; 236 };
240 237
241 // Threading notes: all fields are constant during the lifetime of |this| 238 // Threading notes: all fields are constant during the lifetime of |this|
242 // except: 239 // except:
243 // - |next_transfer_buffer_id_|, atomic type 240 // - |next_transfer_buffer_id_|, atomic type
244 // - |next_gpu_memory_buffer_id_|, atomic type 241 // - |next_gpu_memory_buffer_id_|, atomic type
245 // - |proxies_|, protected by |context_lock_| 242 // - |proxies_|, protected by |context_lock_|
246 GpuChannelHostFactory* const factory_; 243 GpuChannelHostFactory* const factory_;
247 const int gpu_host_id_;
248 244
249 const gpu::GPUInfo gpu_info_; 245 const gpu::GPUInfo gpu_info_;
250 246
251 scoped_ptr<IPC::SyncChannel> channel_; 247 scoped_ptr<IPC::SyncChannel> channel_;
252 scoped_refptr<MessageFilter> channel_filter_; 248 scoped_refptr<MessageFilter> channel_filter_;
253 249
254 // A filter for sending messages from thread other than the main thread. 250 // A filter for sending messages from thread other than the main thread.
255 scoped_refptr<IPC::SyncMessageFilter> sync_filter_; 251 scoped_refptr<IPC::SyncMessageFilter> sync_filter_;
256 252
257 // Transfer buffer IDs are allocated in sequence. 253 // Transfer buffer IDs are allocated in sequence.
258 base::AtomicSequenceNumber next_transfer_buffer_id_; 254 base::AtomicSequenceNumber next_transfer_buffer_id_;
259 255
260 // Gpu memory buffer IDs are allocated in sequence. 256 // Gpu memory buffer IDs are allocated in sequence.
261 base::AtomicSequenceNumber next_gpu_memory_buffer_id_; 257 base::AtomicSequenceNumber next_gpu_memory_buffer_id_;
262 258
263 // Protects proxies_. 259 // Protects proxies_.
264 mutable base::Lock context_lock_; 260 mutable base::Lock context_lock_;
265 // Used to look up a proxy from its routing id. 261 // Used to look up a proxy from its routing id.
266 typedef base::hash_map<int, CommandBufferProxyImpl*> ProxyMap; 262 typedef base::hash_map<int, CommandBufferProxyImpl*> ProxyMap;
267 ProxyMap proxies_; 263 ProxyMap proxies_;
268 264
269 DISALLOW_COPY_AND_ASSIGN(GpuChannelHost); 265 DISALLOW_COPY_AND_ASSIGN(GpuChannelHost);
270 }; 266 };
271 267
272 } // namespace content 268 } // namespace content
273 269
274 #endif // CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_ 270 #endif // CONTENT_COMMON_GPU_CLIENT_GPU_CHANNEL_HOST_H_
OLDNEW
« no previous file with comments | « content/common/gpu/client/context_provider_command_buffer.cc ('k') | content/common/gpu/client/gpu_channel_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698