| Index: content/renderer/render_thread_impl.cc
|
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
| index 47371369dcb397885bf54f69dbdb24ae27e2b1cc..bcfb95768d4132ab576fd1879451395b641e56ea 100644
|
| --- a/content/renderer/render_thread_impl.cc
|
| +++ b/content/renderer/render_thread_impl.cc
|
| @@ -843,6 +843,11 @@ void RenderThreadImpl::Shutdown() {
|
| main_thread_compositor_task_runner_ = NULL;
|
|
|
| // Context providers must be released prior to destroying the GPU channel.
|
| + if (shared_worker_context_provider_) {
|
| + base::AutoLock lock(*shared_worker_context_provider_->GetLock());
|
| + shared_worker_context_provider_->Destroy();
|
| + shared_worker_context_provider_ = nullptr;
|
| + }
|
| gpu_va_context_provider_ = nullptr;
|
| shared_main_thread_contexts_ = nullptr;
|
|
|
| @@ -1882,6 +1887,30 @@ base::TaskRunner* RenderThreadImpl::GetWorkerTaskRunner() {
|
| return raster_worker_pool_.get();
|
| }
|
|
|
| +scoped_refptr<ContextProviderCommandBuffer>
|
| +RenderThreadImpl::SharedWorkerContextProvider() {
|
| + DCHECK(IsMainThread());
|
| + // Try to reuse existing shared worker context provider.
|
| + if (shared_worker_context_provider_) {
|
| + base::AutoLock lock(*shared_worker_context_provider_->GetLock());
|
| + if (shared_worker_context_provider_->ContextGL()
|
| + ->GetGraphicsResetStatusKHR() != GL_NO_ERROR) {
|
| + shared_worker_context_provider_->Destroy();
|
| + shared_worker_context_provider_ = nullptr;
|
| + }
|
| + }
|
| + if (!shared_worker_context_provider_) {
|
| + 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);
|
| }
|
|
|