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

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

Issue 20777009: A few more cleanups to the pepper code. Dispatch IPCs in the sockets implementations directly by ha… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix browsertest Created 7 years, 4 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) 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/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "content/renderer/pepper/host_globals.h"
11 #include "content/renderer/pepper/pepper_platform_context_3d.h" 12 #include "content/renderer/pepper/pepper_platform_context_3d.h"
12 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 13 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
13 #include "content/renderer/pepper/plugin_module.h" 14 #include "content/renderer/pepper/plugin_module.h"
14 #include "content/renderer/pepper/resource_helper.h"
15 #include "content/renderer/render_view_impl.h" 15 #include "content/renderer/render_view_impl.h"
16 #include "gpu/command_buffer/client/gles2_implementation.h" 16 #include "gpu/command_buffer/client/gles2_implementation.h"
17 #include "ppapi/c/ppp_graphics_3d.h" 17 #include "ppapi/c/ppp_graphics_3d.h"
18 #include "ppapi/thunk/enter.h" 18 #include "ppapi/thunk/enter.h"
19 #include "third_party/WebKit/public/platform/WebString.h" 19 #include "third_party/WebKit/public/platform/WebString.h"
20 #include "third_party/WebKit/public/web/WebConsoleMessage.h" 20 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
21 #include "third_party/WebKit/public/web/WebDocument.h" 21 #include "third_party/WebKit/public/web/WebDocument.h"
22 #include "third_party/WebKit/public/web/WebElement.h" 22 #include "third_party/WebKit/public/web/WebElement.h"
23 #include "third_party/WebKit/public/web/WebFrame.h" 23 #include "third_party/WebKit/public/web/WebFrame.h"
24 #include "third_party/WebKit/public/web/WebPluginContainer.h" 24 #include "third_party/WebKit/public/web/WebPluginContainer.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 gles2_impl()->SwapBuffers(); 198 gles2_impl()->SwapBuffers();
199 199
200 if (bound_to_instance_) { 200 if (bound_to_instance_) {
201 // If we are bound to the instance, we need to ask the compositor 201 // If we are bound to the instance, we need to ask the compositor
202 // to commit our backing texture so that the graphics appears on the page. 202 // to commit our backing texture so that the graphics appears on the page.
203 // When the backing texture will be committed we get notified via 203 // When the backing texture will be committed we get notified via
204 // ViewFlushedPaint(). 204 // ViewFlushedPaint().
205 // 205 //
206 // Don't need to check for NULL from GetPluginInstance since when we're 206 // Don't need to check for NULL from GetPluginInstance since when we're
207 // bound, we know our instance is valid. 207 // bound, we know our instance is valid.
208 ResourceHelper::GetPluginInstance(this)->CommitBackingTexture(); 208 HostGlobals::Get()->GetInstance(pp_instance())->CommitBackingTexture();
209 commit_pending_ = true; 209 commit_pending_ = true;
210 } else { 210 } else {
211 // Wait for the command to complete on the GPU to allow for throttling. 211 // Wait for the command to complete on the GPU to allow for throttling.
212 platform_context_->Echo(base::Bind(&PPB_Graphics3D_Impl::OnSwapBuffers, 212 platform_context_->Echo(base::Bind(&PPB_Graphics3D_Impl::OnSwapBuffers,
213 weak_ptr_factory_.GetWeakPtr())); 213 weak_ptr_factory_.GetWeakPtr()));
214 } 214 }
215 215
216 216
217 return PP_OK_COMPLETIONPENDING; 217 return PP_OK_COMPLETIONPENDING;
218 } 218 }
(...skipping 13 matching lines...) Expand all
232 static_cast<PPB_Graphics3D_Shared*>(share_context)->gles2_impl(); 232 static_cast<PPB_Graphics3D_Shared*>(share_context)->gles2_impl();
233 } 233 }
234 234
235 return CreateGLES2Impl(kCommandBufferSize, kTransferBufferSize, 235 return CreateGLES2Impl(kCommandBufferSize, kTransferBufferSize,
236 share_gles2); 236 share_gles2);
237 } 237 }
238 238
239 bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context, 239 bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context,
240 const int32_t* attrib_list) { 240 const int32_t* attrib_list) {
241 PepperPluginInstanceImpl* plugin_instance = 241 PepperPluginInstanceImpl* plugin_instance =
242 ResourceHelper::GetPluginInstance(this); 242 HostGlobals::Get()->GetInstance(pp_instance());
243 if (!plugin_instance) 243 if (!plugin_instance)
244 return false; 244 return false;
245 245
246 PlatformContext3D* share_platform_context = NULL; 246 PlatformContext3D* share_platform_context = NULL;
247 if (share_context) { 247 if (share_context) {
248 PPB_Graphics3D_Impl* share_graphics = 248 PPB_Graphics3D_Impl* share_graphics =
249 static_cast<PPB_Graphics3D_Impl*>(share_context); 249 static_cast<PPB_Graphics3D_Impl*>(share_context);
250 share_platform_context = share_graphics->platform_context(); 250 share_platform_context = share_graphics->platform_context();
251 } 251 }
252 252
(...skipping 20 matching lines...) Expand all
273 base::Bind(&PPB_Graphics3D_Impl::OnConsoleMessage, 273 base::Bind(&PPB_Graphics3D_Impl::OnConsoleMessage,
274 weak_ptr_factory_.GetWeakPtr())); 274 weak_ptr_factory_.GetWeakPtr()));
275 return true; 275 return true;
276 } 276 }
277 277
278 void PPB_Graphics3D_Impl::OnConsoleMessage(const std::string& message, 278 void PPB_Graphics3D_Impl::OnConsoleMessage(const std::string& message,
279 int id) { 279 int id) {
280 if (!bound_to_instance_) 280 if (!bound_to_instance_)
281 return; 281 return;
282 WebPluginContainer* container = 282 WebPluginContainer* container =
283 ResourceHelper::GetPluginInstance(this)->container(); 283 HostGlobals::Get()->GetInstance(pp_instance())->container();
284 if (!container) 284 if (!container)
285 return; 285 return;
286 WebFrame* frame = container->element().document().frame(); 286 WebFrame* frame = container->element().document().frame();
287 if (!frame) 287 if (!frame)
288 return; 288 return;
289 WebConsoleMessage console_message = WebConsoleMessage( 289 WebConsoleMessage console_message = WebConsoleMessage(
290 WebConsoleMessage::LevelError, WebString(UTF8ToUTF16(message))); 290 WebConsoleMessage::LevelError, WebString(UTF8ToUTF16(message)));
291 frame->addMessageToConsole(console_message); 291 frame->addMessageToConsole(console_message);
292 } 292 }
293 293
294 void PPB_Graphics3D_Impl::OnSwapBuffers() { 294 void PPB_Graphics3D_Impl::OnSwapBuffers() {
295 if (HasPendingSwap()) { 295 if (HasPendingSwap()) {
296 // If we're off-screen, no need to trigger and wait for compositing. 296 // If we're off-screen, no need to trigger and wait for compositing.
297 // Just send the swap-buffers ACK to the plugin immediately. 297 // Just send the swap-buffers ACK to the plugin immediately.
298 commit_pending_ = false; 298 commit_pending_ = false;
299 SwapBuffersACK(PP_OK); 299 SwapBuffersACK(PP_OK);
300 } 300 }
301 } 301 }
302 302
303 void PPB_Graphics3D_Impl::OnContextLost() { 303 void PPB_Graphics3D_Impl::OnContextLost() {
304 // Don't need to check for NULL from GetPluginInstance since when we're 304 // Don't need to check for NULL from GetPluginInstance since when we're
305 // bound, we know our instance is valid. 305 // bound, we know our instance is valid.
306 if (bound_to_instance_) 306 if (bound_to_instance_) {
307 ResourceHelper::GetPluginInstance(this)->BindGraphics(pp_instance(), 0); 307 HostGlobals::Get()->GetInstance(pp_instance())->BindGraphics(
308 pp_instance(), 0);
309 }
308 310
309 // Send context lost to plugin. This may have been caused by a PPAPI call, so 311 // Send context lost to plugin. This may have been caused by a PPAPI call, so
310 // avoid re-entering. 312 // avoid re-entering.
311 base::MessageLoop::current()->PostTask( 313 base::MessageLoop::current()->PostTask(
312 FROM_HERE, 314 FROM_HERE,
313 base::Bind(&PPB_Graphics3D_Impl::SendContextLost, 315 base::Bind(&PPB_Graphics3D_Impl::SendContextLost,
314 weak_ptr_factory_.GetWeakPtr())); 316 weak_ptr_factory_.GetWeakPtr()));
315 } 317 }
316 318
317 void PPB_Graphics3D_Impl::SendContextLost() { 319 void PPB_Graphics3D_Impl::SendContextLost() {
318 // By the time we run this, the instance may have been deleted, or in the 320 // By the time we run this, the instance may have been deleted, or in the
319 // process of being deleted. Even in the latter case, we don't want to send a 321 // process of being deleted. Even in the latter case, we don't want to send a
320 // callback after DidDestroy. 322 // callback after DidDestroy.
321 PepperPluginInstanceImpl* instance = ResourceHelper::GetPluginInstance(this); 323 PepperPluginInstanceImpl* instance =
324 HostGlobals::Get()->GetInstance(pp_instance());
322 if (!instance || !instance->container()) 325 if (!instance || !instance->container())
323 return; 326 return;
324 327
325 // This PPB_Graphics3D_Impl could be deleted during the call to 328 // This PPB_Graphics3D_Impl could be deleted during the call to
326 // GetPluginInterface (which sends a sync message in some cases). We still 329 // GetPluginInterface (which sends a sync message in some cases). We still
327 // send the Graphics3DContextLost to the plugin; the instance may care about 330 // send the Graphics3DContextLost to the plugin; the instance may care about
328 // that event even though this context has been destroyed. 331 // that event even though this context has been destroyed.
329 PP_Instance this_pp_instance = pp_instance(); 332 PP_Instance this_pp_instance = pp_instance();
330 const PPP_Graphics3D* ppp_graphics_3d = 333 const PPP_Graphics3D* ppp_graphics_3d =
331 static_cast<const PPP_Graphics3D*>( 334 static_cast<const PPP_Graphics3D*>(
332 instance->module()->GetPluginInterface( 335 instance->module()->GetPluginInterface(
333 PPP_GRAPHICS_3D_INTERFACE)); 336 PPP_GRAPHICS_3D_INTERFACE));
334 if (ppp_graphics_3d) 337 if (ppp_graphics_3d)
335 ppp_graphics_3d->Graphics3DContextLost(this_pp_instance); 338 ppp_graphics_3d->Graphics3DContextLost(this_pp_instance);
336 } 339 }
337 340
338 } // namespace content 341 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/ppb_file_ref_impl.cc ('k') | content/renderer/pepper/ppb_image_data_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698