OSDN Git Service

drm_hwcomposer: Modify source_layers_ to be integer instead of array
authorRoman Stratiienko <roman.o.stratiienko@globallogic.com>
Fri, 17 Dec 2021 13:09:28 +0000 (15:09 +0200)
committerRoman Stratiienko <roman.o.stratiienko@globallogic.com>
Wed, 29 Dec 2021 16:06:09 +0000 (18:06 +0200)
It isn't used as an array. Simplify the logic.

Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
Tested-by: Martin Juecker <martin.juecker@gmail.com>
Reviewed-by: Matvii Zorin <matvii.zorin@globallogic.com>
compositor/DrmDisplayComposition.cpp
compositor/DrmDisplayComposition.h
compositor/DrmDisplayCompositor.cpp

index 96e95ad..a1c0e69 100644 (file)
@@ -73,9 +73,6 @@ int DrmDisplayComposition::Plan(std::vector<DrmPlane *> *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<DrmPlane *> *container = nullptr;
     if (i.plane()->type() == DRM_PLANE_TYPE_PRIMARY)
       container = primary_planes;
index 2ddfaac..cbc0a90 100644 (file)
@@ -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<size_t> &source_layers() {
-    return source_layers_;
-  }
 
-  const std::vector<size_t> &source_layers() const {
-    return source_layers_;
+  size_t source_layer() const {
+    return source_layer_;
   }
 
  private:
   DrmPlane *plane_ = NULL;
-  std::vector<size_t> source_layers_;
+  size_t source_layer_ = kUndefinedSourceLayer;
 };
 
 class DrmDisplayComposition {
index 660052a..6b8a92b 100644 (file)
@@ -152,20 +152,14 @@ auto DrmDisplayCompositor::CommitFrame(AtomicCommitArgs &args) -> int {
 
     for (DrmCompositionPlane &comp_plane : comp_planes) {
       DrmPlane *plane = comp_plane.plane();
-      std::vector<size_t> &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;
       }
     }