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

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

Issue 6189008: GPU service respects --single-process (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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) 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"
11 #include "chrome/common/gpu_messages.h" 11 #include "chrome/common/gpu_messages.h"
12 #include "chrome/gpu/gpu_channel.h" 12 #include "chrome/gpu/gpu_channel.h"
13 #include "chrome/gpu/gpu_command_buffer_stub.h" 13 #include "chrome/gpu/gpu_command_buffer_stub.h"
14 #include "chrome/gpu/gpu_thread.h"
14 15
15 using gpu::Buffer; 16 using gpu::Buffer;
16 17
17 #if defined(OS_WIN) 18 #if defined(OS_WIN)
18 #define kCompositorWindowOwner L"CompositorWindowOwner" 19 #define kCompositorWindowOwner L"CompositorWindowOwner"
19 #endif // defined(OS_WIN) 20 #endif // defined(OS_WIN)
20 21
21 GpuCommandBufferStub::GpuCommandBufferStub( 22 GpuCommandBufferStub::GpuCommandBufferStub(
22 GpuChannel* channel, 23 GpuChannel* channel,
23 gfx::PluginWindowHandle handle, 24 gfx::PluginWindowHandle handle,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 default: 75 default:
75 return DefWindowProc(hwnd, message, wparam, lparam); 76 return DefWindowProc(hwnd, message, wparam, lparam);
76 } 77 }
77 return 0; 78 return 0;
78 } 79 }
79 80
80 bool GpuCommandBufferStub::CreateCompositorWindow() { 81 bool GpuCommandBufferStub::CreateCompositorWindow() {
81 DCHECK(handle_ != gfx::kNullPluginWindow); 82 DCHECK(handle_ != gfx::kNullPluginWindow);
82 83
83 // Ask the browser to create the the host window. 84 // Ask the browser to create the the host window.
84 ChildThread* gpu_thread = ChildThread::current(); 85 GpuThread* gpu_thread = channel_->gpu_thread();
85 gfx::PluginWindowHandle host_window_id = gfx::kNullPluginWindow; 86 gfx::PluginWindowHandle host_window_id = gfx::kNullPluginWindow;
86 gpu_thread->Send(new GpuHostMsg_GetCompositorHostWindow( 87 gpu_thread->Send(new GpuHostMsg_GetCompositorHostWindow(
87 renderer_id_, 88 renderer_id_,
88 render_view_id_, 89 render_view_id_,
89 &host_window_id)); 90 &host_window_id));
90 if (host_window_id == gfx::kNullPluginWindow) 91 if (host_window_id == gfx::kNullPluginWindow)
91 return false; 92 return false;
92 HWND host_window = static_cast<HWND>(host_window_id); 93 HWND host_window = static_cast<HWND>(host_window_id);
93 94
94 // Create the compositor window itself. 95 // Create the compositor window itself.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 NULL, 140 NULL,
140 0, 0, 141 0, 0,
141 parent_rect.right - parent_rect.left, 142 parent_rect.right - parent_rect.left,
142 parent_rect.bottom - parent_rect.top, 143 parent_rect.bottom - parent_rect.top,
143 flags); 144 flags);
144 compositor_window_ = static_cast<gfx::PluginWindowHandle>(compositor_window); 145 compositor_window_ = static_cast<gfx::PluginWindowHandle>(compositor_window);
145 return true; 146 return true;
146 } 147 }
147 148
148 void GpuCommandBufferStub::OnCompositorWindowPainted() { 149 void GpuCommandBufferStub::OnCompositorWindowPainted() {
149 ChildThread* gpu_thread = ChildThread::current(); 150 GpuThread* gpu_thread = channel_->gpu_thread();
150 gpu_thread->Send(new GpuHostMsg_ScheduleComposite( 151 gpu_thread->Send(new GpuHostMsg_ScheduleComposite(
151 renderer_id_, render_view_id_)); 152 renderer_id_, render_view_id_));
152 } 153 }
153 #endif // defined(OS_WIN) 154 #endif // defined(OS_WIN)
154 155
155 156
156 GpuCommandBufferStub::~GpuCommandBufferStub() { 157 GpuCommandBufferStub::~GpuCommandBufferStub() {
157 if (processor_.get()) { 158 if (processor_.get()) {
158 processor_->Destroy(); 159 processor_->Destroy();
159 } 160 }
160 #if defined(OS_WIN) 161 #if defined(OS_WIN)
161 if (compositor_window_) { 162 if (compositor_window_) {
162 DestroyWindow(static_cast<HWND>(compositor_window_)); 163 DestroyWindow(static_cast<HWND>(compositor_window_));
163 compositor_window_ = NULL; 164 compositor_window_ = NULL;
164 } 165 }
165 #elif defined(OS_LINUX) 166 #elif defined(OS_LINUX)
166 ChildThread* gpu_thread = ChildThread::current(); 167 GpuThread* gpu_thread = channel_->gpu_thread();
167 gpu_thread->Send( 168 gpu_thread->Send(
168 new GpuHostMsg_ReleaseXID(handle_)); 169 new GpuHostMsg_ReleaseXID(handle_));
169 #endif // defined(OS_WIN) 170 #endif // defined(OS_WIN)
170 } 171 }
171 172
172 bool GpuCommandBufferStub::OnMessageReceived(const IPC::Message& message) { 173 bool GpuCommandBufferStub::OnMessageReceived(const IPC::Message& message) {
173 bool handled = true; 174 bool handled = true;
174 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message) 175 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message)
175 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Initialize, OnInitialize); 176 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Initialize, OnInitialize);
176 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_GetState, OnGetState); 177 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_GetState, OnGetState);
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 void GpuCommandBufferStub::OnResizeOffscreenFrameBuffer(const gfx::Size& size) { 326 void GpuCommandBufferStub::OnResizeOffscreenFrameBuffer(const gfx::Size& size) {
326 processor_->ResizeOffscreenFrameBuffer(size); 327 processor_->ResizeOffscreenFrameBuffer(size);
327 } 328 }
328 329
329 void GpuCommandBufferStub::OnSwapBuffers() { 330 void GpuCommandBufferStub::OnSwapBuffers() {
330 Send(new GpuCommandBufferMsg_SwapBuffers(route_id_)); 331 Send(new GpuCommandBufferMsg_SwapBuffers(route_id_));
331 } 332 }
332 333
333 #if defined(OS_MACOSX) 334 #if defined(OS_MACOSX)
334 void GpuCommandBufferStub::OnSetWindowSize(const gfx::Size& size) { 335 void GpuCommandBufferStub::OnSetWindowSize(const gfx::Size& size) {
335 ChildThread* gpu_thread = ChildThread::current(); 336 GpuThread* gpu_thread = channel_->gpu_thread();
336 // Try using the IOSurface version first. 337 // Try using the IOSurface version first.
337 uint64 new_backing_store = processor_->SetWindowSizeForIOSurface(size); 338 uint64 new_backing_store = processor_->SetWindowSizeForIOSurface(size);
338 if (new_backing_store) { 339 if (new_backing_store) {
339 GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params params; 340 GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params params;
340 params.renderer_id = renderer_id_; 341 params.renderer_id = renderer_id_;
341 params.render_view_id = render_view_id_; 342 params.render_view_id = render_view_id_;
342 params.window = handle_; 343 params.window = handle_;
343 params.width = size.width(); 344 params.width = size.width();
344 params.height = size.height(); 345 params.height = size.height();
345 params.identifier = new_backing_store; 346 params.identifier = new_backing_store;
346 gpu_thread->Send(new GpuHostMsg_AcceleratedSurfaceSetIOSurface(params)); 347 gpu_thread->Send(new GpuHostMsg_AcceleratedSurfaceSetIOSurface(params));
347 } else { 348 } else {
348 // TODO(kbr): figure out what to do here. It wouldn't be difficult 349 // TODO(kbr): figure out what to do here. It wouldn't be difficult
349 // to support the compositor on 10.5, but the performance would be 350 // to support the compositor on 10.5, but the performance would be
350 // questionable. 351 // questionable.
351 NOTREACHED(); 352 NOTREACHED();
352 } 353 }
353 } 354 }
354 355
355 void GpuCommandBufferStub::SwapBuffersCallback() { 356 void GpuCommandBufferStub::SwapBuffersCallback() {
356 OnSwapBuffers(); 357 OnSwapBuffers();
357 ChildThread* gpu_thread = ChildThread::current(); 358 GpuThread* gpu_thread = channel_->gpu_thread();
358 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 359 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
359 params.renderer_id = renderer_id_; 360 params.renderer_id = renderer_id_;
360 params.render_view_id = render_view_id_; 361 params.render_view_id = render_view_id_;
361 params.window = handle_; 362 params.window = handle_;
362 params.surface_id = processor_->GetSurfaceId(); 363 params.surface_id = processor_->GetSurfaceId();
363 params.route_id = route_id(); 364 params.route_id = route_id();
364 params.swap_buffers_count = processor_->swap_buffers_count(); 365 params.swap_buffers_count = processor_->swap_buffers_count();
365 gpu_thread->Send(new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); 366 gpu_thread->Send(new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params));
366 } 367 }
367 368
368 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped( 369 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped(
369 uint64 swap_buffers_count) { 370 uint64 swap_buffers_count) {
370 processor_->set_acknowledged_swap_buffers_count(swap_buffers_count); 371 processor_->set_acknowledged_swap_buffers_count(swap_buffers_count);
371 // Wake up the GpuProcessor to start doing work again. 372 // Wake up the GpuProcessor to start doing work again.
372 processor_->ScheduleProcessCommands(); 373 processor_->ScheduleProcessCommands();
373 } 374 }
374 #endif // defined(OS_MACOSX) 375 #endif // defined(OS_MACOSX)
375 376
376 void GpuCommandBufferStub::ResizeCallback(gfx::Size size) { 377 void GpuCommandBufferStub::ResizeCallback(gfx::Size size) {
377 if (handle_ == gfx::kNullPluginWindow) 378 if (handle_ == gfx::kNullPluginWindow)
378 return; 379 return;
379 380
380 #if defined(OS_LINUX) 381 #if defined(OS_LINUX)
381 ChildThread* gpu_thread = ChildThread::current(); 382 GpuThread* gpu_thread = channel_->gpu_thread();
382 bool result = false; 383 bool result = false;
383 gpu_thread->Send( 384 gpu_thread->Send(
384 new GpuHostMsg_ResizeXID(handle_, size, &result)); 385 new GpuHostMsg_ResizeXID(handle_, size, &result));
385 #elif defined(OS_WIN) 386 #elif defined(OS_WIN)
386 HWND hwnd = static_cast<HWND>(compositor_window_); 387 HWND hwnd = static_cast<HWND>(compositor_window_);
387 UINT swp_flags = SWP_NOSENDCHANGING | SWP_NOOWNERZORDER | SWP_NOCOPYBITS | 388 UINT swp_flags = SWP_NOSENDCHANGING | SWP_NOOWNERZORDER | SWP_NOCOPYBITS |
388 SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_DEFERERASE; 389 SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_DEFERERASE;
389 SetWindowPos(hwnd, NULL, 0, 0, size.width(), size.height(), swp_flags); 390 SetWindowPos(hwnd, NULL, 0, 0, size.width(), size.height(), swp_flags);
390 #endif // defined(OS_LINUX) 391 #endif // defined(OS_LINUX)
391 } 392 }
392 393
393 #endif // defined(ENABLE_GPU) 394 #endif // defined(ENABLE_GPU)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698