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

Side by Side Diff: content/common/gpu/gpu_command_buffer_stub.cc

Issue 7205012: RendererGLContext supports reparenting a GL context. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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) 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/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/process_util.h" 9 #include "base/process_util.h"
10 #include "base/shared_memory.h" 10 #include "base/shared_memory.h"
(...skipping 10 matching lines...) Expand all
21 21
22 #if defined(OS_WIN) 22 #if defined(OS_WIN)
23 #include "base/win/wrapped_window_proc.h" 23 #include "base/win/wrapped_window_proc.h"
24 #endif 24 #endif
25 25
26 using gpu::Buffer; 26 using gpu::Buffer;
27 27
28 GpuCommandBufferStub::GpuCommandBufferStub( 28 GpuCommandBufferStub::GpuCommandBufferStub(
29 GpuChannel* channel, 29 GpuChannel* channel,
30 gfx::PluginWindowHandle handle, 30 gfx::PluginWindowHandle handle,
31 GpuCommandBufferStub* parent,
32 const gfx::Size& size, 31 const gfx::Size& size,
33 const gpu::gles2::DisallowedExtensions& disallowed_extensions, 32 const gpu::gles2::DisallowedExtensions& disallowed_extensions,
34 const std::string& allowed_extensions, 33 const std::string& allowed_extensions,
35 const std::vector<int32>& attribs, 34 const std::vector<int32>& attribs,
36 uint32 parent_texture_id,
37 int32 route_id, 35 int32 route_id,
38 int32 renderer_id, 36 int32 renderer_id,
39 int32 render_view_id, 37 int32 render_view_id,
40 GpuWatchdog* watchdog) 38 GpuWatchdog* watchdog)
41 : channel_(channel), 39 : channel_(channel),
42 handle_(handle), 40 handle_(handle),
43 parent_(
44 parent ? parent->AsWeakPtr() : base::WeakPtr<GpuCommandBufferStub>()),
45 initial_size_(size), 41 initial_size_(size),
46 disallowed_extensions_(disallowed_extensions), 42 disallowed_extensions_(disallowed_extensions),
47 allowed_extensions_(allowed_extensions), 43 allowed_extensions_(allowed_extensions),
48 requested_attribs_(attribs), 44 requested_attribs_(attribs),
49 parent_texture_id_(parent_texture_id),
50 route_id_(route_id), 45 route_id_(route_id),
51 last_flush_count_(0), 46 last_flush_count_(0),
52 renderer_id_(renderer_id), 47 renderer_id_(renderer_id),
53 render_view_id_(render_view_id), 48 render_view_id_(render_view_id),
54 watchdog_(watchdog), 49 watchdog_(watchdog),
55 task_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 50 task_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
56 } 51 }
57 52
58 GpuCommandBufferStub::~GpuCommandBufferStub() { 53 GpuCommandBufferStub::~GpuCommandBufferStub() {
59 if (scheduler_.get()) { 54 if (scheduler_.get()) {
(...skipping 15 matching lines...) Expand all
75 deferred_messages_.push(new IPC::Message(message)); 70 deferred_messages_.push(new IPC::Message(message));
76 return true; 71 return true;
77 } 72 }
78 73
79 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers 74 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers
80 // here. This is so the reply can be delayed if the scheduler is unscheduled. 75 // here. This is so the reply can be delayed if the scheduler is unscheduled.
81 bool handled = true; 76 bool handled = true;
82 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message) 77 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message)
83 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Initialize, 78 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Initialize,
84 OnInitialize); 79 OnInitialize);
80 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_SetParent,
81 OnSetParent);
85 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetState, OnGetState); 82 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetState, OnGetState);
86 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Flush, OnFlush); 83 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Flush, OnFlush);
87 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_AsyncFlush, OnAsyncFlush); 84 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_AsyncFlush, OnAsyncFlush);
88 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_CreateTransferBuffer, 85 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_CreateTransferBuffer,
89 OnCreateTransferBuffer); 86 OnCreateTransferBuffer);
90 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_RegisterTransferBuffer, 87 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_RegisterTransferBuffer,
91 OnRegisterTransferBuffer); 88 OnRegisterTransferBuffer);
92 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_DestroyTransferBuffer, 89 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_DestroyTransferBuffer,
93 OnDestroyTransferBuffer); 90 OnDestroyTransferBuffer);
94 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetTransferBuffer, 91 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetTransferBuffer,
(...skipping 30 matching lines...) Expand all
125 false, 122 false,
126 channel_->renderer_process()); 123 channel_->renderer_process());
127 #else 124 #else
128 // POSIX receives a dup of the shared memory handle and closes the dup when 125 // POSIX receives a dup of the shared memory handle and closes the dup when
129 // this variable goes out of scope. 126 // this variable goes out of scope.
130 base::SharedMemory shared_memory(ring_buffer, false); 127 base::SharedMemory shared_memory(ring_buffer, false);
131 #endif 128 #endif
132 129
133 // Initialize the CommandBufferService and GpuScheduler. 130 // Initialize the CommandBufferService and GpuScheduler.
134 if (command_buffer_->Initialize(&shared_memory, size)) { 131 if (command_buffer_->Initialize(&shared_memory, size)) {
135 gpu::GpuScheduler* parent_processor =
136 parent_ ? parent_->scheduler_.get() : NULL;
137 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), 132 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(),
138 channel_, 133 channel_,
139 NULL)); 134 NULL));
140 if (scheduler_->Initialize( 135 if (scheduler_->Initialize(
141 handle_, 136 handle_,
142 initial_size_, 137 initial_size_,
143 disallowed_extensions_, 138 disallowed_extensions_,
144 allowed_extensions_.c_str(), 139 allowed_extensions_.c_str(),
145 requested_attribs_, 140 requested_attribs_,
146 parent_processor,
147 parent_texture_id_,
148 channel_->share_group())) { 141 channel_->share_group())) {
149 command_buffer_->SetPutOffsetChangeCallback( 142 command_buffer_->SetPutOffsetChangeCallback(
150 NewCallback(scheduler_.get(), 143 NewCallback(scheduler_.get(),
151 &gpu::GpuScheduler::PutChanged)); 144 &gpu::GpuScheduler::PutChanged));
152 command_buffer_->SetParseErrorCallback( 145 command_buffer_->SetParseErrorCallback(
153 NewCallback(this, &GpuCommandBufferStub::OnParseError)); 146 NewCallback(this, &GpuCommandBufferStub::OnParseError));
154 scheduler_->SetSwapBuffersCallback( 147 scheduler_->SetSwapBuffersCallback(
155 NewCallback(this, &GpuCommandBufferStub::OnSwapBuffers)); 148 NewCallback(this, &GpuCommandBufferStub::OnSwapBuffers));
156 scheduler_->SetLatchCallback(base::Bind( 149 scheduler_->SetLatchCallback(base::Bind(
157 &GpuChannel::OnLatchCallback, base::Unretained(channel_), route_id_)); 150 &GpuChannel::OnLatchCallback, base::Unretained(channel_), route_id_));
(...skipping 24 matching lines...) Expand all
182 } else { 175 } else {
183 scheduler_.reset(); 176 scheduler_.reset();
184 command_buffer_.reset(); 177 command_buffer_.reset();
185 } 178 }
186 } 179 }
187 180
188 GpuCommandBufferMsg_Initialize::WriteReplyParams(reply_message, result); 181 GpuCommandBufferMsg_Initialize::WriteReplyParams(reply_message, result);
189 Send(reply_message); 182 Send(reply_message);
190 } 183 }
191 184
185 void GpuCommandBufferStub::OnSetParent(int32 parent_route_id,
186 uint32 parent_texture_id,
187 IPC::Message* reply_message) {
188 bool result = false;
189
190 if (parent_route_id == MSG_ROUTING_NONE) {
191 result = scheduler_->SetParent(NULL, 0);
192 } else {
193 GpuCommandBufferStub* parent_stub = channel_->LookupCommandBuffer(
194 parent_route_id);
195 if (parent_stub) {
196 result = scheduler_->SetParent(parent_stub->scheduler_.get(),
197 parent_texture_id);
198 }
199 }
200
201 GpuCommandBufferMsg_SetParent::WriteReplyParams(reply_message, result);
202 Send(reply_message);
203 }
204
192 void GpuCommandBufferStub::OnGetState(IPC::Message* reply_message) { 205 void GpuCommandBufferStub::OnGetState(IPC::Message* reply_message) {
193 gpu::CommandBuffer::State state = command_buffer_->GetState(); 206 gpu::CommandBuffer::State state = command_buffer_->GetState();
194 if (state.error == gpu::error::kLostContext && 207 if (state.error == gpu::error::kLostContext &&
195 gfx::GLContext::LosesAllContextsOnContextLost()) 208 gfx::GLContext::LosesAllContextsOnContextLost())
196 channel_->LoseAllContexts(); 209 channel_->LoseAllContexts();
197 210
198 GpuCommandBufferMsg_GetState::WriteReplyParams(reply_message, state); 211 GpuCommandBufferMsg_GetState::WriteReplyParams(reply_message, state);
199 Send(reply_message); 212 Send(reply_message);
200 } 213 }
201 214
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 gfx::GLContext::LosesAllContextsOnContextLost()) { 477 gfx::GLContext::LosesAllContextsOnContextLost()) {
465 channel_->LoseAllContexts(); 478 channel_->LoseAllContexts();
466 } else { 479 } else {
467 IPC::Message* msg = new GpuCommandBufferMsg_UpdateState(route_id_, state); 480 IPC::Message* msg = new GpuCommandBufferMsg_UpdateState(route_id_, state);
468 msg->set_unblock(true); 481 msg->set_unblock(true);
469 Send(msg); 482 Send(msg);
470 } 483 }
471 } 484 }
472 485
473 #endif // defined(ENABLE_GPU) 486 #endif // defined(ENABLE_GPU)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698