| Index: content/renderer/render_thread_impl.cc
|
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
| index 0cdb8c3324d834a9ec5fc687d5bf86bebd6cd555..71a87814c594a6c873a089ead91413c75e642de6 100644
|
| --- a/content/renderer/render_thread_impl.cc
|
| +++ b/content/renderer/render_thread_impl.cc
|
| @@ -846,6 +846,7 @@ void RenderThreadImpl::Shutdown() {
|
| main_thread_compositor_task_runner_ = NULL;
|
|
|
| // Context providers must be released prior to destroying the GPU channel.
|
| + shared_worker_context_provider_ = nullptr;
|
| gpu_va_context_provider_ = nullptr;
|
| shared_main_thread_contexts_ = nullptr;
|
|
|
| @@ -1893,6 +1894,31 @@ base::TaskRunner* RenderThreadImpl::GetWorkerTaskRunner() {
|
| return raster_worker_pool_.get();
|
| }
|
|
|
| +scoped_refptr<ContextProviderCommandBuffer>
|
| +RenderThreadImpl::SharedWorkerContextProvider() {
|
| + DCHECK(IsMainThread());
|
| + // Try to reuse existing shared worker context provider.
|
| + bool shared_worker_context_provider_lost = false;
|
| + if (shared_worker_context_provider_) {
|
| + // Note: If context is lost, delete reference after releasing the lock.
|
| + base::AutoLock lock(*shared_worker_context_provider_->GetLock());
|
| + if (shared_worker_context_provider_->ContextGL()
|
| + ->GetGraphicsResetStatusKHR() != GL_NO_ERROR) {
|
| + shared_worker_context_provider_lost = true;
|
| + }
|
| + }
|
| + if (!shared_worker_context_provider_ || shared_worker_context_provider_lost) {
|
| + shared_worker_context_provider_ = ContextProviderCommandBuffer::Create(
|
| + CreateOffscreenContext3d(), RENDER_WORKER_CONTEXT);
|
| + if (shared_worker_context_provider_ &&
|
| + !shared_worker_context_provider_->BindToCurrentThread())
|
| + shared_worker_context_provider_ = nullptr;
|
| + if (shared_worker_context_provider_)
|
| + shared_worker_context_provider_->SetupLock();
|
| + }
|
| + return shared_worker_context_provider_;
|
| +}
|
| +
|
| void RenderThreadImpl::SampleGamepads(blink::WebGamepads* data) {
|
| blink_platform_impl_->sampleGamepads(*data);
|
| }
|
|
|