From 5128715b42e6713b98244bd05f218b8800a39b74 Mon Sep 17 00:00:00 2001 From: Roman Stratiienko Date: Wed, 10 Feb 2021 14:59:52 +0200 Subject: drm_hwcomposer: cleanup hwcutils Remove DrmHwcBuffer class. Wrap remaining logic into DrmHwcLayer class. Signed-off-by: Roman Stratiienko --- .ci/.gitlab-ci-clang-tidy-fine.sh | 1 + compositor/DrmDisplayComposition.cpp | 12 +++----- compositor/DrmDisplayCompositor.cpp | 4 +-- drm/DrmFbImporter.cpp | 1 - drm/DrmPlane.cpp | 2 +- include/drmhwcomposer.h | 55 +++--------------------------------- utils/hwcutils.cpp | 50 ++++---------------------------- 7 files changed, 17 insertions(+), 108 deletions(-) diff --git a/.ci/.gitlab-ci-clang-tidy-fine.sh b/.ci/.gitlab-ci-clang-tidy-fine.sh index 644f621..c23bf0a 100755 --- a/.ci/.gitlab-ci-clang-tidy-fine.sh +++ b/.ci/.gitlab-ci-clang-tidy-fine.sh @@ -3,6 +3,7 @@ . ./.ci/.common.sh TIDY_FILES=( +drm/DrmFbImporter.h utils/log.h utils/properties.h ) diff --git a/compositor/DrmDisplayComposition.cpp b/compositor/DrmDisplayComposition.cpp index 7008e9c..13760ef 100644 --- a/compositor/DrmDisplayComposition.cpp +++ b/compositor/DrmDisplayComposition.cpp @@ -156,14 +156,10 @@ static const char *DPMSModeToString(int dpms_mode) { } } -static void DumpBuffer(const DrmHwcBuffer &buffer, std::ostringstream *out) { - if (!buffer) { - *out << "buffer="; - return; - } - +static void DumpBuffer(const DrmHwcLayer &layer, std::ostringstream *out) { *out << "buffer[w/h/format]="; - *out << buffer->width << "/" << buffer->height << "/" << buffer->format; + *out << layer.buffer_info.width << "/" << layer.buffer_info.height << "/" + << layer.buffer_info.format; } static void DumpTransform(uint32_t transform, std::ostringstream *out) { @@ -249,7 +245,7 @@ void DrmDisplayComposition::Dump(std::ostringstream *out) const { const DrmHwcLayer &layer = layers_[i]; *out << " [" << i << "] "; - DumpBuffer(layer.buffer, out); + DumpBuffer(layer, out); if (layer.protected_usage()) *out << " protected"; diff --git a/compositor/DrmDisplayCompositor.cpp b/compositor/DrmDisplayCompositor.cpp index 586ebe0..4e7fe0d 100644 --- a/compositor/DrmDisplayCompositor.cpp +++ b/compositor/DrmDisplayCompositor.cpp @@ -286,11 +286,11 @@ int DrmDisplayCompositor::CommitFrame(DrmDisplayComposition *display_comp, break; } DrmHwcLayer &layer = layers[source_layers.front()]; - if (!layer.buffer) { + if (!layer.FbIdHandle) { ALOGE("Expected a valid framebuffer for pset"); break; } - fb_id = layer.buffer.FbIdHandle->GetFbId(); + fb_id = layer.FbIdHandle->GetFbId(); fence_fd = layer.acquire_fence.get(); display_frame = layer.display_frame; source_crop = layer.source_crop; diff --git a/drm/DrmFbImporter.cpp b/drm/DrmFbImporter.cpp index 2b5ddd4..592fc48 100644 --- a/drm/DrmFbImporter.cpp +++ b/drm/DrmFbImporter.cpp @@ -19,7 +19,6 @@ #include "DrmFbImporter.h" -#include #include #include #include diff --git a/drm/DrmPlane.cpp b/drm/DrmPlane.cpp index 5443e7e..6433fb6 100644 --- a/drm/DrmPlane.cpp +++ b/drm/DrmPlane.cpp @@ -231,7 +231,7 @@ bool DrmPlane::IsValidForLayer(DrmHwcLayer *layer) { } } - uint32_t format = layer->buffer->format; + uint32_t format = layer->buffer_info.format; if (!IsFormatSupported(format)) { ALOGV("Plane %d does not supports %c%c%c%c format", id_, format, format >> 8, format >> 16, format >> 24); diff --git a/include/drmhwcomposer.h b/include/drmhwcomposer.h index 2ec1154..6955306 100644 --- a/include/drmhwcomposer.h +++ b/include/drmhwcomposer.h @@ -28,57 +28,9 @@ #include "drm/DrmFbImporter.h" #include "drmhwcgralloc.h" -class DrmFbIdHandle; -struct hwc_import_context; - -int hwc_import_init(struct hwc_import_context **ctx); -int hwc_import_destroy(struct hwc_import_context *ctx); - -int hwc_import_bo_create(int fd, struct hwc_import_context *ctx, - buffer_handle_t buf, struct hwc_drm_bo *bo); -bool hwc_import_bo_release(int fd, struct hwc_import_context *ctx, - struct hwc_drm_bo *bo); - namespace android { -class DrmHwcBuffer { - public: - DrmHwcBuffer() = default; - DrmHwcBuffer(const hwc_drm_bo &bo, DrmDevice *drmDevice) - : bo_(bo), mDrmDevice(drmDevice) { - } - DrmHwcBuffer(DrmHwcBuffer &&rhs) : bo_(rhs.bo_), mDrmDevice(rhs.mDrmDevice) { - rhs.mDrmDevice = nullptr; - FbIdHandle.swap(rhs.FbIdHandle); - } - - ~DrmHwcBuffer() { - } - - DrmHwcBuffer &operator=(DrmHwcBuffer &&rhs) { - FbIdHandle.swap(rhs.FbIdHandle); - mDrmDevice = rhs.mDrmDevice; - rhs.mDrmDevice = nullptr; - bo_ = rhs.bo_; - return *this; - } - - operator bool() const { - return mDrmDevice != NULL; - } - - const hwc_drm_bo *operator->() const; - - void Clear(); - - std::shared_ptr FbIdHandle; - - int ImportBuffer(buffer_handle_t handle, DrmDevice *drmDevice); - - private: - hwc_drm_bo bo_; - DrmDevice *mDrmDevice; -}; +class DrmFbIdHandle; enum DrmHwcTransform { kIdentity = 0, @@ -97,8 +49,10 @@ enum class DrmHwcBlending : int32_t { struct DrmHwcLayer { buffer_handle_t sf_handle = NULL; + hwc_drm_bo_t buffer_info{}; + std::shared_ptr FbIdHandle; + int gralloc_buffer_usage = 0; - DrmHwcBuffer buffer; uint32_t transform; DrmHwcBlending blending = DrmHwcBlending::kNone; uint16_t alpha = 0xffff; @@ -110,7 +64,6 @@ struct DrmHwcLayer { OutputFd release_fence; int ImportBuffer(DrmDevice *drmDevice); - int InitFromDrmHwcLayer(DrmHwcLayer *layer, DrmDevice *drmDevice); void SetTransform(int32_t sf_transform); diff --git a/utils/hwcutils.cpp b/utils/hwcutils.cpp index 593003a..6de6500 100644 --- a/utils/hwcutils.cpp +++ b/utils/hwcutils.cpp @@ -29,65 +29,25 @@ namespace android { -const hwc_drm_bo *DrmHwcBuffer::operator->() const { - if (mDrmDevice == nullptr) { - ALOGE("Access of non-existent BO"); - exit(1); - return nullptr; - } - return &bo_; -} - -void DrmHwcBuffer::Clear() { - FbIdHandle.reset(); - mDrmDevice = nullptr; -} - -int DrmHwcBuffer::ImportBuffer(buffer_handle_t handle, DrmDevice *drmDevice) { - hwc_drm_bo tmp_bo{}; +int DrmHwcLayer::ImportBuffer(DrmDevice *drmDevice) { + buffer_info = hwc_drm_bo_t{}; - int ret = BufferInfoGetter::GetInstance()->ConvertBoInfo(handle, &tmp_bo); + int ret = BufferInfoGetter::GetInstance()->ConvertBoInfo(sf_handle, + &buffer_info); if (ret) { ALOGE("Failed to convert buffer info %d", ret); return ret; } - FbIdHandle = drmDevice->GetDrmFbImporter().GetOrCreateFbId(&tmp_bo); + FbIdHandle = drmDevice->GetDrmFbImporter().GetOrCreateFbId(&buffer_info); if (!FbIdHandle) { ALOGE("Failed to import buffer"); return -EINVAL; } - mDrmDevice = drmDevice; - bo_ = tmp_bo; - return 0; } -int DrmHwcLayer::ImportBuffer(DrmDevice *drmDevice) { - int ret = buffer.ImportBuffer(sf_handle, drmDevice); - if (ret) - return ret; - - const hwc_drm_bo *bo = buffer.operator->(); - - gralloc_buffer_usage = bo->usage; - - return 0; -} - -int DrmHwcLayer::InitFromDrmHwcLayer(DrmHwcLayer *src_layer, - DrmDevice *drmDevice) { - blending = src_layer->blending; - sf_handle = src_layer->sf_handle; - acquire_fence = -1; - display_frame = src_layer->display_frame; - alpha = src_layer->alpha; - source_crop = src_layer->source_crop; - transform = src_layer->transform; - return ImportBuffer(drmDevice); -} - void DrmHwcLayer::SetTransform(int32_t sf_transform) { transform = 0; // 270* and 180* cannot be combined with flips. More specifically, they -- cgit v1.2.3