test-hwc2: validate display

Test: Add "#define HAVE_NO_SURFACE_FLINGER" to
          frameworks/native/libs/gui/BufferQueueCore.cpp.
      Recompile and flash.
      Run "mm" in frameworks/native/services/surfaceflinger/tests/hwc2.
      Push test-hwc2 to device.
      Run "adb root && adb shell stop".
      Run test case. Ex: "./test-hwc2"

Change-Id: I9a9df2902213d99d4f043e3bdea1e5e2fc77b01d
diff --git a/services/surfaceflinger/tests/hwc2/Hwc2TestProperties.cpp b/services/surfaceflinger/tests/hwc2/Hwc2TestProperties.cpp
index a79909a..e00c560 100644
--- a/services/surfaceflinger/tests/hwc2/Hwc2TestProperties.cpp
+++ b/services/surfaceflinger/tests/hwc2/Hwc2TestProperties.cpp
@@ -29,7 +29,7 @@
 
 Hwc2TestBufferArea::Hwc2TestBufferArea(Hwc2TestCoverage coverage,
         const Area& displayArea)
-    : Hwc2TestProperty(mBufferAreas),
+    : Hwc2TestProperty(mBufferAreas, mCompositionSupport),
       mScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteScalars:
             (coverage == Hwc2TestCoverage::Basic)? mBasicScalars:
             mDefaultScalars),
@@ -115,7 +115,7 @@
 
 Hwc2TestBlendMode::Hwc2TestBlendMode(Hwc2TestCoverage coverage)
     : Hwc2TestProperty(coverage, mCompleteBlendModes, mBasicBlendModes,
-            mDefaultBlendModes) { }
+            mDefaultBlendModes, mCompositionSupport) { }
 
 std::string Hwc2TestBlendMode::dump() const
 {
@@ -154,7 +154,7 @@
 
 Hwc2TestColor::Hwc2TestColor(Hwc2TestCoverage coverage,
         hwc2_blend_mode_t blendMode)
-    : Hwc2TestProperty(mColors),
+    : Hwc2TestProperty(mColors, mCompositionSupport),
       mBaseColors((coverage == Hwc2TestCoverage::Complete)? mCompleteBaseColors:
             (coverage == Hwc2TestCoverage::Basic)? mBasicBaseColors:
             mDefaultBaseColors),
@@ -228,7 +228,7 @@
 
 Hwc2TestComposition::Hwc2TestComposition(Hwc2TestCoverage coverage)
     : Hwc2TestProperty(coverage, mCompleteCompositions, mBasicCompositions,
-            mDefaultCompositions) { }
+            mDefaultCompositions, mCompositionSupport) { }
 
 std::string Hwc2TestComposition::dump() const
 {
@@ -257,7 +257,7 @@
 
 Hwc2TestDataspace::Hwc2TestDataspace(Hwc2TestCoverage coverage)
     : Hwc2TestProperty(coverage, completeDataspaces, basicDataspaces,
-            defaultDataspaces) { }
+            defaultDataspaces, mCompositionSupport) { }
 
 std::string Hwc2TestDataspace::dump() const
 {
@@ -323,7 +323,7 @@
 
 Hwc2TestDisplayFrame::Hwc2TestDisplayFrame(Hwc2TestCoverage coverage,
         const Area& displayArea)
-    : Hwc2TestProperty(mDisplayFrames),
+    : Hwc2TestProperty(mDisplayFrames, mCompositionSupport),
       mFrectScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteFrectScalars:
             (coverage == Hwc2TestCoverage::Basic)? mBasicFrectScalars:
             mDefaultFrectScalars),
@@ -383,7 +383,7 @@
 
 Hwc2TestPlaneAlpha::Hwc2TestPlaneAlpha(Hwc2TestCoverage coverage)
     : Hwc2TestProperty(coverage, mCompletePlaneAlphas, mBasicPlaneAlphas,
-            mDefaultPlaneAlphas) { }
+            mDefaultPlaneAlphas, mCompositionSupport) { }
 
 std::string Hwc2TestPlaneAlpha::dump() const
 {
@@ -407,7 +407,7 @@
 
 Hwc2TestSourceCrop::Hwc2TestSourceCrop(Hwc2TestCoverage coverage,
         const Area& bufferArea)
-    : Hwc2TestProperty(mSourceCrops),
+    : Hwc2TestProperty(mSourceCrops, mCompositionSupport),
       mFrectScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteFrectScalars:
             (coverage == Hwc2TestCoverage::Basic)? mBasicFrectScalars:
             mDefaultFrectScalars),
@@ -470,7 +470,7 @@
 
 
 Hwc2TestSurfaceDamage::Hwc2TestSurfaceDamage(Hwc2TestCoverage coverage)
-    : Hwc2TestProperty(mSurfaceDamages),
+    : Hwc2TestProperty(mSurfaceDamages, mCompositionSupport),
       mRegionScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteRegionScalars:
             (coverage == Hwc2TestCoverage::Basic)? mBasicRegionScalars:
             mDefaultRegionScalars)
@@ -568,7 +568,7 @@
 
 Hwc2TestTransform::Hwc2TestTransform(Hwc2TestCoverage coverage)
     : Hwc2TestProperty(coverage, mCompleteTransforms, mBasicTransforms,
-            mDefaultTransforms) { }
+            mDefaultTransforms, mCompositionSupport) { }
 
 std::string Hwc2TestTransform::dump() const
 {
@@ -654,3 +654,67 @@
     mVisibleRegion.rects = nullptr;
     mVisibleRegion.numRects = 0;
 }
+
+/* Identifies which layer properties are supported by each composition type.
+ * hwc2_composition_t values range from:
+ *  HWC2_COMPOSITION_INVALID = 0,
+ *  HWC2_COMPOSITION_CLIENT = 1,
+ *  HWC2_COMPOSITION_DEVICE = 2,
+ *  HWC2_COMPOSITION_SOLID_COLOR = 3,
+ *  HWC2_COMPOSITION_CURSOR = 4,
+ *  HWC2_COMPOSITION_SIDEBAND = 5,
+ *
+ * Each property array can be indexed by a hwc2_composition_t value.
+ * By using an array instead of a more complex data structure, runtimes for
+ * some test cases showed a noticeable improvement.
+ */
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestBufferArea::mCompositionSupport = {{
+    false,   true,    true,    false,   true,    true,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestBlendMode::mCompositionSupport = {{
+    false,   true,    true,    false,   true,    true,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestColor::mCompositionSupport = {{
+    false,   false,   false,   true,    false,   false,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestComposition::mCompositionSupport = {{
+    false,   true,    true,    true,    true,    true,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestDataspace::mCompositionSupport = {{
+    false,   true,    true,    true,    true,    false,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestDisplayFrame::mCompositionSupport = {{
+    false,   true,    true,    true,    false,   true,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestPlaneAlpha::mCompositionSupport = {{
+    false,   true,    true,    true,    true,    true,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestSourceCrop::mCompositionSupport = {{
+    false,   true,    true,    false,   true,    false,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestSurfaceDamage::mCompositionSupport = {{
+    false,   false,   true,    false,   true,    false,
+}};
+
+/*  INVALID  CLIENT   DEVICE   COLOR    CURSOR   SIDEBAND */
+const std::array<bool, 6> Hwc2TestTransform::mCompositionSupport = {{
+    false,   true,    true,    false,   true,    true,
+}};