summaryrefslogtreecommitdiff
path: root/hwc3/impl/ResourceManager.cpp
diff options
context:
space:
mode:
authorLong Ling <longling@google.com>2021-10-01 14:25:49 -0700
committerLong Ling <longling@google.com>2021-11-10 09:56:46 -0800
commit7b05ff5a12b053069bd9f1c07e3ad0ca9b463ec1 (patch)
tree49329c7e8dca4c05ab5b025db08528d9900bd07a /hwc3/impl/ResourceManager.cpp
parent4af8d97f8d51a73eb5dad71ba4fad4e0ad412cee (diff)
hwc: migrate to composer3
Bug: 201321174 Change-Id: I31834ad240c89f25427958f887a3c5015e9cb535
Diffstat (limited to 'hwc3/impl/ResourceManager.cpp')
-rw-r--r--hwc3/impl/ResourceManager.cpp251
1 files changed, 251 insertions, 0 deletions
diff --git a/hwc3/impl/ResourceManager.cpp b/hwc3/impl/ResourceManager.cpp
new file mode 100644
index 0000000..bb9cb92
--- /dev/null
+++ b/hwc3/impl/ResourceManager.cpp
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+#include <aidlcommonsupport/NativeHandle.h>
+
+#include "ResourceManager.h"
+#include "TranslateHwcAidl.h"
+
+using android::hardware::graphics::composer::V2_1::Display;
+using android::hardware::graphics::composer::V2_1::Error;
+using android::hardware::graphics::composer::V2_1::Layer;
+
+namespace aidl::android::hardware::graphics::composer3::impl {
+
+std::unique_ptr<IResourceManager> IResourceManager::create() {
+ return std::make_unique<ResourceManager>();
+}
+
+std::unique_ptr<IBufferReleaser> ResourceManager::createReleaser(bool isBuffer) {
+ return std::make_unique<BufferReleaser>(isBuffer);
+}
+
+void ResourceManager::clear(RemoveDisplay removeDisplay) {
+ mResources->clear([removeDisplay](Display hwcDisplay, bool isVirtual,
+ const std::vector<Layer> hwcLayers) {
+ int64_t display;
+ std::vector<int64_t> layers;
+ h2a::translate(hwcDisplay, display);
+ h2a::translate(hwcLayers, layers);
+
+ removeDisplay(display, isVirtual, layers);
+ });
+}
+
+bool ResourceManager::hasDisplay(int64_t display) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ return mResources->hasDisplay(hwcDisplay);
+}
+
+int32_t ResourceManager::addPhysicalDisplay(int64_t display) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Error hwcErr = mResources->addPhysicalDisplay(hwcDisplay);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+
+int32_t ResourceManager::addVirtualDisplay(int64_t display, uint32_t outputBufferCacheSize) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Error hwcErr = mResources->addVirtualDisplay(hwcDisplay, outputBufferCacheSize);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::removeDisplay(int64_t display) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Error hwcErr = mResources->removeDisplay(hwcDisplay);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::setDisplayClientTargetCacheSize(int64_t display,
+ uint32_t clientTargetCacheSize) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Error hwcErr = mResources->setDisplayClientTargetCacheSize(hwcDisplay, clientTargetCacheSize);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::getDisplayClientTargetCacheSize(int64_t display, size_t* outCacheSize) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Error hwcErr = mResources->getDisplayClientTargetCacheSize(hwcDisplay, outCacheSize);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::getDisplayOutputBufferCacheSize(int64_t display, size_t* outCacheSize) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Error hwcErr = mResources->getDisplayOutputBufferCacheSize(hwcDisplay, outCacheSize);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::addLayer(int64_t display, int64_t layer, uint32_t bufferCacheSize) {
+ Display hwcDisplay;
+ Layer hwcLayer;
+
+ a2h::translate(display, hwcDisplay);
+ a2h::translate(layer, hwcLayer);
+
+ Error hwcErr = mResources->addLayer(hwcDisplay, hwcLayer, bufferCacheSize);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::removeLayer(int64_t display, int64_t layer) {
+ Display hwcDisplay;
+ Layer hwcLayer;
+
+ a2h::translate(display, hwcDisplay);
+ a2h::translate(layer, hwcLayer);
+ Error hwcErr = mResources->removeLayer(hwcDisplay, hwcLayer);
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+void ResourceManager::setDisplayMustValidateState(int64_t display, bool mustValidate) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ mResources->setDisplayMustValidateState(hwcDisplay, mustValidate);
+}
+
+bool ResourceManager::mustValidateDisplay(int64_t display) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ return mResources->mustValidateDisplay(hwcDisplay);
+}
+
+int32_t ResourceManager::getDisplayReadbackBuffer(int64_t display, const buffer_handle_t handle,
+ buffer_handle_t& outHandle,
+ IBufferReleaser* bufReleaser) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ // dynamic_cast is not available
+ auto br = static_cast<BufferReleaser*>(bufReleaser);
+ Error hwcErr = mResources->getDisplayReadbackBuffer(hwcDisplay, handle, &outHandle,
+ br->getReplacedHandle());
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::getDisplayClientTarget(int64_t display, uint32_t slot, bool fromCache,
+ const buffer_handle_t handle,
+ buffer_handle_t& outHandle,
+ IBufferReleaser* bufReleaser) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ auto br = static_cast<BufferReleaser*>(bufReleaser);
+ Error hwcErr = mResources->getDisplayClientTarget(hwcDisplay, slot, fromCache, handle,
+ &outHandle, br->getReplacedHandle());
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::getDisplayOutputBuffer(int64_t display, uint32_t slot, bool fromCache,
+ const buffer_handle_t handle,
+ buffer_handle_t& outHandle,
+ IBufferReleaser* bufReleaser) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ auto br = static_cast<BufferReleaser*>(bufReleaser);
+ Error hwcErr = mResources->getDisplayOutputBuffer(hwcDisplay, slot, fromCache, handle,
+ &outHandle, br->getReplacedHandle());
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::getLayerBuffer(int64_t display, int64_t layer, uint32_t slot,
+ bool fromCache, const buffer_handle_t rawHandle,
+ buffer_handle_t& outBufferHandle,
+ IBufferReleaser* bufReleaser) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Layer hwcLayer;
+ a2h::translate(layer, hwcLayer);
+
+ auto br = static_cast<BufferReleaser*>(bufReleaser);
+ Error hwcErr = mResources->getLayerBuffer(hwcDisplay, hwcLayer, slot, fromCache,
+ rawHandle, &outBufferHandle,
+ br->getReplacedHandle());
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+int32_t ResourceManager::getLayerSidebandStream(int64_t display, int64_t layer,
+ const buffer_handle_t rawHandle,
+ buffer_handle_t& outStreamHandle,
+ IBufferReleaser* bufReleaser) {
+ Display hwcDisplay;
+ a2h::translate(display, hwcDisplay);
+
+ Layer hwcLayer;
+ a2h::translate(layer, hwcLayer);
+
+ auto br = static_cast<BufferReleaser*>(bufReleaser);
+ Error hwcErr = mResources->getLayerSidebandStream(hwcDisplay, hwcLayer, rawHandle,
+ &outStreamHandle, br->getReplacedHandle());
+
+ int32_t err;
+ h2a::translate(hwcErr, err);
+ return err;
+}
+
+} // namespace aidl::android::hardware::graphics::composer3::impl