Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5876e7df authored by Doris Liu's avatar Doris Liu
Browse files

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
parent d02c611c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ public:

    const LsaVector<const SkBitmap*>& getBitmapResources() const { return bitmapResources; }
    const LsaVector<FunctorContainer>& getFunctors() const { return functors; }
    const LsaVector<VectorDrawableRoot*>& getVectorDrawables() { return vectorDrawables; }
    const LsaVector<VectorDrawableRoot*>& getVectorDrawables() const { return vectorDrawables; }

    size_t addChild(NodeOpType* childOp);

+36 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */

#include <gtest/gtest.h>
#include <VectorDrawable.h>

#include "AnimationContext.h"
#include "DamageAccumulator.h"
@@ -132,3 +133,38 @@ RENDERTHREAD_TEST(RenderNode, prepareTree_nullableDisplayList) {

    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);
}