Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Unified Diff: ui/ozone/platform/drm/mus_thread_proxy.cc

Issue 2903353002: Make ozone/drm/mojo more immune to startup races (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/ozone/platform/drm/mus_thread_proxy.cc
diff --git a/ui/ozone/platform/drm/mus_thread_proxy.cc b/ui/ozone/platform/drm/mus_thread_proxy.cc
index a28e9009aac46dedfaf7b02b4f121566672c6d71..c1fb801a1a0717149732e65a8855b4aacb4df0cc 100644
--- a/ui/ozone/platform/drm/mus_thread_proxy.cc
+++ b/ui/ozone/platform/drm/mus_thread_proxy.cc
@@ -59,6 +59,7 @@ void MusThreadProxy::ProvideManagers(DrmDisplayHostManager* display_manager,
overlay_manager_ = overlay_manager;
}
+// Runs on Gpu thread.
void MusThreadProxy::StartDrmThread() {
DCHECK(drm_thread_);
drm_thread_->Start();
@@ -121,8 +122,9 @@ void MusThreadProxy::UnRegisterHandlerForDrmDisplayHostManager() {
}
bool MusThreadProxy::GpuCreateWindow(gfx::AcceleratedWidget widget) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
drm_thread_->task_runner()->PostTask(
FROM_HERE, base::Bind(&DrmThread::CreateWindow,
base::Unretained(drm_thread_), widget));
@@ -130,8 +132,9 @@ bool MusThreadProxy::GpuCreateWindow(gfx::AcceleratedWidget widget) {
}
bool MusThreadProxy::GpuDestroyWindow(gfx::AcceleratedWidget widget) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
drm_thread_->task_runner()->PostTask(
FROM_HERE, base::Bind(&DrmThread::DestroyWindow,
base::Unretained(drm_thread_), widget));
@@ -140,8 +143,9 @@ bool MusThreadProxy::GpuDestroyWindow(gfx::AcceleratedWidget widget) {
bool MusThreadProxy::GpuWindowBoundsChanged(gfx::AcceleratedWidget widget,
const gfx::Rect& bounds) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
drm_thread_->task_runner()->PostTask(
FROM_HERE, base::Bind(&DrmThread::SetWindowBounds,
base::Unretained(drm_thread_), widget, bounds));
@@ -152,8 +156,9 @@ void MusThreadProxy::CursorSet(gfx::AcceleratedWidget widget,
const std::vector<SkBitmap>& bitmaps,
const gfx::Point& location,
int frame_delay_ms) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return;
drm_thread_->task_runner()->PostTask(
FROM_HERE,
base::Bind(&DrmThread::SetCursor, base::Unretained(drm_thread_), widget,
@@ -163,7 +168,8 @@ void MusThreadProxy::CursorSet(gfx::AcceleratedWidget widget,
void MusThreadProxy::Move(gfx::AcceleratedWidget widget,
const gfx::Point& location) {
// NOTE: Input events skip the main thread to avoid jank.
- DCHECK(drm_thread_->IsRunning());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return;
drm_thread_->task_runner()->PostTask(
FROM_HERE, base::Bind(&DrmThread::MoveCursor,
base::Unretained(drm_thread_), widget, location));
@@ -184,8 +190,9 @@ void MusThreadProxy::UnRegisterHandlerForDrmOverlayManager() {
bool MusThreadProxy::GpuCheckOverlayCapabilities(
gfx::AcceleratedWidget widget,
const std::vector<OverlayCheck_Params>& overlays) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto callback =
base::BindOnce(&MusThreadProxy::GpuCheckOverlayCapabilitiesCallback,
weak_ptr_factory_.GetWeakPtr());
@@ -198,8 +205,9 @@ bool MusThreadProxy::GpuCheckOverlayCapabilities(
}
bool MusThreadProxy::GpuRefreshNativeDisplays() {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto callback =
base::BindOnce(&MusThreadProxy::GpuRefreshNativeDisplaysCallback,
weak_ptr_factory_.GetWeakPtr());
@@ -214,8 +222,9 @@ bool MusThreadProxy::GpuRefreshNativeDisplays() {
bool MusThreadProxy::GpuConfigureNativeDisplay(int64_t id,
const DisplayMode_Params& pmode,
const gfx::Point& origin) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto mode = CreateDisplayModeFromParams(pmode);
auto callback =
@@ -231,8 +240,9 @@ bool MusThreadProxy::GpuConfigureNativeDisplay(int64_t id,
}
bool MusThreadProxy::GpuDisableNativeDisplay(int64_t id) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto callback =
base::BindOnce(&MusThreadProxy::GpuDisableNativeDisplayCallback,
weak_ptr_factory_.GetWeakPtr());
@@ -245,8 +255,9 @@ bool MusThreadProxy::GpuDisableNativeDisplay(int64_t id) {
}
bool MusThreadProxy::GpuTakeDisplayControl() {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto callback = base::BindOnce(&MusThreadProxy::GpuTakeDisplayControlCallback,
weak_ptr_factory_.GetWeakPtr());
auto safe_callback = CreateSafeOnceCallback(std::move(callback));
@@ -258,8 +269,9 @@ bool MusThreadProxy::GpuTakeDisplayControl() {
}
bool MusThreadProxy::GpuRelinquishDisplayControl() {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto callback =
base::BindOnce(&MusThreadProxy::GpuRelinquishDisplayControlCallback,
weak_ptr_factory_.GetWeakPtr());
@@ -273,8 +285,9 @@ bool MusThreadProxy::GpuRelinquishDisplayControl() {
bool MusThreadProxy::GpuAddGraphicsDevice(const base::FilePath& path,
const base::FileDescriptor& fd) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
drm_thread_->task_runner()->PostTask(
FROM_HERE, base::Bind(&DrmThread::AddGraphicsDevice,
base::Unretained(drm_thread_), path, fd));
@@ -282,8 +295,9 @@ bool MusThreadProxy::GpuAddGraphicsDevice(const base::FilePath& path,
}
bool MusThreadProxy::GpuRemoveGraphicsDevice(const base::FilePath& path) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
drm_thread_->task_runner()->PostTask(
FROM_HERE, base::Bind(&DrmThread::RemoveGraphicsDevice,
base::Unretained(drm_thread_), path));
@@ -291,8 +305,9 @@ bool MusThreadProxy::GpuRemoveGraphicsDevice(const base::FilePath& path) {
}
bool MusThreadProxy::GpuGetHDCPState(int64_t display_id) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto callback = base::BindOnce(&MusThreadProxy::GpuGetHDCPStateCallback,
weak_ptr_factory_.GetWeakPtr());
auto safe_callback = CreateSafeOnceCallback(std::move(callback));
@@ -306,7 +321,8 @@ bool MusThreadProxy::GpuGetHDCPState(int64_t display_id) {
bool MusThreadProxy::GpuSetHDCPState(int64_t display_id,
display::HDCPState state) {
DCHECK(on_window_server_thread_.CalledOnValidThread());
- DCHECK(drm_thread_->IsRunning());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
auto callback = base::BindOnce(&MusThreadProxy::GpuSetHDCPStateCallback,
weak_ptr_factory_.GetWeakPtr());
auto safe_callback = CreateSafeOnceCallback(std::move(callback));
@@ -322,8 +338,9 @@ bool MusThreadProxy::GpuSetColorCorrection(
const std::vector<display::GammaRampRGBEntry>& degamma_lut,
const std::vector<display::GammaRampRGBEntry>& gamma_lut,
const std::vector<float>& correction_matrix) {
- DCHECK(drm_thread_->IsRunning());
DCHECK(on_window_server_thread_.CalledOnValidThread());
+ if (!drm_thread_ || !drm_thread_->IsRunning())
+ return false;
drm_thread_->task_runner()->PostTask(
FROM_HERE,
base::Bind(&DrmThread::SetColorCorrection, base::Unretained(drm_thread_),

Powered by Google App Engine
This is Rietveld 408576698