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

Unified Diff: ui/ozone/platform/drm/gpu/drm_gpu_platform_support_proxy.cc

Issue 1311043016: Switch DRM platform to using a separate thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mv-drm-calls-on-thread2
Patch Set: . Created 5 years, 3 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/gpu/drm_gpu_platform_support_proxy.cc
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_platform_support_proxy.cc b/ui/ozone/platform/drm/gpu/drm_gpu_platform_support_proxy.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cfc5f5199f3e6813919ed82ada202862020214d9
--- /dev/null
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_platform_support_proxy.cc
@@ -0,0 +1,124 @@
+// Copyright 2015 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/gpu/drm_gpu_platform_support_proxy.h"
+
+#include "base/thread_task_runner_handle.h"
+#include "ipc/ipc_message.h"
+#include "ipc/message_filter.h"
+#include "ui/ozone/common/gpu/ozone_gpu_messages.h"
+#include "ui/ozone/platform/drm/gpu/drm_gpu_platform_support.h"
+#include "ui/ozone/platform/drm/gpu/drm_thread.h"
+#include "ui/ozone/platform/drm/gpu/proxy_helpers.h"
+
+namespace ui {
+
+namespace {
+
+class MessageFilterProxy : public IPC::MessageFilter {
+ public:
+ MessageFilterProxy(DrmThread* drm_thread);
+
+ // IPC::MessageFilter:
+ void OnFilterAdded(IPC::Sender* sender) override;
+ bool OnMessageReceived(const IPC::Message& message) override;
+
+ private:
+ ~MessageFilterProxy() override;
+
+ void Send(IPC::Message* message);
+
+ static void SendMessage(base::WeakPtr<MessageFilterProxy> proxy,
+ IPC::Message* message);
+
+ DrmThread* drm_thread_;
+
+ base::WeakPtr<DrmGpuPlatformSupport> impl_;
+
+ IPC::Sender* sender_ = nullptr;
+
+ base::WeakPtrFactory<MessageFilterProxy> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(MessageFilterProxy);
+};
+
+MessageFilterProxy::MessageFilterProxy(DrmThread* drm_thread)
+ : drm_thread_(drm_thread), weak_ptr_factory_(this) {}
+
+MessageFilterProxy::~MessageFilterProxy() {}
+
+void MessageFilterProxy::OnFilterAdded(IPC::Sender* sender) {
+ sender_ = sender;
+
+ // The DRM thread needs to be started late since we need to wait for the
+ // sandbox to start.
+ drm_thread_->Start();
+ impl_ = drm_thread_->GetGpuPlatformSupport();
+
+ DrmGpuPlatformSupport::IPCSender callback = CreateSafeCallback(base::Bind(
+ &MessageFilterProxy::SendMessage, weak_ptr_factory_.GetWeakPtr()));
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DrmGpuPlatformSupport::RegisterSender, impl_, callback));
+}
+
+bool MessageFilterProxy::OnMessageReceived(const IPC::Message& message) {
spang 2015/09/18 00:46:25 I would strongly prefer to just unpickle the messa
dnicoara 2015/09/18 17:43:08 Why unpickle here? I don't see the benefit. It is
spang 2015/09/18 20:49:55 You've already lost on the boilerplate code by hav
dnicoara 2015/09/29 17:57:05 Done. I've stopped somewhere in between what we've
+ switch (message.type()) {
+ case OzoneGpuMsg_CreateWindow::ID:
+ case OzoneGpuMsg_DestroyWindow::ID:
+ case OzoneGpuMsg_WindowBoundsChanged::ID:
+ case OzoneGpuMsg_CursorSet::ID:
+ case OzoneGpuMsg_CursorMove::ID:
+ case OzoneGpuMsg_RefreshNativeDisplays::ID:
+ case OzoneGpuMsg_ConfigureNativeDisplay::ID:
+ case OzoneGpuMsg_DisableNativeDisplay::ID:
+ case OzoneGpuMsg_TakeDisplayControl::ID:
+ case OzoneGpuMsg_RelinquishDisplayControl::ID:
+ case OzoneGpuMsg_AddGraphicsDevice::ID:
+ case OzoneGpuMsg_RemoveGraphicsDevice::ID:
+ case OzoneGpuMsg_GetHDCPState::ID:
+ case OzoneGpuMsg_SetHDCPState::ID:
+ case OzoneGpuMsg_SetGammaRamp::ID:
+ case OzoneGpuMsg_CheckOverlayCapabilities::ID:
+ drm_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(base::IgnoreResult(
+ &DrmGpuPlatformSupport::OnMessageReceived),
+ impl_, message));
+ return true;
+ default:
+ return false;
+ }
+}
+
+void MessageFilterProxy::Send(IPC::Message* message) {
+ sender_->Send(message);
+}
+
+void MessageFilterProxy::SendMessage(base::WeakPtr<MessageFilterProxy> proxy,
+ IPC::Message* message) {
+ if (proxy)
+ proxy->Send(message);
+ else
+ delete message;
+}
+
+} // namespace
+
+DrmGpuPlatformSupportProxy::DrmGpuPlatformSupportProxy(DrmThread* drm_thread)
+ : filter_(new MessageFilterProxy(drm_thread)) {}
+
+DrmGpuPlatformSupportProxy::~DrmGpuPlatformSupportProxy() {}
+
+void DrmGpuPlatformSupportProxy::OnChannelEstablished(IPC::Sender* sender) {}
+
+IPC::MessageFilter* DrmGpuPlatformSupportProxy::GetMessageFilter() {
+ return filter_.get();
+}
+
+bool DrmGpuPlatformSupportProxy::OnMessageReceived(
+ const IPC::Message& message) {
+ return false;
+}
+
+} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698