Commit 45f387f0 authored by Saman Sami's avatar Saman Sami Committed by Commit Bot

Ozone/DRM: Fix DCHECK due to blocking on WaitableEvent

Add base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope to all
methods in DrmThreadProxy that block.

Fixed: 1047827
Change-Id: I0ff3239d85264244dd6f5a0098ee18daa3c4960e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2033633
Commit-Queue: Saman Sami <samans@chromium.org>
Reviewed-by: default avatarRobert Kroeger <rjkroege@chromium.org>
Reviewed-by: default avatarkylechar <kylechar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738266}
parent 19afa81d
...@@ -219,6 +219,7 @@ class ModelSafeWorker; ...@@ -219,6 +219,7 @@ class ModelSafeWorker;
namespace ui { namespace ui {
class CommandBufferClientImpl; class CommandBufferClientImpl;
class CommandBufferLocal; class CommandBufferLocal;
class DrmThreadProxy;
class GpuState; class GpuState;
class MaterialDesignController; class MaterialDesignController;
} }
...@@ -499,6 +500,7 @@ class BASE_EXPORT ScopedAllowBaseSyncPrimitivesOutsideBlockingScope { ...@@ -499,6 +500,7 @@ class BASE_EXPORT ScopedAllowBaseSyncPrimitivesOutsideBlockingScope {
friend class media::PaintCanvasVideoRenderer; friend class media::PaintCanvasVideoRenderer;
friend class mojo::SyncCallRestrictions; friend class mojo::SyncCallRestrictions;
friend class net::NetworkConfigWatcherMacThread; friend class net::NetworkConfigWatcherMacThread;
friend class ui::DrmThreadProxy;
friend class viz::HostGpuMemoryBufferManager; friend class viz::HostGpuMemoryBufferManager;
friend class vr::VrShell; friend class vr::VrShell;
......
...@@ -88,6 +88,7 @@ void DrmThreadProxy::CreateBuffer(gfx::AcceleratedWidget widget, ...@@ -88,6 +88,7 @@ void DrmThreadProxy::CreateBuffer(gfx::AcceleratedWidget widget,
TRACE_EVENT0("drm", "DrmThreadProxy::CreateBuffer"); TRACE_EVENT0("drm", "DrmThreadProxy::CreateBuffer");
DCHECK(drm_thread_.task_runner()) DCHECK(drm_thread_.task_runner())
<< "no task runner! in DrmThreadProxy::CreateBuffer"; << "no task runner! in DrmThreadProxy::CreateBuffer";
base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait;
base::OnceClosure task = base::OnceClosure task =
base::BindOnce(&DrmThread::CreateBuffer, base::Unretained(&drm_thread_), base::BindOnce(&DrmThread::CreateBuffer, base::Unretained(&drm_thread_),
widget, size, format, usage, flags, buffer, framebuffer); widget, size, format, usage, flags, buffer, framebuffer);
...@@ -129,6 +130,7 @@ void DrmThreadProxy::CreateBufferFromHandle( ...@@ -129,6 +130,7 @@ void DrmThreadProxy::CreateBufferFromHandle(
std::unique_ptr<GbmBuffer>* buffer, std::unique_ptr<GbmBuffer>* buffer,
scoped_refptr<DrmFramebuffer>* framebuffer) { scoped_refptr<DrmFramebuffer>* framebuffer) {
TRACE_EVENT0("drm", "DrmThreadProxy::CreateBufferFromHandle"); TRACE_EVENT0("drm", "DrmThreadProxy::CreateBufferFromHandle");
base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait;
base::OnceClosure task = base::BindOnce( base::OnceClosure task = base::BindOnce(
&DrmThread::CreateBufferFromHandle, base::Unretained(&drm_thread_), &DrmThread::CreateBufferFromHandle, base::Unretained(&drm_thread_),
widget, size, format, std::move(handle), buffer, framebuffer); widget, size, format, std::move(handle), buffer, framebuffer);
...@@ -169,6 +171,7 @@ std::vector<OverlayStatus> DrmThreadProxy::CheckOverlayCapabilitiesSync( ...@@ -169,6 +171,7 @@ std::vector<OverlayStatus> DrmThreadProxy::CheckOverlayCapabilitiesSync(
const std::vector<OverlaySurfaceCandidate>& candidates) { const std::vector<OverlaySurfaceCandidate>& candidates) {
TRACE_EVENT0("drm", "DrmThreadProxy::CheckOverlayCapabilitiesSync"); TRACE_EVENT0("drm", "DrmThreadProxy::CheckOverlayCapabilitiesSync");
DCHECK(drm_thread_.task_runner()); DCHECK(drm_thread_.task_runner());
base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait;
std::vector<OverlayStatus> result; std::vector<OverlayStatus> result;
base::OnceClosure task = base::BindOnce( base::OnceClosure task = base::BindOnce(
&DrmThread::CheckOverlayCapabilitiesSync, base::Unretained(&drm_thread_), &DrmThread::CheckOverlayCapabilitiesSync, base::Unretained(&drm_thread_),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment