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

Side by Side Diff: ui/ozone/platform/drm/mus_thread_proxy.cc

Issue 1831693002: In-mus ozone drm platform implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more review comments Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « ui/ozone/platform/drm/mus_thread_proxy.h ('k') | ui/ozone/platform/drm/ozone_platform_gbm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/ozone/platform/drm/mus_thread_proxy.h"
6
7 #include "base/bind.h"
8 #include "base/single_thread_task_runner.h"
9 #include "base/task_runner.h"
10 #include "base/thread_task_runner_handle.h"
11 #include "ui/ozone/platform/drm/gpu/drm_thread.h"
12 #include "ui/ozone/platform/drm/gpu/proxy_helpers.h"
13 #include "ui/ozone/platform/drm/host/drm_display_host_manager.h"
14 #include "ui/ozone/platform/drm/host/drm_overlay_manager.h"
15
16 namespace ui {
17
18 MusThreadProxy::MusThreadProxy()
19 : ws_task_runner_(base::ThreadTaskRunnerHandle::Get()),
20 drm_thread_(nullptr),
21 weak_ptr_factory_(this) {}
22
23 MusThreadProxy::~MusThreadProxy() {
24 DCHECK(on_window_server_thread_.CalledOnValidThread());
25 FOR_EACH_OBSERVER(GpuThreadObserver, gpu_thread_observers_,
26 OnGpuThreadRetired());
27 }
28
29 // This is configured on the GPU thread.
30 void MusThreadProxy::SetDrmThread(DrmThread* thread) {
31 base::AutoLock acquire(lock_);
32 drm_thread_ = thread;
33 }
34
35 void MusThreadProxy::ProvideManagers(DrmDisplayHostManager* display_manager,
36 DrmOverlayManager* overlay_manager) {
37 display_manager_ = display_manager;
38 overlay_manager_ = overlay_manager;
39 }
40
41 void MusThreadProxy::StartDrmThread() {
42 DCHECK(drm_thread_);
43 drm_thread_->Start();
44
45 drm_thread_->task_runner()->PostTask(
46 FROM_HERE, base::Bind(&MusThreadProxy::DispatchObserversFromDrmThread,
47 base::Unretained(this)));
48 }
49
50 void MusThreadProxy::DispatchObserversFromDrmThread() {
51 ws_task_runner_->PostTask(FROM_HERE, base::Bind(&MusThreadProxy::RunObservers,
52 base::Unretained(this)));
53 }
54
55 void MusThreadProxy::RunObservers() {
56 DCHECK(on_window_server_thread_.CalledOnValidThread());
57 FOR_EACH_OBSERVER(GpuThreadObserver, gpu_thread_observers_,
58 OnGpuThreadReady());
59 }
60
61 void MusThreadProxy::AddGpuThreadObserver(GpuThreadObserver* observer) {
62 DCHECK(on_window_server_thread_.CalledOnValidThread());
63
64 gpu_thread_observers_.AddObserver(observer);
65 if (IsConnected())
66 observer->OnGpuThreadReady();
67 }
68
69 void MusThreadProxy::RemoveGpuThreadObserver(GpuThreadObserver* observer) {
70 DCHECK(on_window_server_thread_.CalledOnValidThread());
71 gpu_thread_observers_.RemoveObserver(observer);
72 }
73
74 bool MusThreadProxy::IsConnected() {
75 DCHECK(on_window_server_thread_.CalledOnValidThread());
76 base::AutoLock acquire(lock_);
77 if (drm_thread_)
78 return drm_thread_->IsRunning();
79 return false;
80 }
81
82 // Services needed for DrmDisplayHostMananger.
83 void MusThreadProxy::RegisterHandlerForDrmDisplayHostManager(
84 DrmDisplayHostManager* handler) {
85 DCHECK(on_window_server_thread_.CalledOnValidThread());
86 display_manager_ = handler;
87 }
88
89 void MusThreadProxy::UnRegisterHandlerForDrmDisplayHostManager() {
90 DCHECK(on_window_server_thread_.CalledOnValidThread());
91 display_manager_ = nullptr;
92 }
93
94 bool MusThreadProxy::GpuCreateWindow(gfx::AcceleratedWidget widget) {
95 DCHECK(drm_thread_->IsRunning());
96 DCHECK(on_window_server_thread_.CalledOnValidThread());
97 drm_thread_->task_runner()->PostTask(
98 FROM_HERE, base::Bind(&DrmThread::CreateWindow,
99 base::Unretained(drm_thread_), widget));
100 return true;
101 }
102
103 bool MusThreadProxy::GpuDestroyWindow(gfx::AcceleratedWidget widget) {
104 DCHECK(drm_thread_->IsRunning());
105 DCHECK(on_window_server_thread_.CalledOnValidThread());
106 drm_thread_->task_runner()->PostTask(
107 FROM_HERE, base::Bind(&DrmThread::DestroyWindow,
108 base::Unretained(drm_thread_), widget));
109 return true;
110 }
111
112 bool MusThreadProxy::GpuWindowBoundsChanged(gfx::AcceleratedWidget widget,
113 const gfx::Rect& bounds) {
114 DCHECK(drm_thread_->IsRunning());
115 DCHECK(on_window_server_thread_.CalledOnValidThread());
116 drm_thread_->task_runner()->PostTask(
117 FROM_HERE, base::Bind(&DrmThread::SetWindowBounds,
118 base::Unretained(drm_thread_), widget, bounds));
119 return true;
120 }
121
122 void MusThreadProxy::CursorSet(gfx::AcceleratedWidget widget,
123 const std::vector<SkBitmap>& bitmaps,
124 const gfx::Point& location,
125 int frame_delay_ms) {
126 DCHECK(drm_thread_->IsRunning());
127 DCHECK(on_window_server_thread_.CalledOnValidThread());
128 drm_thread_->task_runner()->PostTask(
129 FROM_HERE,
130 base::Bind(&DrmThread::SetCursor, base::Unretained(drm_thread_), widget,
131 bitmaps, location, frame_delay_ms));
132 }
133
134 void MusThreadProxy::Move(gfx::AcceleratedWidget widget,
135 const gfx::Point& location) {
136 DCHECK(drm_thread_->IsRunning());
137 DCHECK(on_window_server_thread_.CalledOnValidThread());
138 drm_thread_->task_runner()->PostTask(
139 FROM_HERE, base::Bind(&DrmThread::MoveCursor,
140 base::Unretained(drm_thread_), widget, location));
141 }
142
143 // Services needed for DrmOverlayManager.
144 void MusThreadProxy::RegisterHandlerForDrmOverlayManager(
145 DrmOverlayManager* handler) {
146 DCHECK(on_window_server_thread_.CalledOnValidThread());
147 overlay_manager_ = handler;
148 }
149
150 void MusThreadProxy::UnRegisterHandlerForDrmOverlayManager() {
151 DCHECK(on_window_server_thread_.CalledOnValidThread());
152 overlay_manager_ = nullptr;
153 }
154
155 bool MusThreadProxy::GpuCheckOverlayCapabilities(
156 gfx::AcceleratedWidget widget,
157 const std::vector<OverlayCheck_Params>& overlays) {
158 DCHECK(drm_thread_->IsRunning());
159 DCHECK(on_window_server_thread_.CalledOnValidThread());
160 auto callback =
161 base::Bind(&MusThreadProxy::GpuCheckOverlayCapabilitiesCallback,
162 weak_ptr_factory_.GetWeakPtr());
163 drm_thread_->task_runner()->PostTask(
164 FROM_HERE, base::Bind(&DrmThread::CheckOverlayCapabilities,
165 base::Unretained(drm_thread_), widget, overlays,
166 CreateSafeCallback(callback)));
167 return true;
168 }
169
170 bool MusThreadProxy::GpuRefreshNativeDisplays() {
171 DCHECK(drm_thread_->IsRunning());
172 DCHECK(on_window_server_thread_.CalledOnValidThread());
173 auto callback = base::Bind(&MusThreadProxy::GpuRefreshNativeDisplaysCallback,
174 weak_ptr_factory_.GetWeakPtr());
175 drm_thread_->task_runner()->PostTask(
176 FROM_HERE,
177 base::Bind(&DrmThread::RefreshNativeDisplays,
178 base::Unretained(drm_thread_), CreateSafeCallback(callback)));
179 return true;
180 }
181
182 bool MusThreadProxy::GpuConfigureNativeDisplay(int64_t id,
183 const DisplayMode_Params& mode,
184 const gfx::Point& origin) {
185 DCHECK(drm_thread_->IsRunning());
186 DCHECK(on_window_server_thread_.CalledOnValidThread());
187
188 auto callback = base::Bind(&MusThreadProxy::GpuConfigureNativeDisplayCallback,
189 weak_ptr_factory_.GetWeakPtr());
190 drm_thread_->task_runner()->PostTask(
191 FROM_HERE, base::Bind(&DrmThread::ConfigureNativeDisplay,
192 base::Unretained(drm_thread_), id, mode, origin,
193 CreateSafeCallback(callback)));
194 return true;
195 }
196
197 bool MusThreadProxy::GpuDisableNativeDisplay(int64_t id) {
198 DCHECK(drm_thread_->IsRunning());
199 DCHECK(on_window_server_thread_.CalledOnValidThread());
200 auto callback = base::Bind(&MusThreadProxy::GpuDisableNativeDisplayCallback,
201 weak_ptr_factory_.GetWeakPtr());
202 drm_thread_->task_runner()->PostTask(
203 FROM_HERE, base::Bind(&DrmThread::DisableNativeDisplay,
204 base::Unretained(drm_thread_), id,
205 CreateSafeCallback(callback)));
206 return true;
207 }
208
209 bool MusThreadProxy::GpuTakeDisplayControl() {
210 DCHECK(drm_thread_->IsRunning());
211 DCHECK(on_window_server_thread_.CalledOnValidThread());
212 auto callback = base::Bind(&MusThreadProxy::GpuTakeDisplayControlCallback,
213 weak_ptr_factory_.GetWeakPtr());
214 drm_thread_->task_runner()->PostTask(
215 FROM_HERE,
216 base::Bind(&DrmThread::TakeDisplayControl, base::Unretained(drm_thread_),
217 CreateSafeCallback(callback)));
218 return true;
219 }
220
221 bool MusThreadProxy::GpuRelinquishDisplayControl() {
222 DCHECK(drm_thread_->IsRunning());
223 DCHECK(on_window_server_thread_.CalledOnValidThread());
224 auto callback =
225 base::Bind(&MusThreadProxy::GpuRelinquishDisplayControlCallback,
226 weak_ptr_factory_.GetWeakPtr());
227 drm_thread_->task_runner()->PostTask(
228 FROM_HERE,
229 base::Bind(&DrmThread::RelinquishDisplayControl,
230 base::Unretained(drm_thread_), CreateSafeCallback(callback)));
231 return true;
232 }
233
234 bool MusThreadProxy::GpuAddGraphicsDevice(const base::FilePath& path,
235 const base::FileDescriptor& fd) {
236 DCHECK(drm_thread_->IsRunning());
237 DCHECK(on_window_server_thread_.CalledOnValidThread());
238 drm_thread_->task_runner()->PostTask(
239 FROM_HERE, base::Bind(&DrmThread::AddGraphicsDevice,
240 base::Unretained(drm_thread_), path, fd));
241 return true;
242 }
243
244 bool MusThreadProxy::GpuRemoveGraphicsDevice(const base::FilePath& path) {
245 DCHECK(drm_thread_->IsRunning());
246 DCHECK(on_window_server_thread_.CalledOnValidThread());
247 drm_thread_->task_runner()->PostTask(
248 FROM_HERE, base::Bind(&DrmThread::RemoveGraphicsDevice,
249 base::Unretained(drm_thread_), path));
250 return true;
251 }
252
253 bool MusThreadProxy::GpuGetHDCPState(int64_t display_id) {
254 DCHECK(drm_thread_->IsRunning());
255 DCHECK(on_window_server_thread_.CalledOnValidThread());
256 auto callback = base::Bind(&MusThreadProxy::GpuGetHDCPStateCallback,
257 weak_ptr_factory_.GetWeakPtr());
258 drm_thread_->task_runner()->PostTask(
259 FROM_HERE,
260 base::Bind(&DrmThread::GetHDCPState, base::Unretained(drm_thread_),
261 display_id, CreateSafeCallback(callback)));
262 return true;
263 }
264
265 bool MusThreadProxy::GpuSetHDCPState(int64_t display_id, HDCPState state) {
266 DCHECK(on_window_server_thread_.CalledOnValidThread());
267 DCHECK(drm_thread_->IsRunning());
268 auto callback = base::Bind(&MusThreadProxy::GpuSetHDCPStateCallback,
269 weak_ptr_factory_.GetWeakPtr());
270 drm_thread_->task_runner()->PostTask(
271 FROM_HERE,
272 base::Bind(&DrmThread::SetHDCPState, base::Unretained(drm_thread_),
273 display_id, state, CreateSafeCallback(callback)));
274 return true;
275 }
276
277 bool MusThreadProxy::GpuSetGammaRamp(
278 int64_t id,
279 const std::vector<GammaRampRGBEntry>& lut) {
280 DCHECK(drm_thread_->IsRunning());
281 DCHECK(on_window_server_thread_.CalledOnValidThread());
282 drm_thread_->task_runner()->PostTask(
283 FROM_HERE, base::Bind(&DrmThread::SetGammaRamp,
284 base::Unretained(drm_thread_), id, lut));
285 return true;
286 }
287
288 void MusThreadProxy::GpuCheckOverlayCapabilitiesCallback(
289 gfx::AcceleratedWidget widget,
290 const std::vector<OverlayCheck_Params>& overlays) const {
291 DCHECK(on_window_server_thread_.CalledOnValidThread());
292 overlay_manager_->GpuSentOverlayResult(widget, overlays);
293 }
294
295 void MusThreadProxy::GpuConfigureNativeDisplayCallback(int64_t display_id,
296 bool success) const {
297 DCHECK(on_window_server_thread_.CalledOnValidThread());
298 display_manager_->GpuConfiguredDisplay(display_id, success);
299 }
300
301 void MusThreadProxy::GpuRefreshNativeDisplaysCallback(
302 const std::vector<DisplaySnapshot_Params>& displays) const {
303 DCHECK(on_window_server_thread_.CalledOnValidThread());
304 display_manager_->GpuHasUpdatedNativeDisplays(displays);
305 }
306
307 void MusThreadProxy::GpuDisableNativeDisplayCallback(int64_t display_id,
308 bool success) const {
309 DCHECK(on_window_server_thread_.CalledOnValidThread());
310 display_manager_->GpuConfiguredDisplay(display_id, success);
311 }
312
313 void MusThreadProxy::GpuTakeDisplayControlCallback(bool success) const {
314 DCHECK(on_window_server_thread_.CalledOnValidThread());
315 display_manager_->GpuTookDisplayControl(success);
316 }
317
318 void MusThreadProxy::GpuRelinquishDisplayControlCallback(bool success) const {
319 DCHECK(on_window_server_thread_.CalledOnValidThread());
320 display_manager_->GpuRelinquishedDisplayControl(success);
321 }
322
323 void MusThreadProxy::GpuGetHDCPStateCallback(int64_t display_id,
324 bool success,
325 HDCPState state) const {
326 DCHECK(on_window_server_thread_.CalledOnValidThread());
327 display_manager_->GpuReceivedHDCPState(display_id, success, state);
328 }
329
330 void MusThreadProxy::GpuSetHDCPStateCallback(int64_t display_id,
331 bool success) const {
332 DCHECK(on_window_server_thread_.CalledOnValidThread());
333 display_manager_->GpuUpdatedHDCPState(display_id, success);
334 }
335
336 } // namespace ui
OLDNEW
« no previous file with comments | « ui/ozone/platform/drm/mus_thread_proxy.h ('k') | ui/ozone/platform/drm/ozone_platform_gbm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698