DO NOT MERGE: drm_hwcomposer: Don\'t use Plan() in SquashAll
am: 8eb85ff7d7

* commit '8eb85ff7d7704a4783cbb97eec480ae2c93d7f3b':
  DO NOT MERGE: drm_hwcomposer: Don't use Plan() in SquashAll

Change-Id: Id0a88d543ed011b95c1a7ae8634e20663dd45611
diff --git a/drmdisplaycomposition.cpp b/drmdisplaycomposition.cpp
index d2b6211..d5450ff 100644
--- a/drmdisplaycomposition.cpp
+++ b/drmdisplaycomposition.cpp
@@ -186,6 +186,11 @@
   return out;
 }
 
+int DrmDisplayComposition::AddPlaneComposition(DrmCompositionPlane plane) {
+  composition_planes_.emplace_back(std::move(plane));
+  return 0;
+}
+
 void DrmDisplayComposition::SeparateLayers(size_t *used_layers,
                                            size_t num_used_layers,
                                            DrmHwcRect<int> *exclude_rects,
@@ -484,6 +489,10 @@
                             overlay_planes);
   }
 
+  return FinalizeComposition();
+}
+
+int DrmDisplayComposition::FinalizeComposition() {
   return CreateAndAssignReleaseFences();
 }
 
diff --git a/drmdisplaycomposition.h b/drmdisplaycomposition.h
index 2b24231..6c52664 100644
--- a/drmdisplaycomposition.h
+++ b/drmdisplaycomposition.h
@@ -109,6 +109,7 @@
            uint64_t frame_no);
 
   int SetLayers(DrmHwcLayer *layers, size_t num_layers, bool geometry_changed);
+  int AddPlaneComposition(DrmCompositionPlane plane);
   int AddPlaneDisable(DrmPlane *plane);
   int SetDpmsMode(uint32_t dpms_mode);
   int SetDisplayMode(const DrmMode &display_mode);
@@ -116,6 +117,8 @@
   int Plan(SquashState *squash, std::vector<DrmPlane *> *primary_planes,
            std::vector<DrmPlane *> *overlay_planes);
 
+  int FinalizeComposition();
+
   int CreateNextTimelineFence();
   int SignalSquashDone() {
     return IncreaseTimelineToPoint(timeline_squash_done_);
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index acd5436..10a1ffc 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -1054,8 +1054,8 @@
     return ret;
   }
 
-  std::vector<DrmPlane *> primary_planes;
-  std::vector<DrmPlane *> fake_overlay_planes;
+  DrmCompositionPlane squashed_comp(DrmCompositionPlane::Type::kPrecomp, NULL,
+                                    src->crtc());
   std::vector<DrmHwcLayer> dst_layers;
   for (DrmCompositionPlane &comp_plane : src_planes) {
     // Composition planes without DRM planes should never happen
@@ -1082,11 +1082,12 @@
       // filling the OutputFds.
       layer.release_fence = OutputFd();
       dst_layers.emplace_back(std::move(layer));
+      squashed_comp.source_layers().push_back(
+          squashed_comp.source_layers().size());
     }
 
-    if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY &&
-        primary_planes.size() == 0)
-      primary_planes.push_back(comp_plane.plane());
+    if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY)
+      squashed_comp.set_plane(comp_plane.plane());
     else
       dst->AddPlaneDisable(comp_plane.plane());
   }
@@ -1097,8 +1098,13 @@
     goto move_layers_back;
   }
 
-  ret =
-      dst->Plan(NULL /* SquashState */, &primary_planes, &fake_overlay_planes);
+  ret = dst->AddPlaneComposition(std::move(squashed_comp));
+  if (ret) {
+    ALOGE("Failed to add squashed plane composition %d", ret);
+    goto move_layers_back;
+  }
+
+  ret = dst->FinalizeComposition();
   if (ret) {
     ALOGE("Failed to plan for squash all composition %d", ret);
     goto move_layers_back;