| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/ozone/platform/drm/host/drm_display_host.h" | 5 #include "ui/ozone/platform/drm/host/drm_display_host.h" |
| 6 | 6 |
| 7 #include "base/location.h" |
| 7 #include "base/thread_task_runner_handle.h" | 8 #include "base/thread_task_runner_handle.h" |
| 8 #include "ui/ozone/common/display_snapshot_proxy.h" | 9 #include "ui/ozone/common/display_snapshot_proxy.h" |
| 9 #include "ui/ozone/common/display_util.h" | 10 #include "ui/ozone/common/display_util.h" |
| 10 #include "ui/ozone/common/gpu/ozone_gpu_messages.h" | 11 #include "ui/ozone/platform/drm/host/gpu_thread_adapter.h" |
| 11 #include "ui/ozone/platform/drm/host/drm_gpu_platform_support_host.h" | |
| 12 | 12 |
| 13 namespace ui { | 13 namespace ui { |
| 14 | 14 |
| 15 DrmDisplayHost::DrmDisplayHost(DrmGpuPlatformSupportHost* sender, | 15 DrmDisplayHost::DrmDisplayHost(GpuThreadAdapter* sender, |
| 16 const DisplaySnapshot_Params& params, | 16 const DisplaySnapshot_Params& params, |
| 17 bool is_dummy) | 17 bool is_dummy) |
| 18 : sender_(sender), | 18 : sender_(sender), |
| 19 snapshot_(new DisplaySnapshotProxy(params)), | 19 snapshot_(new DisplaySnapshotProxy(params)), |
| 20 is_dummy_(is_dummy) { | 20 is_dummy_(is_dummy) { |
| 21 sender_->AddGpuThreadObserver(this); | 21 sender_->AddGpuThreadObserver(this); |
| 22 } | 22 } |
| 23 | 23 |
| 24 DrmDisplayHost::~DrmDisplayHost() { | 24 DrmDisplayHost::~DrmDisplayHost() { |
| 25 sender_->RemoveGpuThreadObserver(this); | 25 sender_->RemoveGpuThreadObserver(this); |
| 26 ClearCallbacks(); | 26 ClearCallbacks(); |
| 27 } | 27 } |
| 28 | 28 |
| 29 void DrmDisplayHost::UpdateDisplaySnapshot( | 29 void DrmDisplayHost::UpdateDisplaySnapshot( |
| 30 const DisplaySnapshot_Params& params) { | 30 const DisplaySnapshot_Params& params) { |
| 31 snapshot_ = make_scoped_ptr(new DisplaySnapshotProxy(params)); | 31 snapshot_ = make_scoped_ptr(new DisplaySnapshotProxy(params)); |
| 32 } | 32 } |
| 33 | 33 |
| 34 void DrmDisplayHost::Configure(const DisplayMode* mode, | 34 void DrmDisplayHost::Configure(const DisplayMode* mode, |
| 35 const gfx::Point& origin, | 35 const gfx::Point& origin, |
| 36 const ConfigureCallback& callback) { | 36 const ConfigureCallback& callback) { |
| 37 if (is_dummy_) { | 37 if (is_dummy_) { |
| 38 callback.Run(true); | 38 callback.Run(true); |
| 39 return; | 39 return; |
| 40 } | 40 } |
| 41 | 41 |
| 42 configure_callback_ = callback; | 42 configure_callback_ = callback; |
| 43 bool status = false; | 43 bool status = false; |
| 44 if (mode) { | 44 if (mode) { |
| 45 status = sender_->Send(new OzoneGpuMsg_ConfigureNativeDisplay( | 45 status = sender_->GpuConfigureNativeDisplay( |
| 46 snapshot_->display_id(), GetDisplayModeParams(*mode), origin)); | 46 snapshot_->display_id(), GetDisplayModeParams(*mode), origin); |
| 47 } else { | 47 } else { |
| 48 status = sender_->Send( | 48 status = sender_->GpuDisableNativeDisplay(snapshot_->display_id()); |
| 49 new OzoneGpuMsg_DisableNativeDisplay(snapshot_->display_id())); | |
| 50 } | 49 } |
| 51 | 50 |
| 52 if (!status) | 51 if (!status) |
| 53 OnDisplayConfigured(false); | 52 OnDisplayConfigured(false); |
| 54 } | 53 } |
| 55 | 54 |
| 56 void DrmDisplayHost::OnDisplayConfigured(bool status) { | 55 void DrmDisplayHost::OnDisplayConfigured(bool status) { |
| 57 if (!configure_callback_.is_null()) { | 56 if (!configure_callback_.is_null()) { |
| 58 base::ThreadTaskRunnerHandle::Get()->PostTask( | 57 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 59 FROM_HERE, base::Bind(configure_callback_, status)); | 58 FROM_HERE, base::Bind(configure_callback_, status)); |
| 60 } else { | 59 } else { |
| 61 LOG(ERROR) << "Got unexpected event for display " | 60 LOG(ERROR) << "Got unexpected event for display " |
| 62 << snapshot_->display_id(); | 61 << snapshot_->display_id(); |
| 63 } | 62 } |
| 64 | 63 |
| 65 configure_callback_.Reset(); | 64 configure_callback_.Reset(); |
| 66 } | 65 } |
| 67 | 66 |
| 68 void DrmDisplayHost::GetHDCPState(const GetHDCPStateCallback& callback) { | 67 void DrmDisplayHost::GetHDCPState(const GetHDCPStateCallback& callback) { |
| 69 get_hdcp_callback_ = callback; | 68 get_hdcp_callback_ = callback; |
| 70 if (!sender_->Send(new OzoneGpuMsg_GetHDCPState(snapshot_->display_id()))) | 69 if (!sender_->GpuGetHDCPState(snapshot_->display_id())) |
| 71 OnHDCPStateReceived(false, HDCP_STATE_UNDESIRED); | 70 OnHDCPStateReceived(false, HDCP_STATE_UNDESIRED); |
| 72 } | 71 } |
| 73 | 72 |
| 74 void DrmDisplayHost::OnHDCPStateReceived(bool status, HDCPState state) { | 73 void DrmDisplayHost::OnHDCPStateReceived(bool status, HDCPState state) { |
| 75 if (!get_hdcp_callback_.is_null()) { | 74 if (!get_hdcp_callback_.is_null()) { |
| 76 base::ThreadTaskRunnerHandle::Get()->PostTask( | 75 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 77 FROM_HERE, base::Bind(get_hdcp_callback_, status, state)); | 76 FROM_HERE, base::Bind(get_hdcp_callback_, status, state)); |
| 78 } else { | 77 } else { |
| 79 LOG(ERROR) << "Got unexpected event for display " | 78 LOG(ERROR) << "Got unexpected event for display " |
| 80 << snapshot_->display_id(); | 79 << snapshot_->display_id(); |
| 81 } | 80 } |
| 82 | 81 |
| 83 get_hdcp_callback_.Reset(); | 82 get_hdcp_callback_.Reset(); |
| 84 } | 83 } |
| 85 | 84 |
| 86 void DrmDisplayHost::SetHDCPState(HDCPState state, | 85 void DrmDisplayHost::SetHDCPState(HDCPState state, |
| 87 const SetHDCPStateCallback& callback) { | 86 const SetHDCPStateCallback& callback) { |
| 88 set_hdcp_callback_ = callback; | 87 set_hdcp_callback_ = callback; |
| 89 if (!sender_->Send( | 88 if (!sender_->GpuSetHDCPState(snapshot_->display_id(), state)) |
| 90 new OzoneGpuMsg_SetHDCPState(snapshot_->display_id(), state))) | |
| 91 OnHDCPStateUpdated(false); | 89 OnHDCPStateUpdated(false); |
| 92 } | 90 } |
| 93 | 91 |
| 94 void DrmDisplayHost::OnHDCPStateUpdated(bool status) { | 92 void DrmDisplayHost::OnHDCPStateUpdated(bool status) { |
| 95 if (!set_hdcp_callback_.is_null()) { | 93 if (!set_hdcp_callback_.is_null()) { |
| 96 base::ThreadTaskRunnerHandle::Get()->PostTask( | 94 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 97 FROM_HERE, base::Bind(set_hdcp_callback_, status)); | 95 FROM_HERE, base::Bind(set_hdcp_callback_, status)); |
| 98 } else { | 96 } else { |
| 99 LOG(ERROR) << "Got unexpected event for display " | 97 LOG(ERROR) << "Got unexpected event for display " |
| 100 << snapshot_->display_id(); | 98 << snapshot_->display_id(); |
| 101 } | 99 } |
| 102 | 100 |
| 103 set_hdcp_callback_.Reset(); | 101 set_hdcp_callback_.Reset(); |
| 104 } | 102 } |
| 105 | 103 |
| 106 void DrmDisplayHost::SetGammaRamp(const std::vector<GammaRampRGBEntry>& lut) { | 104 void DrmDisplayHost::SetGammaRamp(const std::vector<GammaRampRGBEntry>& lut) { |
| 107 sender_->Send(new OzoneGpuMsg_SetGammaRamp(snapshot_->display_id(), lut)); | 105 sender_->GpuSetGammaRamp(snapshot_->display_id(), lut); |
| 108 } | 106 } |
| 109 | 107 |
| 110 void DrmDisplayHost::OnGpuThreadReady() { | 108 void DrmDisplayHost::OnGpuThreadReady() { |
| 111 is_dummy_ = false; | 109 is_dummy_ = false; |
| 112 | 110 |
| 113 // Note: These responses are done here since the OnChannelDestroyed() is | 111 // Note: These responses are done here since the OnChannelDestroyed() is |
| 114 // called after OnChannelEstablished(). | 112 // called after OnChannelEstablished(). |
| 115 ClearCallbacks(); | 113 ClearCallbacks(); |
| 116 } | 114 } |
| 117 | 115 |
| 118 void DrmDisplayHost::OnGpuThreadRetired() {} | 116 void DrmDisplayHost::OnGpuThreadRetired() {} |
| 119 | 117 |
| 120 void DrmDisplayHost::ClearCallbacks() { | 118 void DrmDisplayHost::ClearCallbacks() { |
| 121 if (!configure_callback_.is_null()) | 119 if (!configure_callback_.is_null()) |
| 122 OnDisplayConfigured(false); | 120 OnDisplayConfigured(false); |
| 123 if (!get_hdcp_callback_.is_null()) | 121 if (!get_hdcp_callback_.is_null()) |
| 124 OnHDCPStateReceived(false, HDCP_STATE_UNDESIRED); | 122 OnHDCPStateReceived(false, HDCP_STATE_UNDESIRED); |
| 125 if (!set_hdcp_callback_.is_null()) | 123 if (!set_hdcp_callback_.is_null()) |
| 126 OnHDCPStateUpdated(false); | 124 OnHDCPStateUpdated(false); |
| 127 } | 125 } |
| 128 | 126 |
| 129 } // namespace ui | 127 } // namespace ui |
| OLD | NEW |