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

Commit c4d91f0b authored by sergeyv's avatar sergeyv Committed by android-build-merger
Browse files

Merge "HWUI: do nothing in case of empty layer" into nyc-dev

am: 21a608f2

* commit '21a608f2':
  HWUI: do nothing in case of empty layer

Change-Id: Iec199a2a20c9981922468c3a33065a86f818d833
parents 7d45e023 21a608f2
Loading
Loading
Loading
Loading
+14 −20
Original line number Diff line number Diff line
@@ -805,13 +805,8 @@ void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op,
    // Note that we don't use op->paint in this function - it's never set on a LayerOp
    OffscreenBuffer* buffer = *op.layerHandle;

    if (CC_UNLIKELY(!buffer)) {
        // Layer was not allocated, which can occur if there were no draw ops inside. We draw the
        // equivalent by drawing a rect with the same layer properties (alpha/xfer/filter).
        int color = SkColorSetA(SK_ColorTRANSPARENT, op.alpha * 255);
        renderRectForLayer(renderer, op, state,
                color, op.mode, op.colorFilter);
    } else {
    if (CC_UNLIKELY(!buffer)) return;

    float layerAlpha = op.alpha * state.alpha;
    Glop glop;
    GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
@@ -823,9 +818,8 @@ void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op,
                    Rect(op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight()))
            .build();
    renderer.renderGlop(state, glop);
    }

    if (buffer && !buffer->hasRenderedSinceRepaint) {
    if (!buffer->hasRenderedSinceRepaint) {
        buffer->hasRenderedSinceRepaint = true;
        if (CC_UNLIKELY(Properties::debugLayersUpdates)) {
            // render debug layer highlight
+7 −10
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ private:
typedef void (*TestBakedOpReceiver)(BakedOpRenderer&, const BakedOpState&);

static void testUnmergedGlopDispatch(renderthread::RenderThread& renderThread, RecordedOp* op,
        std::function<void(const Glop& glop)> glopVerifier) {
        std::function<void(const Glop& glop)> glopVerifier, int expectedGlopCount = 1) {
    // Create op, and wrap with basic state.
    LinearAllocator allocator;
    auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(100, 100));
@@ -61,8 +61,8 @@ static void testUnmergedGlopDispatch(renderthread::RenderThread& renderThread, R
    ASSERT_NE(nullptr, state);

    int glopCount = 0;
    auto glopReceiver = [&glopVerifier, &glopCount] (const Glop& glop) {
        ASSERT_EQ(glopCount++, 0) << "Only one Glop expected";
    auto glopReceiver = [&glopVerifier, &glopCount, &expectedGlopCount] (const Glop& glop) {
        ASSERT_LE(glopCount++, expectedGlopCount) << expectedGlopCount << "glop(s) expected";
        glopVerifier(glop);
    };
    ValidatingBakedOpRenderer renderer(renderThread.renderState(), glopReceiver);
@@ -75,7 +75,8 @@ static void testUnmergedGlopDispatch(renderthread::RenderThread& renderThread, R
    static TestBakedOpReceiver unmergedReceivers[] = BUILD_RENDERABLE_OP_LUT(X);
#undef X
    unmergedReceivers[op->opId](renderer, *state);
    ASSERT_EQ(1, glopCount) << "Exactly one Glop expected";
    ASSERT_EQ(expectedGlopCount, glopCount) << "Exactly " << expectedGlopCount
            << "Glop(s) expected";
}

RENDERTHREAD_TEST(BakedOpDispatcher, pathTexture_positionOvalArc) {
@@ -119,12 +120,8 @@ RENDERTHREAD_TEST(BakedOpDispatcher, onLayerOp_bufferless) {
    OffscreenBuffer* buffer = nullptr; // no providing a buffer, should hit rect fallback case
    LayerOp op(Rect(10, 10), Matrix4::identity(), nullptr, &layerPaint, &buffer);
    testUnmergedGlopDispatch(renderThread, &op, [&renderThread] (const Glop& glop) {
        // rect glop is dispatched with paint props applied
        EXPECT_EQ(renderThread.renderState().meshState().getUnitQuadVBO(),
                glop.mesh.vertices.bufferObject) << "Unit quad should be drawn";
        EXPECT_EQ(nullptr, glop.fill.texture.texture) << "Should be no texture when layer is null";
        EXPECT_FLOAT_EQ(128 / 255.0f, glop.fill.color.a) << "Rect quad should use op alpha";
    });
        ADD_FAILURE() << "Nothing should happen";
    }, 0);
}

static int getGlopTransformFlags(renderthread::RenderThread& renderThread, RecordedOp* op) {