| Index: content/renderer/render_widget.cc
|
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
|
| index 7a19c8ee6cca3a6fd5437fbfc33c2dd0d9b4f8c0..3658d1190d615dec06fd864721b3e461469f9aa6 100644
|
| --- a/content/renderer/render_widget.cc
|
| +++ b/content/renderer/render_widget.cc
|
| @@ -19,6 +19,7 @@
|
| #include "cc/output/output_surface.h"
|
| #include "cc/trees/layer_tree_host.h"
|
| #include "content/child/npapi/webplugin.h"
|
| +#include "content/common/gpu/client/context_provider_command_buffer.h"
|
| #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
|
| #include "content/common/input_messages.h"
|
| #include "content/common/swapped_out_messages.h"
|
| @@ -669,37 +670,56 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
| attributes.stencil = false;
|
| if (command_line.HasSwitch(cc::switches::kForceDirectLayerDrawing))
|
| attributes.stencil = true;
|
| - WebGraphicsContext3DCommandBufferImpl* context = NULL;
|
| - if (!fallback)
|
| - context = CreateGraphicsContext3D(attributes);
|
| + scoped_refptr<ContextProviderCommandBuffer> context_provider;
|
| + if (!fallback) {
|
| + context_provider = ContextProviderCommandBuffer::Create(
|
| + base::Bind(&RenderWidget::CreateGraphicsContext3D,
|
| + base::Unretained(this),
|
| + attributes));
|
| + }
|
|
|
| - if (!context) {
|
| + if (!context_provider.get()) {
|
| if (!command_line.HasSwitch(switches::kEnableSoftwareCompositing))
|
| return scoped_ptr<cc::OutputSurface>();
|
| - return scoped_ptr<cc::OutputSurface>(
|
| - new CompositorOutputSurface(routing_id(),
|
| - output_surface_id,
|
| - NULL,
|
| - new CompositorSoftwareOutputDevice(),
|
| - true));
|
| +
|
| + scoped_ptr<cc::SoftwareOutputDevice> software_device(
|
| + new CompositorSoftwareOutputDevice());
|
| +
|
| + return scoped_ptr<cc::OutputSurface>(new CompositorOutputSurface(
|
| + routing_id(),
|
| + output_surface_id,
|
| + NULL,
|
| + software_device.Pass(),
|
| + true));
|
| }
|
|
|
| if (command_line.HasSwitch(switches::kEnableDelegatedRenderer) &&
|
| !command_line.HasSwitch(switches::kDisableDelegatedRenderer)) {
|
| DCHECK(is_threaded_compositing_enabled_);
|
| return scoped_ptr<cc::OutputSurface>(
|
| - new DelegatedCompositorOutputSurface(routing_id(), output_surface_id,
|
| - context, NULL));
|
| + new DelegatedCompositorOutputSurface(
|
| + routing_id(),
|
| + output_surface_id,
|
| + context_provider,
|
| + scoped_ptr<cc::SoftwareOutputDevice>()));
|
| }
|
| if (command_line.HasSwitch(cc::switches::kCompositeToMailbox)) {
|
| DCHECK(is_threaded_compositing_enabled_);
|
| return scoped_ptr<cc::OutputSurface>(
|
| - new MailboxOutputSurface(routing_id(), output_surface_id,
|
| - context, NULL));
|
| + new MailboxOutputSurface(
|
| + routing_id(),
|
| + output_surface_id,
|
| + context_provider,
|
| + scoped_ptr<cc::SoftwareOutputDevice>()));
|
| }
|
| + bool use_swap_compositor_frame_message = false;
|
| return scoped_ptr<cc::OutputSurface>(
|
| - new CompositorOutputSurface(routing_id(), output_surface_id,
|
| - context, NULL, false));
|
| + new CompositorOutputSurface(
|
| + routing_id(),
|
| + output_surface_id,
|
| + context_provider,
|
| + scoped_ptr<cc::SoftwareOutputDevice>(),
|
| + use_swap_compositor_frame_message));
|
| }
|
|
|
| void RenderWidget::OnViewContextSwapBuffersAborted() {
|
| @@ -2506,13 +2526,14 @@ bool RenderWidget::HasTouchEventHandlersAt(const gfx::Point& point) const {
|
| return true;
|
| }
|
|
|
| -WebGraphicsContext3DCommandBufferImpl* RenderWidget::CreateGraphicsContext3D(
|
| +scoped_ptr<WebGraphicsContext3DCommandBufferImpl>
|
| +RenderWidget::CreateGraphicsContext3D(
|
| const WebKit::WebGraphicsContext3D::Attributes& attributes) {
|
| if (!webwidget_)
|
| - return NULL;
|
| + return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>();
|
| if (CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kDisableGpuCompositing))
|
| - return NULL;
|
| + return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>();
|
| scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context(
|
| new WebGraphicsContext3DCommandBufferImpl(
|
| surface_id(),
|
| @@ -2524,8 +2545,8 @@ WebGraphicsContext3DCommandBufferImpl* RenderWidget::CreateGraphicsContext3D(
|
| attributes,
|
| false /* bind generates resources */,
|
| CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE))
|
| - return NULL;
|
| - return context.release();
|
| + return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>();
|
| + return context.Pass();
|
| }
|
|
|
| } // namespace content
|
|
|