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

Side by Side Diff: chrome/gpu/gpu_command_buffer_stub.cc

Issue 6588029: Moved creation of GPU command buffer shared memory into the browser process.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/gpu/gpu_command_buffer_stub.h ('k') | chrome/plugin/command_buffer_stub.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #if defined(ENABLE_GPU) 5 #if defined(ENABLE_GPU)
6 6
7 #include "base/process_util.h" 7 #include "base/process_util.h"
8 #include "base/shared_memory.h" 8 #include "base/shared_memory.h"
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "chrome/common/child_thread.h" 10 #include "chrome/common/child_thread.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 IPC_END_MESSAGE_MAP() 185 IPC_END_MESSAGE_MAP()
186 DCHECK(handled); 186 DCHECK(handled);
187 return handled; 187 return handled;
188 } 188 }
189 189
190 bool GpuCommandBufferStub::Send(IPC::Message* message) { 190 bool GpuCommandBufferStub::Send(IPC::Message* message) {
191 return channel_->Send(message); 191 return channel_->Send(message);
192 } 192 }
193 193
194 void GpuCommandBufferStub::OnInitialize( 194 void GpuCommandBufferStub::OnInitialize(
195 base::SharedMemoryHandle ring_buffer,
195 int32 size, 196 int32 size,
196 base::SharedMemoryHandle* ring_buffer) { 197 bool* result) {
197 DCHECK(!command_buffer_.get()); 198 DCHECK(!command_buffer_.get());
198 199
199 *ring_buffer = base::SharedMemory::NULLHandle(); 200 *result = false;
200 201
201 command_buffer_.reset(new gpu::CommandBufferService); 202 command_buffer_.reset(new gpu::CommandBufferService);
202 203
203 // Create the child window, if needed 204 // Create the child window, if needed
204 #if defined(OS_WIN) 205 #if defined(OS_WIN)
205 gfx::PluginWindowHandle output_window_handle; 206 gfx::PluginWindowHandle output_window_handle;
206 if (handle_) { 207 if (handle_) {
207 if (!CreateCompositorWindow()) { 208 if (!CreateCompositorWindow()) {
208 return; 209 return;
209 } 210 }
210 output_window_handle = compositor_window_; 211 output_window_handle = compositor_window_;
211 } else { 212 } else {
212 output_window_handle = handle_; 213 output_window_handle = handle_;
213 } 214 }
214 #else 215 #else
215 gfx::PluginWindowHandle output_window_handle = handle_; 216 gfx::PluginWindowHandle output_window_handle = handle_;
216 #endif // defined(OS_WIN) 217 #endif // defined(OS_WIN)
217 218
219 #if defined(OS_WIN)
220 // Windows dups the shared memory handle it receives into the current process
221 // and closes it when this variable goes out of scope.
222 base::SharedMemory shared_memory(ring_buffer,
223 false,
224 channel_->renderer_process());
225 #else
226 // POSIX receives a dup of the shared memory handle and closes the dup when
227 // this variable goes out of scope.
228 base::SharedMemory shared_memory(ring_buffer, false);
229 #endif
230
218 // Initialize the CommandBufferService and GPUProcessor. 231 // Initialize the CommandBufferService and GPUProcessor.
219 if (command_buffer_->Initialize(size)) { 232 if (command_buffer_->Initialize(&shared_memory, size)) {
220 Buffer buffer = command_buffer_->GetRingBuffer(); 233 gpu::GPUProcessor* parent_processor =
221 if (buffer.shared_memory) { 234 parent_ ? parent_->processor_.get() : NULL;
222 gpu::GPUProcessor* parent_processor = 235 processor_.reset(new gpu::GPUProcessor(command_buffer_.get(), NULL));
223 parent_ ? parent_->processor_.get() : NULL; 236 if (processor_->Initialize(
224 processor_.reset(new gpu::GPUProcessor(command_buffer_.get(), NULL)); 237 output_window_handle,
225 if (processor_->Initialize( 238 initial_size_,
226 output_window_handle, 239 allowed_extensions_.c_str(),
227 initial_size_, 240 requested_attribs_,
228 allowed_extensions_.c_str(), 241 parent_processor,
229 requested_attribs_, 242 parent_texture_id_)) {
230 parent_processor, 243 command_buffer_->SetPutOffsetChangeCallback(
231 parent_texture_id_)) { 244 NewCallback(processor_.get(),
232 command_buffer_->SetPutOffsetChangeCallback( 245 &gpu::GPUProcessor::ProcessCommands));
233 NewCallback(processor_.get(), 246 processor_->SetSwapBuffersCallback(
234 &gpu::GPUProcessor::ProcessCommands)); 247 NewCallback(this, &GpuCommandBufferStub::OnSwapBuffers));
248
249 #if defined(OS_MACOSX)
250 if (handle_) {
251 // This context conceptually puts its output directly on the
252 // screen, rendered by the accelerated plugin layer in
253 // RenderWidgetHostViewMac. Set up a pathway to notify the
254 // browser process when its contents change.
235 processor_->SetSwapBuffersCallback( 255 processor_->SetSwapBuffersCallback(
236 NewCallback(this, &GpuCommandBufferStub::OnSwapBuffers)); 256 NewCallback(this,
237 257 &GpuCommandBufferStub::SwapBuffersCallback));
238 // Assume service is responsible for duplicating the handle from the 258 }
239 // calling process.
240 buffer.shared_memory->ShareToProcess(channel_->renderer_process(),
241 ring_buffer);
242 #if defined(OS_MACOSX)
243 if (handle_) {
244 // This context conceptually puts its output directly on the
245 // screen, rendered by the accelerated plugin layer in
246 // RenderWidgetHostViewMac. Set up a pathway to notify the
247 // browser process when its contents change.
248 processor_->SetSwapBuffersCallback(
249 NewCallback(this,
250 &GpuCommandBufferStub::SwapBuffersCallback));
251 }
252 #endif // defined(OS_MACOSX) 259 #endif // defined(OS_MACOSX)
253 260
254 // Set up a pathway for resizing the output window or framebuffer at the 261 // Set up a pathway for resizing the output window or framebuffer at the
255 // right time relative to other GL commands. 262 // right time relative to other GL commands.
256 processor_->SetResizeCallback( 263 processor_->SetResizeCallback(
257 NewCallback(this, &GpuCommandBufferStub::ResizeCallback)); 264 NewCallback(this, &GpuCommandBufferStub::ResizeCallback));
258 } else { 265
259 processor_.reset(); 266 *result = true;
260 command_buffer_.reset(); 267 } else {
261 } 268 processor_.reset();
269 command_buffer_.reset();
262 } 270 }
263 } 271 }
264 } 272 }
265 273
266 void GpuCommandBufferStub::OnGetState(gpu::CommandBuffer::State* state) { 274 void GpuCommandBufferStub::OnGetState(gpu::CommandBuffer::State* state) {
267 *state = command_buffer_->GetState(); 275 *state = command_buffer_->GetState();
268 } 276 }
269 277
270 void GpuCommandBufferStub::OnAsyncGetState() { 278 void GpuCommandBufferStub::OnAsyncGetState() {
271 gpu::CommandBuffer::State state = command_buffer_->GetState(); 279 gpu::CommandBuffer::State state = command_buffer_->GetState();
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 #elif defined(OS_WIN) 407 #elif defined(OS_WIN)
400 HWND hwnd = static_cast<HWND>(compositor_window_); 408 HWND hwnd = static_cast<HWND>(compositor_window_);
401 UINT swp_flags = SWP_NOSENDCHANGING | SWP_NOOWNERZORDER | SWP_NOCOPYBITS | 409 UINT swp_flags = SWP_NOSENDCHANGING | SWP_NOOWNERZORDER | SWP_NOCOPYBITS |
402 SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_DEFERERASE; 410 SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_DEFERERASE;
403 SetWindowPos(hwnd, NULL, 0, 0, size.width(), size.height(), swp_flags); 411 SetWindowPos(hwnd, NULL, 0, 0, size.width(), size.height(), swp_flags);
404 #endif // defined(OS_LINUX) 412 #endif // defined(OS_LINUX)
405 } 413 }
406 } 414 }
407 415
408 #endif // defined(ENABLE_GPU) 416 #endif // defined(ENABLE_GPU)
OLDNEW
« no previous file with comments | « chrome/gpu/gpu_command_buffer_stub.h ('k') | chrome/plugin/command_buffer_stub.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698