| Index: content/renderer/renderer_blink_platform_impl.cc
|
| diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
|
| index c0de4619230d9ce07d856915f076083e97c5eebd..b45e915dc0e1c300df90b955ac07991f01302ed8 100644
|
| --- a/content/renderer/renderer_blink_platform_impl.cc
|
| +++ b/content/renderer/renderer_blink_platform_impl.cc
|
| @@ -680,15 +680,6 @@ WebString RendererBlinkPlatformImpl::databaseCreateOriginIdentifier(
|
| WebSecurityOriginToGURL(origin)));
|
| }
|
|
|
| -bool RendererBlinkPlatformImpl::canAccelerate2dCanvas() {
|
| - RenderThreadImpl* thread = RenderThreadImpl::current();
|
| - scoped_refptr<gpu::GpuChannelHost> host = thread->EstablishGpuChannelSync();
|
| - if (!host)
|
| - return false;
|
| -
|
| - return !host->gpu_info().software_rendering;
|
| -}
|
| -
|
| bool RendererBlinkPlatformImpl::isThreadedCompositingEnabled() {
|
| RenderThreadImpl* thread = RenderThreadImpl::current();
|
| // thread can be NULL in tests.
|
| @@ -1085,6 +1076,8 @@ RendererBlinkPlatformImpl::createOffscreenGraphicsContext3DProvider(
|
| share_context = share_provider_impl->context_provider();
|
| }
|
|
|
| + bool is_software_rendering = gpu_channel_host->gpu_info().software_rendering;
|
| +
|
| // This is an offscreen context, which doesn't use the default frame buffer,
|
| // so don't request any alpha, depth, stencil, antialiasing.
|
| gpu::gles2::ContextCreationAttribHelper attributes;
|
| @@ -1116,18 +1109,35 @@ RendererBlinkPlatformImpl::createOffscreenGraphicsContext3DProvider(
|
| GURL(top_document_web_url), automatic_flushes, support_locking,
|
| gpu::SharedMemoryLimits(), attributes, share_context,
|
| command_buffer_metrics::OFFSCREEN_CONTEXT_FOR_WEBGL));
|
| - return new WebGraphicsContext3DProviderImpl(std::move(provider));
|
| + return new WebGraphicsContext3DProviderImpl(std::move(provider),
|
| + is_software_rendering);
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| blink::WebGraphicsContext3DProvider*
|
| RendererBlinkPlatformImpl::createSharedOffscreenGraphicsContext3DProvider() {
|
| + auto* thread = RenderThreadImpl::current();
|
| +
|
| scoped_refptr<ContextProviderCommandBuffer> provider =
|
| - RenderThreadImpl::current()->SharedMainThreadContextProvider();
|
| + thread->SharedMainThreadContextProvider();
|
| if (!provider)
|
| return nullptr;
|
| - return new WebGraphicsContext3DProviderImpl(std::move(provider));
|
| +
|
| + scoped_refptr<gpu::GpuChannelHost> host = thread->EstablishGpuChannelSync();
|
| + // This shouldn't normally fail because we just got |provider|. But the
|
| + // channel can become lost on the IO thread since then. It is important that
|
| + // this happens after getting |provider|. In the case that this GpuChannelHost
|
| + // is not the same one backing |provider|, the context behind the |provider|
|
| + // will be already lost/dead on arrival, so the value we get for
|
| + // |is_software_rendering| will never be wrong.
|
| + if (!host)
|
| + return nullptr;
|
| +
|
| + bool is_software_rendering = host->gpu_info().software_rendering;
|
| +
|
| + return new WebGraphicsContext3DProviderImpl(std::move(provider),
|
| + is_software_rendering);
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
|
|