OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/shared_memory.h" | 10 #include "base/shared_memory.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 return false; | 81 return false; |
82 } | 82 } |
83 } | 83 } |
84 | 84 |
85 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers | 85 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers |
86 // here. This is so the reply can be delayed if the scheduler is unscheduled. | 86 // here. This is so the reply can be delayed if the scheduler is unscheduled. |
87 bool handled = true; | 87 bool handled = true; |
88 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message) | 88 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message) |
89 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Initialize, | 89 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Initialize, |
90 OnInitialize); | 90 OnInitialize); |
| 91 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_SetGetBuffer, |
| 92 OnSetGetBuffer); |
91 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_SetParent, | 93 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_SetParent, |
92 OnSetParent); | 94 OnSetParent); |
93 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetState, OnGetState); | 95 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetState, OnGetState); |
94 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetStateFast, | 96 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetStateFast, |
95 OnGetStateFast); | 97 OnGetStateFast); |
96 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_AsyncFlush, OnAsyncFlush); | 98 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_AsyncFlush, OnAsyncFlush); |
97 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Rescheduled, OnRescheduled); | 99 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Rescheduled, OnRescheduled); |
98 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_CreateTransferBuffer, | 100 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_CreateTransferBuffer, |
99 OnCreateTransferBuffer); | 101 OnCreateTransferBuffer); |
100 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_RegisterTransferBuffer, | 102 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_RegisterTransferBuffer, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 surface_ = NULL; | 142 surface_ = NULL; |
141 } | 143 } |
142 | 144 |
143 void GpuCommandBufferStub::OnInitializeFailed(IPC::Message* reply_message) { | 145 void GpuCommandBufferStub::OnInitializeFailed(IPC::Message* reply_message) { |
144 Destroy(); | 146 Destroy(); |
145 GpuCommandBufferMsg_Initialize::WriteReplyParams(reply_message, false); | 147 GpuCommandBufferMsg_Initialize::WriteReplyParams(reply_message, false); |
146 Send(reply_message); | 148 Send(reply_message); |
147 } | 149 } |
148 | 150 |
149 void GpuCommandBufferStub::OnInitialize( | 151 void GpuCommandBufferStub::OnInitialize( |
150 base::SharedMemoryHandle ring_buffer, | |
151 int32 size, | |
152 IPC::Message* reply_message) { | 152 IPC::Message* reply_message) { |
153 DCHECK(!command_buffer_.get()); | 153 DCHECK(!command_buffer_.get()); |
154 | 154 |
155 command_buffer_.reset(new gpu::CommandBufferService); | 155 command_buffer_.reset(new gpu::CommandBufferService); |
156 | 156 |
157 #if defined(OS_WIN) | 157 if (!command_buffer_->Initialize()) { |
158 // Windows dups the shared memory handle it receives into the current process | |
159 // and closes it when this variable goes out of scope. | |
160 base::SharedMemory shared_memory(ring_buffer, | |
161 false, | |
162 channel_->renderer_process()); | |
163 #else | |
164 // POSIX receives a dup of the shared memory handle and closes the dup when | |
165 // this variable goes out of scope. | |
166 base::SharedMemory shared_memory(ring_buffer, false); | |
167 #endif | |
168 | |
169 if (!command_buffer_->Initialize(&shared_memory, size)) { | |
170 OnInitializeFailed(reply_message); | 158 OnInitializeFailed(reply_message); |
171 return; | 159 return; |
172 } | 160 } |
173 | 161 |
174 decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group_.get())); | 162 decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group_.get())); |
175 | 163 |
176 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), | 164 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), |
177 decoder_.get(), | 165 decoder_.get(), |
178 NULL)); | 166 NULL)); |
179 | 167 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 decoder_->SetParent(parent_stub_for_initialization_->decoder_.get(), | 260 decoder_->SetParent(parent_stub_for_initialization_->decoder_.get(), |
273 parent_texture_for_initialization_); | 261 parent_texture_for_initialization_); |
274 parent_stub_for_initialization_.reset(); | 262 parent_stub_for_initialization_.reset(); |
275 parent_texture_for_initialization_ = 0; | 263 parent_texture_for_initialization_ = 0; |
276 } | 264 } |
277 | 265 |
278 GpuCommandBufferMsg_Initialize::WriteReplyParams(reply_message, true); | 266 GpuCommandBufferMsg_Initialize::WriteReplyParams(reply_message, true); |
279 Send(reply_message); | 267 Send(reply_message); |
280 } | 268 } |
281 | 269 |
| 270 void GpuCommandBufferStub::OnSetGetBuffer( |
| 271 int32 shm_id, IPC::Message* reply_message) { |
| 272 scheduler_->SetGetBuffer(shm_id); |
| 273 Send(reply_message); |
| 274 } |
| 275 |
282 void GpuCommandBufferStub::OnSetParent(int32 parent_route_id, | 276 void GpuCommandBufferStub::OnSetParent(int32 parent_route_id, |
283 uint32 parent_texture_id, | 277 uint32 parent_texture_id, |
284 IPC::Message* reply_message) { | 278 IPC::Message* reply_message) { |
285 | 279 |
286 GpuCommandBufferStub* parent_stub = NULL; | 280 GpuCommandBufferStub* parent_stub = NULL; |
287 if (parent_route_id != MSG_ROUTING_NONE) { | 281 if (parent_route_id != MSG_ROUTING_NONE) { |
288 parent_stub = channel_->LookupCommandBuffer(parent_route_id); | 282 parent_stub = channel_->LookupCommandBuffer(parent_route_id); |
289 } | 283 } |
290 | 284 |
291 bool result = true; | 285 bool result = true; |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 void GpuCommandBufferStub::OnDestroyVideoDecoder(int decoder_route_id) { | 506 void GpuCommandBufferStub::OnDestroyVideoDecoder(int decoder_route_id) { |
513 channel_->RemoveRoute(decoder_route_id); | 507 channel_->RemoveRoute(decoder_route_id); |
514 video_decoders_.Remove(decoder_route_id); | 508 video_decoders_.Remove(decoder_route_id); |
515 } | 509 } |
516 | 510 |
517 void GpuCommandBufferStub::OnSetSurfaceVisible(bool visible) { | 511 void GpuCommandBufferStub::OnSetSurfaceVisible(bool visible) { |
518 surface_->SetVisible(visible); | 512 surface_->SetVisible(visible); |
519 } | 513 } |
520 | 514 |
521 #endif // defined(ENABLE_GPU) | 515 #endif // defined(ENABLE_GPU) |
OLD | NEW |