| Index: ui/ozone/platform/drm/host/drm_display_host_manager.cc
|
| diff --git a/ui/ozone/platform/drm/host/drm_display_host_manager.cc b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
|
| index 3fa038dd42d9aa40bd89cac460168bfdaff32125..9f5e292897f535bbc6e149972d26987035342de3 100644
|
| --- a/ui/ozone/platform/drm/host/drm_display_host_manager.cc
|
| +++ b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
|
| @@ -223,6 +223,7 @@ void DrmDisplayHostManager::RelinquishDisplayControl(
|
|
|
| void DrmDisplayHostManager::UpdateDisplays(
|
| const GetDisplaysCallback& callback) {
|
| + DCHECK(get_displays_callback_.is_null());
|
| get_displays_callback_ = callback;
|
| if (!proxy_->RefreshNativeDisplays()) {
|
| get_displays_callback_.Reset();
|
| @@ -307,19 +308,17 @@ void DrmDisplayHostManager::OnRemoveGraphicsDevice(const base::FilePath& path) {
|
| ProcessEvent();
|
| }
|
|
|
| -void DrmDisplayHostManager::OnChannelEstablished(int host_id) {
|
| - // If in the middle of a configuration, just respond with the old list of
|
| - // displays. This is fine, since after the DRM resources are initialized and
|
| - // IPC-ed to the GPU NotifyDisplayDelegate() is called to let the display
|
| - // delegate know that the display configuration changed and it needs to
|
| - // update it again.
|
| - if (!get_displays_callback_.is_null()) {
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&DrmDisplayHostManager::RunUpdateDisplaysCallback,
|
| - weak_ptr_factory_.GetWeakPtr(), get_displays_callback_));
|
| - get_displays_callback_.Reset();
|
| - }
|
| +void DrmDisplayHostManager::OnChannelEstablished() {
|
| + // If in the middle of a configuration - don't respond here.
|
| + // Chromium does so, but that causes a problem:
|
| + // NotifyDisplayDelegate, below, triggers a new update display request which
|
| + // is
|
| + // fulfilled by the results from the first request. That result is empty
|
| + // because
|
| + // we haven't added a drm device yet).
|
| + // The second update display request generates non empty results,
|
| + // but those won't be forwarded to the observer because there is no longer
|
| + // an outstanding request.
|
|
|
| // Signal that we're taking DRM master since we're going through the
|
| // initialization process again and we'll take all the available resources.
|
| @@ -347,7 +346,7 @@ void DrmDisplayHostManager::OnChannelEstablished(int host_id) {
|
| NotifyDisplayDelegate();
|
| }
|
|
|
| -void DrmDisplayHostManager::OnChannelDestroyed(int host_id) {
|
| +void DrmDisplayHostManager::OnChannelDestroyed() {
|
| // Do nothing.
|
| }
|
|
|
|
|