HWUI unit test for AVD on HwLayer

This test puts AVD on a HWLayer and check that after prepareTree
the correct damage rect for the layer is enqueued.

This verifies the fix for bug 30166063

Change-Id: Ia37847357bb00d54f08ee253013db83d46783fbd
diff --git a/libs/hwui/tests/unit/RenderNodeTests.cpp b/libs/hwui/tests/unit/RenderNodeTests.cpp
index fd3cf37..0d90afa 100644
--- a/libs/hwui/tests/unit/RenderNodeTests.cpp
+++ b/libs/hwui/tests/unit/RenderNodeTests.cpp
@@ -15,6 +15,7 @@
  */
 
 #include <gtest/gtest.h>
+#include <VectorDrawable.h>
 
 #include "AnimationContext.h"
 #include "DamageAccumulator.h"
@@ -132,3 +133,38 @@
 
     canvasContext->destroy(nullptr);
 }
+
+RENDERTHREAD_TEST(RenderNode, prepareTree_HwLayer_AVD_enqueueDamage) {
+
+    VectorDrawable::Group* group = new VectorDrawable::Group();
+    VectorDrawableRoot* vectorDrawable = new VectorDrawableRoot(group);
+    auto rootNode = TestUtils::createNode(0, 0, 200, 400,
+            [&](RenderProperties& props, Canvas& canvas) {
+        canvas.drawVectorDrawable(vectorDrawable);
+    });
+    ContextFactory contextFactory;
+    std::unique_ptr<CanvasContext> canvasContext(CanvasContext::create(
+            renderThread, false, rootNode.get(), &contextFactory));
+    TreeInfo info(TreeInfo::MODE_RT_ONLY, *canvasContext.get());
+    DamageAccumulator damageAccumulator;
+    LayerUpdateQueue layerUpdateQueue;
+    info.damageAccumulator = &damageAccumulator;
+    info.layerUpdateQueue = &layerUpdateQueue;
+    info.observer = nullptr;
+
+    // Put node on HW layer
+    rootNode->mutateStagingProperties().mutateLayerProperties().setType(LayerType::RenderLayer);
+
+    TestUtils::syncHierarchyPropertiesAndDisplayList(rootNode);
+    rootNode->prepareTree(info);
+
+    // Check that the VD is in the dislay list, and the layer update queue contains the correct
+    // damage rect.
+    EXPECT_FALSE(rootNode->getDisplayList()->getVectorDrawables().empty());
+    EXPECT_FALSE(info.layerUpdateQueue->entries().empty());
+    EXPECT_EQ(rootNode.get(), info.layerUpdateQueue->entries().at(0).renderNode);
+    EXPECT_EQ(uirenderer::Rect(0, 0, 200, 400), info.layerUpdateQueue->entries().at(0).damage);
+
+    delete vectorDrawable;
+    canvasContext->destroy(nullptr);
+}