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

Side by Side Diff: chrome/renderer/webplugin_delegate_pepper.cc

Issue 555020: Redesigned CommandBuffer and NPDevice3D interfaces (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 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) 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 #define PEPPER_APIS_ENABLED 1 5 #define PEPPER_APIS_ENABLED 1
6 6
7 #include "chrome/renderer/webplugin_delegate_pepper.h" 7 #include "chrome/renderer/webplugin_delegate_pepper.h"
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 std::vector<std::string>(), 345 std::vector<std::string>(),
346 plugin_, 346 plugin_,
347 false)) { 347 false)) {
348 plugin_->SetAcceptsInputEvents(true); 348 plugin_->SetAcceptsInputEvents(true);
349 349
350 // Ask the GPU plugin to create a command buffer and return a proxy. 350 // Ask the GPU plugin to create a command buffer and return a proxy.
351 command_buffer_.reset(nested_delegate_->CreateCommandBuffer()); 351 command_buffer_.reset(nested_delegate_->CreateCommandBuffer());
352 if (command_buffer_.get()) { 352 if (command_buffer_.get()) {
353 // Initialize the proxy command buffer. 353 // Initialize the proxy command buffer.
354 if (command_buffer_->Initialize(config->commandBufferEntries)) { 354 if (command_buffer_->Initialize(config->commandBufferEntries)) {
355 // Get the initial command buffer state.
356 gpu::CommandBuffer::State state = command_buffer_->GetState();
357
355 // Initialize the 3D context. 358 // Initialize the 3D context.
356 context->reserved = NULL; 359 context->reserved = NULL;
357 Buffer ring_buffer = command_buffer_->GetRingBuffer(); 360 Buffer ring_buffer = command_buffer_->GetRingBuffer();
358 context->commandBuffer = ring_buffer.ptr; 361 context->commandBuffer = ring_buffer.ptr;
359 context->commandBufferEntries = command_buffer_->GetSize(); 362 context->commandBufferEntries = state.size;
360 context->getOffset = command_buffer_->GetGetOffset(); 363 Synchronize3DContext(context, state);
361 context->putOffset = command_buffer_->GetPutOffset();
362 364
363 // Ensure the service knows the window size before rendering anything. 365 // Ensure the service knows the window size before rendering anything.
364 nested_delegate_->UpdateGeometry(window_rect_, clip_rect_); 366 nested_delegate_->UpdateGeometry(window_rect_, clip_rect_);
365 // Save the implementation information (the CommandBuffer). 367 // Save the implementation information (the CommandBuffer).
366 Device3DImpl* impl = new Device3DImpl; 368 Device3DImpl* impl = new Device3DImpl;
367 impl->command_buffer = command_buffer_.get(); 369 impl->command_buffer = command_buffer_.get();
368 context->reserved = impl; 370 context->reserved = impl;
369 371
370 return NPERR_NO_ERROR; 372 return NPERR_NO_ERROR;
371 } 373 }
(...skipping 13 matching lines...) Expand all
385 NPDeviceContext3D* context, 387 NPDeviceContext3D* context,
386 int32 state, 388 int32 state,
387 int32 value) { 389 int32 value) {
388 return NPERR_GENERIC_ERROR; 390 return NPERR_GENERIC_ERROR;
389 } 391 }
390 392
391 NPError WebPluginDelegatePepper::Device3DGetStateContext( 393 NPError WebPluginDelegatePepper::Device3DGetStateContext(
392 NPDeviceContext3D* context, 394 NPDeviceContext3D* context,
393 int32 state, 395 int32 state,
394 int32* value) { 396 int32* value) {
395 #if defined(ENABLE_GPU) 397 return NPERR_GENERIC_ERROR;
396 if (!command_buffer_.get())
397 return NPERR_GENERIC_ERROR;
398
399 switch (state) {
400 case NPDeviceContext3DState_GetOffset:
401 context->getOffset = *value = command_buffer_->GetGetOffset();
402 break;
403 case NPDeviceContext3DState_PutOffset:
404 *value = command_buffer_->GetPutOffset();
405 break;
406 case NPDeviceContext3DState_Token:
407 *value = command_buffer_->GetToken();
408 break;
409 case NPDeviceContext3DState_ParseError:
410 *value = command_buffer_->ResetParseError();
411 break;
412 case NPDeviceContext3DState_ErrorStatus:
413 *value = command_buffer_->GetErrorStatus() ? 1 : 0;
414 break;
415 default:
416 return NPERR_GENERIC_ERROR;
417 };
418 #endif // ENABLE_GPU
419
420 return NPERR_NO_ERROR;
421 } 398 }
422 399
423 NPError WebPluginDelegatePepper::Device3DFlushContext( 400 NPError WebPluginDelegatePepper::Device3DFlushContext(
424 NPP id, 401 NPP id,
425 NPDeviceContext3D* context, 402 NPDeviceContext3D* context,
426 NPDeviceFlushContextCallbackPtr callback, 403 NPDeviceFlushContextCallbackPtr callback,
427 void* user_data) { 404 void* user_data) {
428 #if defined(ENABLE_GPU) 405 #if defined(ENABLE_GPU)
429 DCHECK(callback == NULL); 406 gpu::CommandBuffer::State state;
430 context->getOffset = command_buffer_->SyncOffsets(context->putOffset); 407 // Only flush if new commands have been put in the command buffer. Otherwise
408 // update the state to the current service state.
409 if (context->putOffset == last_command_buffer_put_offset_) {
410 state = command_buffer_->GetState();
411 } else {
412 last_command_buffer_put_offset_ = context->putOffset;
413 state = command_buffer_->Flush(context->putOffset);
414 }
415 Synchronize3DContext(context, state);
431 #endif // ENABLE_GPU 416 #endif // ENABLE_GPU
432 return NPERR_NO_ERROR; 417 return NPERR_NO_ERROR;
433 } 418 }
434 419
435 NPError WebPluginDelegatePepper::Device3DDestroyContext( 420 NPError WebPluginDelegatePepper::Device3DDestroyContext(
436 NPDeviceContext3D* context) { 421 NPDeviceContext3D* context) {
437 #if defined(ENABLE_GPU) 422 #if defined(ENABLE_GPU)
438 command_buffer_.reset(); 423 command_buffer_.reset();
439 424
440 if (nested_delegate_) { 425 if (nested_delegate_) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 memset(context, 0, sizeof(NPDeviceContextAudio)); 534 memset(context, 0, sizeof(NPDeviceContextAudio));
550 return NPERR_NO_ERROR; 535 return NPERR_NO_ERROR;
551 } 536 }
552 537
553 WebPluginDelegatePepper::WebPluginDelegatePepper( 538 WebPluginDelegatePepper::WebPluginDelegatePepper(
554 const base::WeakPtr<RenderView>& render_view, 539 const base::WeakPtr<RenderView>& render_view,
555 NPAPI::PluginInstance *instance) 540 NPAPI::PluginInstance *instance)
556 : render_view_(render_view), 541 : render_view_(render_view),
557 plugin_(NULL), 542 plugin_(NULL),
558 instance_(instance), 543 instance_(instance),
559 nested_delegate_(NULL) { 544 nested_delegate_(NULL),
545 last_command_buffer_put_offset_(-1) {
560 // For now we keep a window struct, although it isn't used. 546 // For now we keep a window struct, although it isn't used.
561 memset(&window_, 0, sizeof(window_)); 547 memset(&window_, 0, sizeof(window_));
562 // All Pepper plugins are windowless and transparent. 548 // All Pepper plugins are windowless and transparent.
563 // TODO(sehr): disable resetting these NPPVs by plugins. 549 // TODO(sehr): disable resetting these NPPVs by plugins.
564 instance->set_windowless(true); 550 instance->set_windowless(true);
565 instance->set_transparent(true); 551 instance->set_transparent(true);
566 } 552 }
567 553
568 WebPluginDelegatePepper::~WebPluginDelegatePepper() { 554 WebPluginDelegatePepper::~WebPluginDelegatePepper() {
569 DestroyInstance(); 555 DestroyInstance();
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 BuildCharEvent(&event, &npevent); 699 BuildCharEvent(&event, &npevent);
714 break; 700 break;
715 case NPEventType_Minimize: 701 case NPEventType_Minimize:
716 case NPEventType_Focus: 702 case NPEventType_Focus:
717 case NPEventType_Device: 703 case NPEventType_Device:
718 // NOTIMPLEMENTED(); 704 // NOTIMPLEMENTED();
719 break; 705 break;
720 } 706 }
721 return instance()->NPP_HandleEvent(&npevent) != 0; 707 return instance()->NPP_HandleEvent(&npevent) != 0;
722 } 708 }
709
710 #if defined(ENABLE_GPU)
711 void WebPluginDelegatePepper::Synchronize3DContext(
712 NPDeviceContext3D* context,
713 gpu::CommandBuffer::State state) {
714 context->getOffset = state.get_offset;
715 context->putOffset = state.put_offset;
716 context->token = state.token;
717 context->error = static_cast<int32>(state.error);
718 }
719 #endif // ENABLE_GPU
OLDNEW
« no previous file with comments | « chrome/renderer/webplugin_delegate_pepper.h ('k') | gpu/command_buffer/client/cmd_buffer_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698