From: Roman Stratiienko Date: Fri, 17 Dec 2021 13:09:28 +0000 (+0200) Subject: drm_hwcomposer: Modify source_layers_ to be integer instead of array X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5d1f5572dde8f55297dc1f9a5d0a0e5438c2c4ed;p=android-x86%2Fexternal-drm_hwcomposer.git drm_hwcomposer: Modify source_layers_ to be integer instead of array It isn't used as an array. Simplify the logic. Signed-off-by: Roman Stratiienko Tested-by: Martin Juecker Reviewed-by: Matvii Zorin --- diff --git a/compositor/DrmDisplayComposition.cpp b/compositor/DrmDisplayComposition.cpp index 96e95ad..a1c0e69 100644 --- a/compositor/DrmDisplayComposition.cpp +++ b/compositor/DrmDisplayComposition.cpp @@ -73,9 +73,6 @@ int DrmDisplayComposition::Plan(std::vector *primary_planes, if (!i.plane()) continue; - // make sure that source layers are ordered based on zorder - std::sort(i.source_layers().begin(), i.source_layers().end()); - std::vector *container = nullptr; if (i.plane()->type() == DRM_PLANE_TYPE_PRIMARY) container = primary_planes; diff --git a/compositor/DrmDisplayComposition.h b/compositor/DrmDisplayComposition.h index 2ddfaac..cbc0a90 100644 --- a/compositor/DrmDisplayComposition.h +++ b/compositor/DrmDisplayComposition.h @@ -32,35 +32,28 @@ namespace android { class Importer; class Planner; +constexpr size_t kUndefinedSourceLayer = UINT16_MAX; + class DrmCompositionPlane { public: DrmCompositionPlane() = default; DrmCompositionPlane(DrmCompositionPlane &&rhs) = default; DrmCompositionPlane &operator=(DrmCompositionPlane &&other) = default; - DrmCompositionPlane(DrmPlane *plane) : plane_(plane) { - } DrmCompositionPlane(DrmPlane *plane, size_t source_layer) - : plane_(plane), source_layers_(1, source_layer) { + : plane_(plane), source_layer_(source_layer) { } DrmPlane *plane() const { return plane_; } - void set_plane(DrmPlane *plane) { - plane_ = plane; - } - - std::vector &source_layers() { - return source_layers_; - } - const std::vector &source_layers() const { - return source_layers_; + size_t source_layer() const { + return source_layer_; } private: DrmPlane *plane_ = NULL; - std::vector source_layers_; + size_t source_layer_ = kUndefinedSourceLayer; }; class DrmDisplayComposition { diff --git a/compositor/DrmDisplayCompositor.cpp b/compositor/DrmDisplayCompositor.cpp index 660052a..6b8a92b 100644 --- a/compositor/DrmDisplayCompositor.cpp +++ b/compositor/DrmDisplayCompositor.cpp @@ -152,20 +152,14 @@ auto DrmDisplayCompositor::CommitFrame(AtomicCommitArgs &args) -> int { for (DrmCompositionPlane &comp_plane : comp_planes) { DrmPlane *plane = comp_plane.plane(); - std::vector &source_layers = comp_plane.source_layers(); + size_t source_layer = comp_plane.source_layer(); - if (source_layers.size() > 1) { - ALOGE("Can't handle more than one source layer sz=%zu", - source_layers.size()); - continue; - } - - if (source_layers.empty() || source_layers.front() >= layers.size()) { - ALOGE("Source layer index %zu out of bounds %zu", source_layers.front(), + if (source_layer >= layers.size()) { + ALOGE("Source layer index %zu out of bounds %zu", source_layer, layers.size()); return -EINVAL; } - DrmHwcLayer &layer = layers[source_layers.front()]; + DrmHwcLayer &layer = layers[source_layer]; new_frame_state.used_framebuffers.emplace_back(layer.FbIdHandle); new_frame_state.used_planes.emplace_back(plane); @@ -174,8 +168,7 @@ auto DrmDisplayCompositor::CommitFrame(AtomicCommitArgs &args) -> int { auto &v = unused_planes; v.erase(std::remove(v.begin(), v.end(), plane), v.end()); - if (plane->AtomicSetState(*pset, layer, source_layers.front(), - crtc->id()) != 0) { + if (plane->AtomicSetState(*pset, layer, source_layer, crtc->id()) != 0) { return -EINVAL; } }