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

Commit ec22e04a authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Automerger Merge Worker
Browse files

Merge "Handle null buffer when calling Transaction::setBuffer" into tm-dev am:...

Merge "Handle null buffer when calling Transaction::setBuffer" into tm-dev am: 297bc933 am: b016cb44

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/18501030



Change-Id: I8fe01b04a321b5c9367657c71cd52e1d3a0f5c82
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents c38c0715 b016cb44
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -1497,6 +1497,13 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe


    releaseBufferIfOverwriting(*s);
    releaseBufferIfOverwriting(*s);


    if (buffer == nullptr) {
        s->what &= ~layer_state_t::eBufferChanged;
        s->bufferData = nullptr;
        mContainsBuffer = false;
        return *this;
    }

    std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>();
    std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>();
    bufferData->buffer = buffer;
    bufferData->buffer = buffer;
    uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber);
    uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber);
+18 −0
Original line number Original line Diff line number Diff line
@@ -465,4 +465,22 @@ TEST_F(ReleaseBufferCallbackTest, DISABLED_MergeBuffers_Different_Processes) {
    ASSERT_NO_FATAL_FAILURE(waitForReleaseBufferCallback(*releaseCallback, firstBufferCallbackId));
    ASSERT_NO_FATAL_FAILURE(waitForReleaseBufferCallback(*releaseCallback, firstBufferCallbackId));
}
}


TEST_F(ReleaseBufferCallbackTest, SetBuffer_OverwriteBuffersWithNull) {
    sp<SurfaceControl> layer = createBufferStateLayer();
    ReleaseBufferCallbackHelper* releaseCallback = getReleaseBufferCallbackHelper();

    sp<GraphicBuffer> firstBuffer = getBuffer();
    ReleaseCallbackId firstBufferCallbackId(firstBuffer->getId(), generateFrameNumber());

    // Create transaction with a buffer.
    Transaction transaction;
    transaction.setBuffer(layer, firstBuffer, std::nullopt, firstBufferCallbackId.framenumber,
                          releaseCallback->getCallback());

    // Call setBuffer on the same transaction with a null buffer.
    transaction.setBuffer(layer, nullptr, std::nullopt, 0, releaseCallback->getCallback());

    ASSERT_NO_FATAL_FAILURE(waitForReleaseBufferCallback(*releaseCallback, firstBufferCallbackId));
}

} // namespace android
} // namespace android