| Index: chrome/gpu/gpu_command_buffer_stub.cc
|
| ===================================================================
|
| --- chrome/gpu/gpu_command_buffer_stub.cc (revision 54820)
|
| +++ chrome/gpu/gpu_command_buffer_stub.cc (working copy)
|
| @@ -7,6 +7,7 @@
|
| #include "base/process_util.h"
|
| #include "base/shared_memory.h"
|
| #include "build/build_config.h"
|
| +#include "chrome/common/child_thread.h"
|
| #include "chrome/common/gpu_messages.h"
|
| #include "chrome/gpu/gpu_channel.h"
|
| #include "chrome/gpu/gpu_command_buffer_stub.h"
|
| @@ -18,14 +19,18 @@
|
| GpuCommandBufferStub* parent,
|
| const gfx::Size& size,
|
| uint32 parent_texture_id,
|
| - int32 route_id)
|
| + int32 route_id,
|
| + int32 renderer_id,
|
| + int32 render_view_id)
|
| : channel_(channel),
|
| handle_(handle),
|
| parent_(
|
| parent ? parent->AsWeakPtr() : base::WeakPtr<GpuCommandBufferStub>()),
|
| initial_size_(size),
|
| parent_texture_id_(parent_texture_id),
|
| - route_id_(route_id) {
|
| + route_id_(route_id),
|
| + renderer_id_(renderer_id),
|
| + render_view_id_(render_view_id) {
|
| }
|
|
|
| GpuCommandBufferStub::~GpuCommandBufferStub() {
|
| @@ -49,6 +54,9 @@
|
| OnGetTransferBuffer);
|
| IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_ResizeOffscreenFrameBuffer,
|
| OnResizeOffscreenFrameBuffer);
|
| +#if defined(OS_MACOSX)
|
| + IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SetWindowSize, OnSetWindowSize);
|
| +#endif
|
| IPC_MESSAGE_UNHANDLED_ERROR()
|
| IPC_END_MESSAGE_MAP()
|
| }
|
| @@ -86,6 +94,17 @@
|
| // calling process.
|
| buffer.shared_memory->ShareToProcess(channel_->renderer_handle(),
|
| ring_buffer);
|
| +#if defined(OS_MACOSX)
|
| + if (handle_) {
|
| + // This context conceptually puts its output directly on the
|
| + // screen, rendered by the accelerated plugin layer in
|
| + // RenderWidgetHostViewMac. Set up a pathway to notify the
|
| + // browser process when its contents change.
|
| + processor_->SetSwapBuffersCallback(
|
| + NewCallback(this,
|
| + &GpuCommandBufferStub::SwapBuffersCallback));
|
| + }
|
| +#endif
|
| } else {
|
| processor_.reset();
|
| command_buffer_.reset();
|
| @@ -142,4 +161,35 @@
|
| processor_->ResizeOffscreenFrameBuffer(size);
|
| }
|
|
|
| +#if defined(OS_MACOSX)
|
| +void GpuCommandBufferStub::OnSetWindowSize(const gfx::Size& size) {
|
| + ChildThread* gpu_thread = ChildThread::current();
|
| + // Try using the IOSurface version first.
|
| + uint64 new_backing_store = processor_->SetWindowSizeForIOSurface(size);
|
| + if (new_backing_store) {
|
| + GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params params;
|
| + params.renderer_id = renderer_id_;
|
| + params.render_view_id = render_view_id_;
|
| + params.window = handle_;
|
| + params.width = size.width();
|
| + params.height = size.height();
|
| + params.identifier = new_backing_store;
|
| + gpu_thread->Send(new GpuHostMsg_AcceleratedSurfaceSetIOSurface(params));
|
| + } else {
|
| + // TODO(kbr): figure out what to do here. It wouldn't be difficult
|
| + // to support the compositor on 10.5, but the performance would be
|
| + // questionable.
|
| + NOTREACHED();
|
| + }
|
| +}
|
| +
|
| +void GpuCommandBufferStub::SwapBuffersCallback() {
|
| + ChildThread* gpu_thread = ChildThread::current();
|
| + gpu_thread->Send(
|
| + new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(renderer_id_,
|
| + render_view_id_,
|
| + handle_));
|
| +}
|
| +#endif // defined(OS_MACOSX)
|
| +
|
| #endif // ENABLE_GPU
|
|
|