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

Unified 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, 9 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
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
new file mode 100644
index 0000000000000000000000000000000000000000..0e6529e5a4fdd222469dabf6e3d3376ed57e653a
--- /dev/null
+++ b/ui/ozone/platform/drm/mus_thread_proxy.cc
@@ -0,0 +1,336 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/ozone/platform/drm/mus_thread_proxy.h"
+
+#include "base/bind.h"
+#include "base/single_thread_task_runner.h"
+#include "base/task_runner.h"
+#include "base/thread_task_runner_handle.h"
+#include "ui/ozone/platform/drm/gpu/drm_thread.h"
+#include "ui/ozone/platform/drm/gpu/proxy_helpers.h"
+#include "ui/ozone/platform/drm/host/drm_display_host_manager.h"
+#include "ui/ozone/platform/drm/host/drm_overlay_manager.h"
+
+namespace ui {
+
+MusThreadProxy::MusThreadProxy()
+ : ws_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ drm_thread_(nullptr),
+ weak_ptr_factory_(this) {}
+
+MusThreadProxy::~MusThreadProxy() {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ FOR_EACH_OBSERVER(GpuThreadObserver, gpu_thread_observers_,
+ OnGpuThreadRetired());
+}
+
+// This is configured on the GPU thread.
+void MusThreadProxy::SetDrmThread(DrmThread* thread) {
+ base::AutoLock acquire(lock_);
+ drm_thread_ = thread;
+}
+
+void MusThreadProxy::ProvideManagers(DrmDisplayHostManager* display_manager,
+ DrmOverlayManager* overlay_manager) {
+ display_manager_ = display_manager;
+ overlay_manager_ = overlay_manager;
+}
+
+void MusThreadProxy::StartDrmThread() {
+ DCHECK(drm_thread_);
+ drm_thread_->Start();
+
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&MusThreadProxy::DispatchObserversFromDrmThread,
+ base::Unretained(this)));
+}
+
+void MusThreadProxy::DispatchObserversFromDrmThread() {
+ ws_task_runner_->PostTask(FROM_HERE, base::Bind(&MusThreadProxy::RunObservers,
+ base::Unretained(this)));
+}
+
+void MusThreadProxy::RunObservers() {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ FOR_EACH_OBSERVER(GpuThreadObserver, gpu_thread_observers_,
+ OnGpuThreadReady());
+}
+
+void MusThreadProxy::AddGpuThreadObserver(GpuThreadObserver* observer) {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+
+ gpu_thread_observers_.AddObserver(observer);
+ if (IsConnected())
+ observer->OnGpuThreadReady();
+}
+
+void MusThreadProxy::RemoveGpuThreadObserver(GpuThreadObserver* observer) {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ gpu_thread_observers_.RemoveObserver(observer);
+}
+
+bool MusThreadProxy::IsConnected() {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ base::AutoLock acquire(lock_);
+ if (drm_thread_)
+ return drm_thread_->IsRunning();
+ return false;
+}
+
+// Services needed for DrmDisplayHostMananger.
+void MusThreadProxy::RegisterHandlerForDrmDisplayHostManager(
+ DrmDisplayHostManager* handler) {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_ = handler;
+}
+
+void MusThreadProxy::UnRegisterHandlerForDrmDisplayHostManager() {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_ = nullptr;
+}
+
+bool MusThreadProxy::GpuCreateWindow(gfx::AcceleratedWidget widget) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::CreateWindow,
+ base::Unretained(drm_thread_), widget));
+ return true;
+}
+
+bool MusThreadProxy::GpuDestroyWindow(gfx::AcceleratedWidget widget) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::DestroyWindow,
+ base::Unretained(drm_thread_), widget));
+ return true;
+}
+
+bool MusThreadProxy::GpuWindowBoundsChanged(gfx::AcceleratedWidget widget,
+ const gfx::Rect& bounds) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::SetWindowBounds,
+ base::Unretained(drm_thread_), widget, bounds));
+ return true;
+}
+
+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());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DrmThread::SetCursor, base::Unretained(drm_thread_), widget,
+ bitmaps, location, frame_delay_ms));
+}
+
+void MusThreadProxy::Move(gfx::AcceleratedWidget widget,
+ const gfx::Point& location) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::MoveCursor,
+ base::Unretained(drm_thread_), widget, location));
+}
+
+// Services needed for DrmOverlayManager.
+void MusThreadProxy::RegisterHandlerForDrmOverlayManager(
+ DrmOverlayManager* handler) {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ overlay_manager_ = handler;
+}
+
+void MusThreadProxy::UnRegisterHandlerForDrmOverlayManager() {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ overlay_manager_ = nullptr;
+}
+
+bool MusThreadProxy::GpuCheckOverlayCapabilities(
+ gfx::AcceleratedWidget widget,
+ const std::vector<OverlayCheck_Params>& overlays) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ auto callback =
+ base::Bind(&MusThreadProxy::GpuCheckOverlayCapabilitiesCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::CheckOverlayCapabilities,
+ base::Unretained(drm_thread_), widget, overlays,
+ CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuRefreshNativeDisplays() {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ auto callback = base::Bind(&MusThreadProxy::GpuRefreshNativeDisplaysCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DrmThread::RefreshNativeDisplays,
+ base::Unretained(drm_thread_), CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuConfigureNativeDisplay(int64_t id,
+ const DisplayMode_Params& mode,
+ const gfx::Point& origin) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+
+ auto callback = base::Bind(&MusThreadProxy::GpuConfigureNativeDisplayCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::ConfigureNativeDisplay,
+ base::Unretained(drm_thread_), id, mode, origin,
+ CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuDisableNativeDisplay(int64_t id) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ auto callback = base::Bind(&MusThreadProxy::GpuDisableNativeDisplayCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::DisableNativeDisplay,
+ base::Unretained(drm_thread_), id,
+ CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuTakeDisplayControl() {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ auto callback = base::Bind(&MusThreadProxy::GpuTakeDisplayControlCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DrmThread::TakeDisplayControl, base::Unretained(drm_thread_),
+ CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuRelinquishDisplayControl() {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ auto callback =
+ base::Bind(&MusThreadProxy::GpuRelinquishDisplayControlCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DrmThread::RelinquishDisplayControl,
+ base::Unretained(drm_thread_), CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuAddGraphicsDevice(const base::FilePath& path,
+ const base::FileDescriptor& fd) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::AddGraphicsDevice,
+ base::Unretained(drm_thread_), path, fd));
+ return true;
+}
+
+bool MusThreadProxy::GpuRemoveGraphicsDevice(const base::FilePath& path) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::RemoveGraphicsDevice,
+ base::Unretained(drm_thread_), path));
+ return true;
+}
+
+bool MusThreadProxy::GpuGetHDCPState(int64_t display_id) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ auto callback = base::Bind(&MusThreadProxy::GpuGetHDCPStateCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DrmThread::GetHDCPState, base::Unretained(drm_thread_),
+ display_id, CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuSetHDCPState(int64_t display_id, HDCPState state) {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ DCHECK(drm_thread_->IsRunning());
+ auto callback = base::Bind(&MusThreadProxy::GpuSetHDCPStateCallback,
+ weak_ptr_factory_.GetWeakPtr());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DrmThread::SetHDCPState, base::Unretained(drm_thread_),
+ display_id, state, CreateSafeCallback(callback)));
+ return true;
+}
+
+bool MusThreadProxy::GpuSetGammaRamp(
+ int64_t id,
+ const std::vector<GammaRampRGBEntry>& lut) {
+ DCHECK(drm_thread_->IsRunning());
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&DrmThread::SetGammaRamp,
+ base::Unretained(drm_thread_), id, lut));
+ return true;
+}
+
+void MusThreadProxy::GpuCheckOverlayCapabilitiesCallback(
+ gfx::AcceleratedWidget widget,
+ const std::vector<OverlayCheck_Params>& overlays) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ overlay_manager_->GpuSentOverlayResult(widget, overlays);
+}
+
+void MusThreadProxy::GpuConfigureNativeDisplayCallback(int64_t display_id,
+ bool success) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_->GpuConfiguredDisplay(display_id, success);
+}
+
+void MusThreadProxy::GpuRefreshNativeDisplaysCallback(
+ const std::vector<DisplaySnapshot_Params>& displays) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_->GpuHasUpdatedNativeDisplays(displays);
+}
+
+void MusThreadProxy::GpuDisableNativeDisplayCallback(int64_t display_id,
+ bool success) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_->GpuConfiguredDisplay(display_id, success);
+}
+
+void MusThreadProxy::GpuTakeDisplayControlCallback(bool success) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_->GpuTookDisplayControl(success);
+}
+
+void MusThreadProxy::GpuRelinquishDisplayControlCallback(bool success) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_->GpuRelinquishedDisplayControl(success);
+}
+
+void MusThreadProxy::GpuGetHDCPStateCallback(int64_t display_id,
+ bool success,
+ HDCPState state) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_->GpuReceivedHDCPState(display_id, success, state);
+}
+
+void MusThreadProxy::GpuSetHDCPStateCallback(int64_t display_id,
+ bool success) const {
+ DCHECK(on_window_server_thread_.CalledOnValidThread());
+ display_manager_->GpuUpdatedHDCPState(display_id, success);
+}
+
+} // namespace ui
« 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