diff options
author | Sean Paul <seanpaul@chromium.org> | 2015-05-13 06:33:23 -0700 |
---|---|---|
committer | Sean Paul <seanpaul@google.com> | 2015-06-04 16:48:18 +0000 |
commit | b386f1b1b3716c06831d82493e9ba5a156094701 (patch) | |
tree | ed88760cfd807df3bf25e90fbce1029813e788b8 /drmcompositorworker.cpp | |
parent | 117e169cb9b5b3f0d45ad8ab300fb42712bac6c5 (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.cpp | 71 |
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); +} +} |