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.h b/services/surfaceflinger/tests/hwc2/Hwc2TestProperties.h
index 9cdf69c..f3c614c 100644
--- a/services/surfaceflinger/tests/hwc2/Hwc2TestProperties.h
+++ b/services/surfaceflinger/tests/hwc2/Hwc2TestProperties.h
@@ -52,6 +52,9 @@
     virtual bool advance() = 0;
 
     virtual std::string dump() const = 0;
+
+    /* Returns true if the container supports the given composition type */
+    virtual bool isSupported(hwc2_composition_t composition) = 0;
 };
 
 
@@ -60,12 +63,16 @@
 public:
     Hwc2TestProperty(Hwc2TestCoverage coverage,
             const std::vector<T>& completeList, const std::vector<T>& basicList,
-            const std::vector<T>& defaultList)
+            const std::vector<T>& defaultList,
+            const std::array<bool, 6>& compositionSupport)
         : Hwc2TestProperty((coverage == Hwc2TestCoverage::Complete)? completeList:
-                (coverage == Hwc2TestCoverage::Basic)? basicList : defaultList) { }
+                (coverage == Hwc2TestCoverage::Basic)? basicList : defaultList,
+                compositionSupport) { }
 
-    Hwc2TestProperty(const std::vector<T>& list)
-        : mList(list) { }
+    Hwc2TestProperty(const std::vector<T>& list,
+            const std::array<bool, 6>& compositionSupport)
+        : mList(list),
+          mCompositionSupport(compositionSupport) { }
 
     void reset() override
     {
@@ -89,14 +96,20 @@
         return mList.at(mListIdx);
     }
 
+    virtual bool isSupported(hwc2_composition_t composition)
+    {
+        return mCompositionSupport.at(composition);
+    }
+
 protected:
     /* If a derived class has dependents, override this function */
     virtual void updateDependents() { }
 
     const std::vector<T>& mList;
     size_t mListIdx = 0;
-};
 
+    const std::array<bool, 6>& mCompositionSupport;
+};
 
 class Hwc2TestBuffer;
 class Hwc2TestSourceCrop;
@@ -128,6 +141,8 @@
     Hwc2TestSurfaceDamage* mSurfaceDamage = nullptr;
 
     std::vector<Area> mBufferAreas;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -149,6 +164,8 @@
     static const std::vector<hwc2_blend_mode_t> mDefaultBlendModes;
     static const std::vector<hwc2_blend_mode_t> mBasicBlendModes;
     static const std::vector<hwc2_blend_mode_t> mCompleteBlendModes;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -172,6 +189,8 @@
     hwc2_blend_mode_t mBlendMode;
 
     std::vector<hwc_color_t> mColors;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -185,6 +204,8 @@
     static const std::vector<hwc2_composition_t> mDefaultCompositions;
     static const std::vector<hwc2_composition_t> mBasicCompositions;
     static const std::vector<hwc2_composition_t> mCompleteCompositions;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -198,6 +219,8 @@
     static const std::vector<android_dataspace_t> defaultDataspaces;
     static const std::vector<android_dataspace_t> basicDataspaces;
     static const std::vector<android_dataspace_t> completeDataspaces;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -218,6 +241,8 @@
     Area mDisplayArea;
 
     std::vector<hwc_rect_t> mDisplayFrames;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -231,6 +256,8 @@
     static const std::vector<float> mDefaultPlaneAlphas;
     static const std::vector<float> mBasicPlaneAlphas;
     static const std::vector<float> mCompletePlaneAlphas;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -253,6 +280,8 @@
     Area mBufferArea;
 
     std::vector<hwc_frect_t> mSourceCrops;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -277,6 +306,8 @@
     Area mBufferArea = {0, 0};
 
     std::vector<hwc_region_t> mSurfaceDamages;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };
 
 
@@ -290,6 +321,8 @@
     static const std::vector<hwc_transform_t> mDefaultTransforms;
     static const std::vector<hwc_transform_t> mBasicTransforms;
     static const std::vector<hwc_transform_t> mCompleteTransforms;
+
+    static const std::array<bool, 6> mCompositionSupport;
 };