summaryrefslogtreecommitdiff
path: root/drmcompositorworker.cpp
diff options
context:
space:
mode:
authorSean Paul <seanpaul@chromium.org>2015-05-13 06:33:23 -0700
committerSean Paul <seanpaul@google.com>2015-06-04 16:48:18 +0000
commitb386f1b1b3716c06831d82493e9ba5a156094701 (patch)
treeed88760cfd807df3bf25e90fbce1029813e788b8 /drmcompositorworker.cpp
parent117e169cb9b5b3f0d45ad8ab300fb42712bac6c5 (diff)
drm_hwcomposer: Use hw planes + drm atomic interface
Replace the basic, single overlay, modeset/flip implementation with a new Compositor instantiation for drm. The new compositor uses the drm atomic interface to composite layers to multiple hardware planes. This change also introduces an importer argument in Compositor::CreateComposition. By specifying the importer, Compositor instances are responsible for cleaning up buffer objects submitted via Composition::AddLayer. Change-Id: Ic292829cd93475d754294b00428de132301092b2 Signed-off-by: Sean Paul <seanpaul@chromium.org>
Diffstat (limited to 'drmcompositorworker.cpp')
-rw-r--r--drmcompositorworker.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/drmcompositorworker.cpp b/drmcompositorworker.cpp
new file mode 100644
index 0000000..9406194
--- /dev/null
+++ b/drmcompositorworker.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "hwc-drm-compositor-worker"
+
+#include "drmcompositor.h"
+#include "drmcompositorworker.h"
+#include "worker.h"
+
+#include <stdlib.h>
+
+#include <cutils/log.h>
+#include <hardware/hardware.h>
+
+namespace android {
+
+DrmCompositorWorker::DrmCompositorWorker(DrmCompositor *compositor)
+ : Worker("drm-compositor", HAL_PRIORITY_URGENT_DISPLAY),
+ compositor_(compositor) {
+}
+
+DrmCompositorWorker::~DrmCompositorWorker() {
+}
+
+int DrmCompositorWorker::Init() {
+ return InitWorker();
+}
+
+void DrmCompositorWorker::Routine() {
+ int ret;
+ if (!compositor_->HaveQueuedComposites()) {
+ ret = Lock();
+ if (ret) {
+ ALOGE("Failed to lock worker, %d", ret);
+ return;
+ }
+
+ int wait_ret = WaitForSignalOrExitLocked();
+
+ ret = Unlock();
+ if (ret) {
+ ALOGE("Failed to unlock worker, %d", ret);
+ return;
+ }
+
+ if (wait_ret == -EINTR) {
+ return;
+ } else if (wait_ret) {
+ ALOGE("Failed to wait for signal, %d", wait_ret);
+ return;
+ }
+ }
+
+ ret = compositor_->Composite();
+ if (ret)
+ ALOGE("Failed to composite! %d", ret);
+}
+}