Loading libs/gui/SurfaceComposerClient.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -1497,6 +1497,13 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe 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>(); bufferData->buffer = buffer; uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber); Loading services/surfaceflinger/tests/ReleaseBufferCallback_test.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -465,4 +465,22 @@ TEST_F(ReleaseBufferCallbackTest, DISABLED_MergeBuffers_Different_Processes) { 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 Loading
libs/gui/SurfaceComposerClient.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -1497,6 +1497,13 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe 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>(); bufferData->buffer = buffer; uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber); Loading
services/surfaceflinger/tests/ReleaseBufferCallback_test.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -465,4 +465,22 @@ TEST_F(ReleaseBufferCallbackTest, DISABLED_MergeBuffers_Different_Processes) { 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