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

Side by Side Diff: content/renderer/pepper/ppb_graphics_3d_impl.cc

Issue 1885903002: Revert of Make lost context and error message callbacks on GpuControl go to client (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « content/renderer/pepper/ppb_graphics_3d_impl.h ('k') | gpu/blink/webgraphicscontext3d_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/renderer/pepper/ppb_graphics_3d_impl.h" 5 #include "content/renderer/pepper/ppb_graphics_3d_impl.h"
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/location.h" 9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 27 matching lines...) Expand all
38 38
39 namespace content { 39 namespace content {
40 40
41 PPB_Graphics3D_Impl::PPB_Graphics3D_Impl(PP_Instance instance) 41 PPB_Graphics3D_Impl::PPB_Graphics3D_Impl(PP_Instance instance)
42 : PPB_Graphics3D_Shared(instance), 42 : PPB_Graphics3D_Shared(instance),
43 bound_to_instance_(false), 43 bound_to_instance_(false),
44 commit_pending_(false), 44 commit_pending_(false),
45 has_alpha_(false), 45 has_alpha_(false),
46 weak_ptr_factory_(this) {} 46 weak_ptr_factory_(this) {}
47 47
48 PPB_Graphics3D_Impl::~PPB_Graphics3D_Impl() { 48 PPB_Graphics3D_Impl::~PPB_Graphics3D_Impl() {}
49 command_buffer_->SetGpuControlClient(nullptr);
50 }
51 49
52 // static 50 // static
53 PP_Resource PPB_Graphics3D_Impl::CreateRaw( 51 PP_Resource PPB_Graphics3D_Impl::CreateRaw(
54 PP_Instance instance, 52 PP_Instance instance,
55 PP_Resource share_context, 53 PP_Resource share_context,
56 const int32_t* attrib_list, 54 const int32_t* attrib_list,
57 gpu::Capabilities* capabilities, 55 gpu::Capabilities* capabilities,
58 base::SharedMemoryHandle* shared_state_handle, 56 base::SharedMemoryHandle* shared_state_handle,
59 gpu::CommandBufferId* command_buffer_id) { 57 gpu::CommandBufferId* command_buffer_id) {
60 PPB_Graphics3D_API* share_api = NULL; 58 PPB_Graphics3D_API* share_api = NULL;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 share_buffer = share_graphics->GetCommandBufferProxy(); 237 share_buffer = share_graphics->GetCommandBufferProxy();
240 } 238 }
241 239
242 command_buffer_ = channel_->CreateCommandBuffer( 240 command_buffer_ = channel_->CreateCommandBuffer(
243 gpu::kNullSurfaceHandle, surface_size, share_buffer, 241 gpu::kNullSurfaceHandle, surface_size, share_buffer,
244 gpu::GpuChannelHost::kDefaultStreamId, 242 gpu::GpuChannelHost::kDefaultStreamId,
245 gpu::GpuChannelHost::kDefaultStreamPriority, attribs, GURL::EmptyGURL(), 243 gpu::GpuChannelHost::kDefaultStreamPriority, attribs, GURL::EmptyGURL(),
246 gpu_preference); 244 gpu_preference);
247 if (!command_buffer_) 245 if (!command_buffer_)
248 return false; 246 return false;
249
250 command_buffer_->SetGpuControlClient(this);
251
252 if (!command_buffer_->Initialize()) 247 if (!command_buffer_->Initialize())
253 return false; 248 return false;
254
255 if (shared_state_handle) 249 if (shared_state_handle)
256 *shared_state_handle = command_buffer_->GetSharedStateHandle(); 250 *shared_state_handle = command_buffer_->GetSharedStateHandle();
257 if (capabilities) 251 if (capabilities)
258 *capabilities = command_buffer_->GetCapabilities(); 252 *capabilities = command_buffer_->GetCapabilities();
259 if (command_buffer_id) 253 if (command_buffer_id)
260 *command_buffer_id = command_buffer_->GetCommandBufferID(); 254 *command_buffer_id = command_buffer_->GetCommandBufferID();
261
262 mailbox_ = gpu::Mailbox::Generate(); 255 mailbox_ = gpu::Mailbox::Generate();
263 if (!command_buffer_->ProduceFrontBuffer(mailbox_)) 256 if (!command_buffer_->ProduceFrontBuffer(mailbox_))
264 return false; 257 return false;
265 258
259 command_buffer_->SetContextLostCallback(base::Bind(
260 &PPB_Graphics3D_Impl::OnContextLost, weak_ptr_factory_.GetWeakPtr()));
261
262 command_buffer_->SetOnConsoleMessageCallback(base::Bind(
263 &PPB_Graphics3D_Impl::OnConsoleMessage, weak_ptr_factory_.GetWeakPtr()));
266 return true; 264 return true;
267 } 265 }
268 266
269 void PPB_Graphics3D_Impl::OnGpuControlErrorMessage(const char* message, 267 void PPB_Graphics3D_Impl::OnConsoleMessage(const std::string& message, int id) {
270 int32_t id) {
271 if (!bound_to_instance_) 268 if (!bound_to_instance_)
272 return; 269 return;
273 WebPluginContainer* container = 270 WebPluginContainer* container =
274 HostGlobals::Get()->GetInstance(pp_instance())->container(); 271 HostGlobals::Get()->GetInstance(pp_instance())->container();
275 if (!container) 272 if (!container)
276 return; 273 return;
277 WebLocalFrame* frame = container->element().document().frame(); 274 WebLocalFrame* frame = container->element().document().frame();
278 if (!frame) 275 if (!frame)
279 return; 276 return;
280 WebConsoleMessage console_message = WebConsoleMessage( 277 WebConsoleMessage console_message = WebConsoleMessage(
281 WebConsoleMessage::LevelError, WebString(base::UTF8ToUTF16(message))); 278 WebConsoleMessage::LevelError, WebString(base::UTF8ToUTF16(message)));
282 frame->addMessageToConsole(console_message); 279 frame->addMessageToConsole(console_message);
283 } 280 }
284 281
285 void PPB_Graphics3D_Impl::OnGpuControlLostContext() {
286 #if DCHECK_IS_ON()
287 // This should never occur more than once.
288 DCHECK(!lost_context_);
289 lost_context_ = true;
290 #endif
291
292 // Don't need to check for null from GetPluginInstance since when we're
293 // bound, we know our instance is valid.
294 if (bound_to_instance_) {
295 HostGlobals::Get()->GetInstance(pp_instance())->BindGraphics(pp_instance(),
296 0);
297 }
298
299 // Send context lost to plugin. This may have been caused by a PPAPI call, so
300 // avoid re-entering.
301 base::ThreadTaskRunnerHandle::Get()->PostTask(
302 FROM_HERE, base::Bind(&PPB_Graphics3D_Impl::SendContextLost,
303 weak_ptr_factory_.GetWeakPtr()));
304 }
305
306 void PPB_Graphics3D_Impl::OnSwapBuffers() { 282 void PPB_Graphics3D_Impl::OnSwapBuffers() {
307 if (HasPendingSwap()) { 283 if (HasPendingSwap()) {
308 // If we're off-screen, no need to trigger and wait for compositing. 284 // If we're off-screen, no need to trigger and wait for compositing.
309 // Just send the swap-buffers ACK to the plugin immediately. 285 // Just send the swap-buffers ACK to the plugin immediately.
310 commit_pending_ = false; 286 commit_pending_ = false;
311 SwapBuffersACK(PP_OK); 287 SwapBuffersACK(PP_OK);
312 } 288 }
313 } 289 }
314 290
291 void PPB_Graphics3D_Impl::OnContextLost() {
292 // Don't need to check for NULL from GetPluginInstance since when we're
293 // bound, we know our instance is valid.
294 if (bound_to_instance_) {
295 HostGlobals::Get()->GetInstance(pp_instance())->BindGraphics(pp_instance(),
296 0);
297 }
298
299 // Send context lost to plugin. This may have been caused by a PPAPI call, so
300 // avoid re-entering.
301 base::ThreadTaskRunnerHandle::Get()->PostTask(
302 FROM_HERE, base::Bind(&PPB_Graphics3D_Impl::SendContextLost,
303 weak_ptr_factory_.GetWeakPtr()));
304 }
305
315 void PPB_Graphics3D_Impl::SendContextLost() { 306 void PPB_Graphics3D_Impl::SendContextLost() {
316 // By the time we run this, the instance may have been deleted, or in the 307 // By the time we run this, the instance may have been deleted, or in the
317 // process of being deleted. Even in the latter case, we don't want to send a 308 // process of being deleted. Even in the latter case, we don't want to send a
318 // callback after DidDestroy. 309 // callback after DidDestroy.
319 PepperPluginInstanceImpl* instance = 310 PepperPluginInstanceImpl* instance =
320 HostGlobals::Get()->GetInstance(pp_instance()); 311 HostGlobals::Get()->GetInstance(pp_instance());
321 if (!instance || !instance->container()) 312 if (!instance || !instance->container())
322 return; 313 return;
323 314
324 // This PPB_Graphics3D_Impl could be deleted during the call to 315 // This PPB_Graphics3D_Impl could be deleted during the call to
325 // GetPluginInterface (which sends a sync message in some cases). We still 316 // GetPluginInterface (which sends a sync message in some cases). We still
326 // send the Graphics3DContextLost to the plugin; the instance may care about 317 // send the Graphics3DContextLost to the plugin; the instance may care about
327 // that event even though this context has been destroyed. 318 // that event even though this context has been destroyed.
328 PP_Instance this_pp_instance = pp_instance(); 319 PP_Instance this_pp_instance = pp_instance();
329 const PPP_Graphics3D* ppp_graphics_3d = static_cast<const PPP_Graphics3D*>( 320 const PPP_Graphics3D* ppp_graphics_3d = static_cast<const PPP_Graphics3D*>(
330 instance->module()->GetPluginInterface(PPP_GRAPHICS_3D_INTERFACE)); 321 instance->module()->GetPluginInterface(PPP_GRAPHICS_3D_INTERFACE));
331 // We have to check *again* that the instance exists, because it could have 322 // We have to check *again* that the instance exists, because it could have
332 // been deleted during GetPluginInterface(). Even the PluginModule could be 323 // been deleted during GetPluginInterface(). Even the PluginModule could be
333 // deleted, but in that case, the instance should also be gone, so the 324 // deleted, but in that case, the instance should also be gone, so the
334 // GetInstance check covers both cases. 325 // GetInstance check covers both cases.
335 if (ppp_graphics_3d && HostGlobals::Get()->GetInstance(this_pp_instance)) 326 if (ppp_graphics_3d && HostGlobals::Get()->GetInstance(this_pp_instance))
336 ppp_graphics_3d->Graphics3DContextLost(this_pp_instance); 327 ppp_graphics_3d->Graphics3DContextLost(this_pp_instance);
337 } 328 }
338 329
339 } // namespace content 330 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/ppb_graphics_3d_impl.h ('k') | gpu/blink/webgraphicscontext3d_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698