| Index: chrome/renderer/webplugin_delegate_pepper.cc
|
| ===================================================================
|
| --- chrome/renderer/webplugin_delegate_pepper.cc (revision 76392)
|
| +++ chrome/renderer/webplugin_delegate_pepper.cc (working copy)
|
| @@ -64,14 +64,6 @@
|
| #include "webkit/plugins/npapi/plugin_host.h"
|
| #include "webkit/plugins/npapi/plugin_stream_url.h"
|
|
|
| -#if defined(ENABLE_GPU)
|
| -#include "webkit/plugins/npapi/plugin_constants_win.h"
|
| -#endif
|
| -
|
| -#if defined(ENABLE_GPU)
|
| -using gpu::Buffer;
|
| -#endif
|
| -
|
| using webkit::npapi::WebPlugin;
|
| using webkit::npapi::WebPluginDelegate;
|
| using webkit::npapi::WebPluginResourceClient;
|
| @@ -88,15 +80,6 @@
|
| TransportDIB* dib;
|
| };
|
|
|
| -struct Device3DImpl {
|
| -#if defined(ENABLE_GPU)
|
| - gpu::CommandBuffer* command_buffer;
|
| -#endif
|
| - bool dynamically_created;
|
| -};
|
| -
|
| -const int32 kDefaultCommandBufferSize = 1024 * 1024;
|
| -
|
| } // namespace
|
|
|
| static const float kPointsPerInch = 72.0;
|
| @@ -198,22 +181,6 @@
|
|
|
| instance_ = 0;
|
| }
|
| -
|
| - // Destroy the nested GPU plugin only after first destroying the underlying
|
| - // Pepper plugin. This is so the Pepper plugin does not attempt to issue
|
| - // rendering commands after the GPU plugin has stopped processing them and
|
| - // responding to them.
|
| - if (nested_delegate_) {
|
| -#if defined(ENABLE_GPU)
|
| - if (command_buffer_) {
|
| - nested_delegate_->DestroyCommandBuffer(command_buffer_);
|
| - command_buffer_ = NULL;
|
| - }
|
| -#endif
|
| -
|
| - nested_delegate_->PluginDestroyed();
|
| - nested_delegate_ = NULL;
|
| - }
|
| }
|
|
|
| void WebPluginDelegatePepper::UpdateGeometry(
|
| @@ -238,21 +205,6 @@
|
| new_committed.allocPixels();
|
| committed_bitmap_ = new_committed;
|
|
|
| - // Forward the new geometry to the nested plugin instance.
|
| - if (nested_delegate_)
|
| - nested_delegate_->UpdateGeometry(window_rect, clip_rect);
|
| -
|
| -#if defined(ENABLE_GPU)
|
| -#if defined(OS_MACOSX)
|
| - // Send the new window size to the command buffer service code so it
|
| - // can allocate a new backing store. The handle to the new backing
|
| - // store is sent back to the browser asynchronously.
|
| - if (command_buffer_) {
|
| - command_buffer_->SetWindowSize(window_rect_.size());
|
| - }
|
| -#endif // OS_MACOSX
|
| -#endif // ENABLE_GPU
|
| -
|
| if (!instance())
|
| return;
|
|
|
| @@ -568,8 +520,7 @@
|
| }
|
|
|
| // This is a windowless plugin, so set it to have no handle. Defer this
|
| - // until we know the plugin will use the 2D device. If it uses the 3D device
|
| - // it will have a window handle.
|
| + // until we know the plugin will use the 2D device.
|
| plugin_->SetWindow(gfx::kNullPluginWindow);
|
|
|
| scoped_ptr<Graphics2DDeviceContext> g2d(new Graphics2DDeviceContext(this));
|
| @@ -670,76 +621,6 @@
|
| NPError WebPluginDelegatePepper::Device3DInitializeContext(
|
| const NPDeviceContext3DConfig* config,
|
| NPDeviceContext3D* context) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| -#if defined(ENABLE_GPU)
|
| - // Check to see if the GPU plugin is already initialized and fail if so.
|
| - if (nested_delegate_)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| - // Create an instance of the GPU plugin that is responsible for 3D
|
| - // rendering.
|
| - nested_delegate_ = new WebPluginDelegateProxy(
|
| - "application/vnd.google.chrome.gpu-plugin", render_view_);
|
| -
|
| - // TODO(apatrick): should the GPU plugin be attached to plugin_?
|
| - if (nested_delegate_->Initialize(GURL(),
|
| - std::vector<std::string>(),
|
| - std::vector<std::string>(),
|
| - plugin_,
|
| - false)) {
|
| - plugin_->SetAcceptsInputEvents(true);
|
| -
|
| - // Ensure the window has the correct size before initializing the
|
| - // command buffer.
|
| - nested_delegate_->UpdateGeometry(window_rect_, clip_rect_);
|
| -
|
| - // Ask the GPU plugin to create a command buffer and return a proxy.
|
| - command_buffer_ = nested_delegate_->CreateCommandBuffer();
|
| - if (command_buffer_) {
|
| - // Initialize the proxy command buffer.
|
| - if (command_buffer_->Initialize(config->commandBufferSize)) {
|
| - // Get the initial command buffer state.
|
| - gpu::CommandBuffer::State state = command_buffer_->GetState();
|
| -
|
| - // Initialize the 3D context.
|
| - context->reserved = NULL;
|
| - context->waitForProgress = true;
|
| - Buffer ring_buffer = command_buffer_->GetRingBuffer();
|
| - context->commandBuffer = ring_buffer.ptr;
|
| - context->commandBufferSize = state.num_entries;
|
| - context->repaintCallback = NULL;
|
| - Synchronize3DContext(context, state);
|
| -
|
| - ScheduleHandleRepaint(instance_->npp(), context);
|
| -
|
| -#if defined(OS_MACOSX)
|
| - command_buffer_->SetWindowSize(window_rect_.size());
|
| -#endif // OS_MACOSX
|
| -
|
| - // Make sure the nested delegate shows up in the right place
|
| - // on the page.
|
| - SendNestedDelegateGeometryToBrowser(window_rect_, clip_rect_);
|
| -
|
| - // Save the implementation information (the CommandBuffer).
|
| - Device3DImpl* impl = new Device3DImpl;
|
| - impl->command_buffer = command_buffer_;
|
| - impl->dynamically_created = false;
|
| - context->reserved = impl;
|
| -
|
| - return NPERR_NO_ERROR;
|
| - }
|
| -
|
| - nested_delegate_->DestroyCommandBuffer(command_buffer_);
|
| - command_buffer_ = NULL;
|
| - }
|
| - }
|
| -
|
| - nested_delegate_->PluginDestroyed();
|
| - nested_delegate_ = NULL;
|
| -#endif // ENABLE_GPU
|
| -
|
| return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| @@ -762,212 +643,49 @@
|
| NPDeviceContext3D* context,
|
| NPDeviceFlushContextCallbackPtr callback,
|
| void* user_data) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| -#if defined(ENABLE_GPU)
|
| - gpu::CommandBuffer::State state;
|
| -
|
| - if (context->waitForProgress) {
|
| - if (callback) {
|
| - command_buffer_->AsyncFlush(
|
| - context->putOffset,
|
| - method_factory3d_.NewRunnableMethod(
|
| - &WebPluginDelegatePepper::Device3DUpdateState,
|
| - id,
|
| - context,
|
| - callback,
|
| - user_data));
|
| - } else {
|
| - state = command_buffer_->FlushSync(context->putOffset);
|
| - Synchronize3DContext(context, state);
|
| - }
|
| - } else {
|
| - if (callback) {
|
| - command_buffer_->AsyncGetState(
|
| - method_factory3d_.NewRunnableMethod(
|
| - &WebPluginDelegatePepper::Device3DUpdateState,
|
| - id,
|
| - context,
|
| - callback,
|
| - user_data));
|
| - } else {
|
| - state = command_buffer_->GetState();
|
| - Synchronize3DContext(context, state);
|
| - }
|
| - }
|
| -#endif // ENABLE_GPU
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DDestroyContext(
|
| NPDeviceContext3D* context) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| -#if defined(ENABLE_GPU)
|
| - // Prevent any async flush callbacks from being invoked after the context
|
| - // has been destroyed.
|
| - method_factory3d_.RevokeAll();
|
| -
|
| - // TODO(apatrick): this will be much simpler when we switch to the new device
|
| - // API. There should be no need for the Device3DImpl and the context will
|
| - // always be destroyed dynamically.
|
| - Device3DImpl* impl = static_cast<Device3DImpl*>(context->reserved);
|
| - bool dynamically_created = impl->dynamically_created;
|
| - delete impl;
|
| - context->reserved = NULL;
|
| - if (dynamically_created) {
|
| - delete context;
|
| - }
|
| -
|
| - if (nested_delegate_) {
|
| - if (command_buffer_) {
|
| - nested_delegate_->DestroyCommandBuffer(command_buffer_);
|
| - command_buffer_ = NULL;
|
| - }
|
| -
|
| - nested_delegate_->PluginDestroyed();
|
| - nested_delegate_ = NULL;
|
| - }
|
| -#endif // ENABLE_GPU
|
| -
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DCreateBuffer(
|
| NPDeviceContext3D* context,
|
| size_t size,
|
| int32* id) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| -#if defined(ENABLE_GPU)
|
| - *id = command_buffer_->CreateTransferBuffer(size);
|
| - if (*id < 0)
|
| - return NPERR_GENERIC_ERROR;
|
| -#endif // ENABLE_GPU
|
| -
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DDestroyBuffer(
|
| NPDeviceContext3D* context,
|
| int32 id) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| -#if defined(ENABLE_GPU)
|
| - command_buffer_->DestroyTransferBuffer(id);
|
| -#endif // ENABLE_GPU
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DMapBuffer(
|
| NPDeviceContext3D* context,
|
| int32 id,
|
| NPDeviceBuffer* np_buffer) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| -#if defined(ENABLE_GPU)
|
| - Buffer gpu_buffer;
|
| - if (id == NP3DCommandBufferId) {
|
| - gpu_buffer = command_buffer_->GetRingBuffer();
|
| - } else {
|
| - gpu_buffer = command_buffer_->GetTransferBuffer(id);
|
| - }
|
| -
|
| - np_buffer->ptr = gpu_buffer.ptr;
|
| - np_buffer->size = gpu_buffer.size;
|
| - if (!np_buffer->ptr)
|
| - return NPERR_GENERIC_ERROR;
|
| -#endif // ENABLE_GPU
|
| -
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DGetNumConfigs(int32* num_configs) {
|
| - if (!num_configs)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| - *num_configs = 1;
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DGetConfigAttribs(
|
| int32 config,
|
| int32* attrib_list) {
|
| - // Only one config available currently.
|
| - if (config != 0)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| - if (attrib_list) {
|
| - for (int32* attrib_pair = attrib_list; *attrib_pair; attrib_pair += 2) {
|
| - switch (attrib_pair[0]) {
|
| - case NP3DAttrib_BufferSize:
|
| - attrib_pair[1] = 32;
|
| - break;
|
| - case NP3DAttrib_AlphaSize:
|
| - case NP3DAttrib_BlueSize:
|
| - case NP3DAttrib_GreenSize:
|
| - case NP3DAttrib_RedSize:
|
| - attrib_pair[1] = 8;
|
| - break;
|
| - case NP3DAttrib_DepthSize:
|
| - attrib_pair[1] = 24;
|
| - break;
|
| - case NP3DAttrib_StencilSize:
|
| - attrib_pair[1] = 8;
|
| - break;
|
| - case NP3DAttrib_SurfaceType:
|
| - attrib_pair[1] = 0;
|
| - break;
|
| - default:
|
| - return NPERR_GENERIC_ERROR;
|
| - }
|
| - }
|
| - }
|
| -
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DCreateContext(
|
| int32 config,
|
| const int32* attrib_list,
|
| NPDeviceContext3D** context) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| - // Only one config available currently.
|
| - if (config != 0)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| - // For now, just use the old API to initialize the context.
|
| - NPDeviceContext3DConfig old_config;
|
| - old_config.commandBufferSize = kDefaultCommandBufferSize;
|
| - if (attrib_list) {
|
| - for (const int32* attrib_pair = attrib_list; *attrib_pair;
|
| - attrib_pair += 2) {
|
| - switch (attrib_pair[0]) {
|
| - case NP3DAttrib_CommandBufferSize:
|
| - old_config.commandBufferSize = attrib_pair[1];
|
| - break;
|
| - default:
|
| - return NPERR_GENERIC_ERROR;
|
| - }
|
| - }
|
| - }
|
| -
|
| - *context = new NPDeviceContext3D;
|
| - Device3DInitializeContext(&old_config, *context);
|
| -
|
| - // Flag the context as dynamically created by the browser. TODO(apatrick):
|
| - // take this out when all contexts are dynamically created.
|
| - Device3DImpl* impl = static_cast<Device3DImpl*>((*context)->reserved);
|
| - impl->dynamically_created = true;
|
| -
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DRegisterCallback(
|
| @@ -976,19 +694,7 @@
|
| int32 callback_type,
|
| NPDeviceGenericCallbackPtr callback,
|
| void* callback_data) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| - switch (callback_type) {
|
| - case NP3DCallback_Repaint:
|
| - context->repaintCallback = reinterpret_cast<NPDeviceContext3DRepaintPtr>(
|
| - callback);
|
| - break;
|
| - default:
|
| - return NPERR_GENERIC_ERROR;
|
| - }
|
| -
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::Device3DSynchronizeContext(
|
| @@ -999,58 +705,7 @@
|
| int32* output_attrib_list,
|
| NPDeviceSynchronizeContextCallbackPtr callback,
|
| void* callback_data) {
|
| - if (!context)
|
| - return NPERR_GENERIC_ERROR;
|
| -
|
| - // Copy input attributes into context.
|
| - if (input_attrib_list) {
|
| - for (const int32* attrib_pair = input_attrib_list;
|
| - *attrib_pair;
|
| - attrib_pair += 2) {
|
| - switch (attrib_pair[0]) {
|
| - case NP3DAttrib_PutOffset:
|
| - context->putOffset = attrib_pair[1];
|
| - break;
|
| - default:
|
| - return NPERR_GENERIC_ERROR;
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Use existing flush mechanism for now.
|
| - if (mode != NPDeviceSynchronizationMode_Cached) {
|
| - context->waitForProgress = mode == NPDeviceSynchronizationMode_Flush;
|
| - Device3DFlushContext(id, context, callback, callback_data);
|
| - }
|
| -
|
| - // Copy most recent output attributes from context.
|
| - // To read output attributes after the completion of an asynchronous flush,
|
| - // invoke SynchronizeContext again with mode
|
| - // NPDeviceSynchronizationMode_Cached from the callback function.
|
| - if (output_attrib_list) {
|
| - for (int32* attrib_pair = output_attrib_list;
|
| - *attrib_pair;
|
| - attrib_pair += 2) {
|
| - switch (attrib_pair[0]) {
|
| - case NP3DAttrib_CommandBufferSize:
|
| - attrib_pair[1] = context->commandBufferSize;
|
| - break;
|
| - case NP3DAttrib_GetOffset:
|
| - attrib_pair[1] = context->getOffset;
|
| - break;
|
| - case NP3DAttrib_PutOffset:
|
| - attrib_pair[1] = context->putOffset;
|
| - break;
|
| - case NP3DAttrib_Token:
|
| - attrib_pair[1] = context->token;
|
| - break;
|
| - default:
|
| - return NPERR_GENERIC_ERROR;
|
| - }
|
| - }
|
| - }
|
| -
|
| - return NPERR_NO_ERROR;
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| NPError WebPluginDelegatePepper::DeviceAudioQueryCapability(int32 capability,
|
| @@ -1383,16 +1038,11 @@
|
| : render_view_(render_view),
|
| plugin_(NULL),
|
| instance_(instance),
|
| - nested_delegate_(NULL),
|
| current_printer_dpi_(-1),
|
| #if defined (OS_LINUX)
|
| num_pages_(0),
|
| pdf_output_done_(false),
|
| #endif // (OS_LINUX)
|
| -#if defined(ENABLE_GPU)
|
| - command_buffer_(NULL),
|
| - method_factory3d_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
|
| -#endif
|
| find_identifier_(-1),
|
| current_choose_file_callback_(NULL),
|
| current_choose_file_user_data_(NULL) {
|
| @@ -1430,21 +1080,16 @@
|
|
|
| void WebPluginDelegatePepper::Paint(WebKit::WebCanvas* canvas,
|
| const gfx::Rect& rect) {
|
| - if (nested_delegate_) {
|
| - // TODO(apatrick): The GPU plugin will render to an offscreen render target.
|
| - // Need to copy it to the screen here.
|
| - } else {
|
| - // Blit from background_context to context.
|
| - if (!committed_bitmap_.isNull()) {
|
| + // Blit from background_context to context.
|
| + if (!committed_bitmap_.isNull()) {
|
| #if defined(OS_MACOSX)
|
| - DrawSkBitmapToCanvas(committed_bitmap_, canvas, window_rect_,
|
| - static_cast<int>(CGBitmapContextGetHeight(canvas)));
|
| + DrawSkBitmapToCanvas(committed_bitmap_, canvas, window_rect_,
|
| + static_cast<int>(CGBitmapContextGetHeight(canvas)));
|
| #else
|
| - canvas->drawBitmap(committed_bitmap_,
|
| - SkIntToScalar(window_rect_.origin().x()),
|
| - SkIntToScalar(window_rect_.origin().y()));
|
| + canvas->drawBitmap(committed_bitmap_,
|
| + SkIntToScalar(window_rect_.origin().x()),
|
| + SkIntToScalar(window_rect_.origin().y()));
|
| #endif
|
| - }
|
| }
|
| }
|
|
|
| @@ -1584,70 +1229,6 @@
|
| return rv;
|
| }
|
|
|
| -#if defined(ENABLE_GPU)
|
| -
|
| -void WebPluginDelegatePepper::ScheduleHandleRepaint(
|
| - NPP npp, NPDeviceContext3D* context) {
|
| - command_buffer_->SetNotifyRepaintTask(method_factory3d_.NewRunnableMethod(
|
| - &WebPluginDelegatePepper::ForwardHandleRepaint,
|
| - npp,
|
| - context));
|
| -}
|
| -
|
| -void WebPluginDelegatePepper::ForwardHandleRepaint(
|
| - NPP npp, NPDeviceContext3D* context) {
|
| - if (context->repaintCallback)
|
| - context->repaintCallback(npp, context);
|
| - ScheduleHandleRepaint(npp, context);
|
| -}
|
| -
|
| -void WebPluginDelegatePepper::Synchronize3DContext(
|
| - NPDeviceContext3D* context,
|
| - const gpu::CommandBuffer::State& state) {
|
| - context->getOffset = state.get_offset;
|
| - context->putOffset = state.put_offset;
|
| - context->token = state.token;
|
| - context->error = static_cast<NPDeviceContext3DError>(state.error);
|
| -}
|
| -
|
| -void WebPluginDelegatePepper::Device3DUpdateState(
|
| - NPP npp,
|
| - NPDeviceContext3D* context,
|
| - NPDeviceFlushContextCallbackPtr callback,
|
| - void* user_data) {
|
| - if (command_buffer_) {
|
| - Synchronize3DContext(context, command_buffer_->GetLastState());
|
| - if (callback)
|
| - callback(npp, context, NPERR_NO_ERROR, user_data);
|
| - }
|
| -}
|
| -
|
| -#endif // ENABLE_GPU
|
| -
|
| -void WebPluginDelegatePepper::SendNestedDelegateGeometryToBrowser(
|
| - const gfx::Rect& window_rect,
|
| - const gfx::Rect& clip_rect) {
|
| - // Inform the browser about the location of the plugin on the page.
|
| - // It appears that initially the plugin does not get laid out correctly --
|
| - // possibly due to lazy creation of the nested delegate.
|
| - if (!nested_delegate_ ||
|
| - !nested_delegate_->GetPluginWindowHandle() ||
|
| - !render_view_) {
|
| - return;
|
| - }
|
| -
|
| - webkit::npapi::WebPluginGeometry geom;
|
| - geom.window = nested_delegate_->GetPluginWindowHandle();
|
| - geom.window_rect = window_rect;
|
| - geom.clip_rect = clip_rect;
|
| - // Rects_valid must be true for this to work in the Gtk port;
|
| - // hopefully not having the cutout rects will not cause incorrect
|
| - // clipping.
|
| - geom.rects_valid = true;
|
| - geom.visible = true;
|
| - render_view_->DidMovePlugin(geom);
|
| -}
|
| -
|
| bool WebPluginDelegatePepper::CalculatePrintedPageDimensions(
|
| int page_number,
|
| NPPPrintExtensions* print_extensions,
|
|
|