OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #include "base/process_util.h" | 5 #include "base/process_util.h" |
6 #include "base/shared_memory.h" | 6 #include "base/shared_memory.h" |
7 #include "chrome/common/command_buffer_messages.h" | 7 #include "chrome/common/command_buffer_messages.h" |
| 8 #include "chrome/common/plugin_messages.h" |
8 #include "chrome/plugin/command_buffer_stub.h" | 9 #include "chrome/plugin/command_buffer_stub.h" |
9 #include "chrome/plugin/plugin_channel.h" | 10 #include "chrome/plugin/plugin_channel.h" |
10 | 11 |
11 using gpu::Buffer; | 12 using gpu::Buffer; |
12 | 13 |
13 CommandBufferStub::CommandBufferStub(PluginChannel* channel, | 14 CommandBufferStub::CommandBufferStub(PluginChannel* channel, |
| 15 int plugin_host_route_id, |
14 gfx::PluginWindowHandle window) | 16 gfx::PluginWindowHandle window) |
15 : channel_(channel), | 17 : channel_(channel), |
| 18 plugin_host_route_id_(plugin_host_route_id), |
16 window_(window) { | 19 window_(window) { |
17 route_id_ = channel->GenerateRouteID(); | 20 route_id_ = channel->GenerateRouteID(); |
18 channel->AddRoute(route_id_, this, false); | 21 channel->AddRoute(route_id_, this, false); |
19 } | 22 } |
20 | 23 |
21 CommandBufferStub::~CommandBufferStub() { | 24 CommandBufferStub::~CommandBufferStub() { |
22 channel_->RemoveRoute(route_id_); | 25 channel_->RemoveRoute(route_id_); |
23 } | 26 } |
24 | 27 |
25 void CommandBufferStub::OnChannelError() { | 28 void CommandBufferStub::OnChannelError() { |
(...skipping 25 matching lines...) Expand all Loading... |
51 | 54 |
52 // Initialize the CommandBufferService and GPUProcessor. | 55 // Initialize the CommandBufferService and GPUProcessor. |
53 if (command_buffer_->Initialize(size)) { | 56 if (command_buffer_->Initialize(size)) { |
54 Buffer buffer = command_buffer_->GetRingBuffer(); | 57 Buffer buffer = command_buffer_->GetRingBuffer(); |
55 if (buffer.shared_memory) { | 58 if (buffer.shared_memory) { |
56 processor_ = new gpu::GPUProcessor(command_buffer_.get()); | 59 processor_ = new gpu::GPUProcessor(command_buffer_.get()); |
57 if (processor_->Initialize(window_)) { | 60 if (processor_->Initialize(window_)) { |
58 command_buffer_->SetPutOffsetChangeCallback( | 61 command_buffer_->SetPutOffsetChangeCallback( |
59 NewCallback(processor_.get(), | 62 NewCallback(processor_.get(), |
60 &gpu::GPUProcessor::ProcessCommands)); | 63 &gpu::GPUProcessor::ProcessCommands)); |
| 64 #if defined(OS_MACOSX) |
| 65 processor_->SetSwapBuffersCallback( |
| 66 NewCallback(this, |
| 67 &CommandBufferStub::SwapBuffersCallback)); |
| 68 #endif |
61 buffer.shared_memory->ShareToProcess(peer_handle, ring_buffer); | 69 buffer.shared_memory->ShareToProcess(peer_handle, ring_buffer); |
62 } else { | 70 } else { |
63 processor_ = NULL; | 71 processor_ = NULL; |
64 command_buffer_.reset(); | 72 command_buffer_.reset(); |
65 } | 73 } |
66 } | 74 } |
67 } | 75 } |
68 | 76 |
69 base::CloseProcessHandle(peer_handle); | 77 base::CloseProcessHandle(peer_handle); |
70 } | 78 } |
(...skipping 30 matching lines...) Expand all Loading... |
101 | 109 |
102 Buffer buffer = command_buffer_->GetTransferBuffer(id); | 110 Buffer buffer = command_buffer_->GetTransferBuffer(id); |
103 if (buffer.shared_memory) { | 111 if (buffer.shared_memory) { |
104 buffer.shared_memory->ShareToProcess(peer_handle, transfer_buffer); | 112 buffer.shared_memory->ShareToProcess(peer_handle, transfer_buffer); |
105 *size = buffer.shared_memory->max_size(); | 113 *size = buffer.shared_memory->max_size(); |
106 } | 114 } |
107 | 115 |
108 base::CloseProcessHandle(peer_handle); | 116 base::CloseProcessHandle(peer_handle); |
109 } | 117 } |
110 | 118 |
| 119 #if defined(OS_MACOSX) |
| 120 void CommandBufferStub::OnSetWindowSize(int32 width, int32 height) { |
| 121 uint64 new_backing_store = processor_->SetWindowSize(width, height); |
| 122 if (new_backing_store) { |
| 123 Send(new PluginHostMsg_GPUPluginSetIOSurface(plugin_host_route_id_, |
| 124 window_, |
| 125 width, |
| 126 height, |
| 127 new_backing_store)); |
| 128 } |
| 129 } |
| 130 |
| 131 void CommandBufferStub::SwapBuffersCallback() { |
| 132 Send(new PluginHostMsg_GPUPluginBuffersSwapped(plugin_host_route_id_, |
| 133 window_)); |
| 134 } |
| 135 #endif |
| 136 |
111 void CommandBufferStub::OnMessageReceived(const IPC::Message& msg) { | 137 void CommandBufferStub::OnMessageReceived(const IPC::Message& msg) { |
112 IPC_BEGIN_MESSAGE_MAP(CommandBufferStub, msg) | 138 IPC_BEGIN_MESSAGE_MAP(CommandBufferStub, msg) |
113 IPC_MESSAGE_HANDLER(CommandBufferMsg_Initialize, OnInitialize); | 139 IPC_MESSAGE_HANDLER(CommandBufferMsg_Initialize, OnInitialize); |
114 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetState, OnGetState); | 140 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetState, OnGetState); |
115 IPC_MESSAGE_HANDLER(CommandBufferMsg_Flush, OnFlush); | 141 IPC_MESSAGE_HANDLER(CommandBufferMsg_Flush, OnFlush); |
116 IPC_MESSAGE_HANDLER(CommandBufferMsg_CreateTransferBuffer, | 142 IPC_MESSAGE_HANDLER(CommandBufferMsg_CreateTransferBuffer, |
117 OnCreateTransferBuffer); | 143 OnCreateTransferBuffer); |
118 IPC_MESSAGE_HANDLER(CommandBufferMsg_DestroyTransferBuffer, | 144 IPC_MESSAGE_HANDLER(CommandBufferMsg_DestroyTransferBuffer, |
119 OnDestroyTransferBuffer); | 145 OnDestroyTransferBuffer); |
120 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetTransferBuffer, | 146 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetTransferBuffer, |
121 OnGetTransferBuffer); | 147 OnGetTransferBuffer); |
| 148 #if defined(OS_MACOSX) |
| 149 IPC_MESSAGE_HANDLER(CommandBufferMsg_SetWindowSize, OnSetWindowSize); |
| 150 #endif |
122 IPC_MESSAGE_UNHANDLED_ERROR() | 151 IPC_MESSAGE_UNHANDLED_ERROR() |
123 IPC_END_MESSAGE_MAP() | 152 IPC_END_MESSAGE_MAP() |
124 } | 153 } |
OLD | NEW |