Loading libs/gui/SurfaceComposerClient.cpp +4 −5 Original line number Diff line number Diff line Loading @@ -1421,7 +1421,7 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer( const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer, const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& frameNumber, const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& optFrameNumber, ReleaseBufferCallback callback) { layer_state_t* s = getLayerState(sc); if (!s) { Loading @@ -1433,10 +1433,9 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>(); bufferData->buffer = buffer; if (frameNumber) { bufferData->frameNumber = *frameNumber; uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber); bufferData->frameNumber = frameNumber; bufferData->flags |= BufferData::BufferDataChange::frameNumberChanged; } if (fence) { bufferData->acquireFence = *fence; bufferData->flags |= BufferData::BufferDataChange::fenceChanged; Loading libs/gui/SurfaceControl.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -280,5 +280,18 @@ sp<SurfaceControl> SurfaceControl::getParentingLayer() { return this; } uint64_t SurfaceControl::resolveFrameNumber(const std::optional<uint64_t>& frameNumber) { if (frameNumber.has_value()) { auto ret = frameNumber.value(); // Set the fallback to something far enough ahead that in the unlikely event of mixed // "real" frame numbers and fallback frame numbers, we still won't collide in any // meaningful capacity mFallbackFrameNumber = ret + 100; return ret; } else { return mFallbackFrameNumber++; } } // ---------------------------------------------------------------------------- }; // namespace android libs/gui/include/gui/SurfaceControl.h +4 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <stdint.h> #include <sys/types.h> #include <optional> #include <utils/RefBase.h> #include <utils/threads.h> Loading Loading @@ -98,6 +99,8 @@ public: sp<SurfaceControl> getParentingLayer(); uint64_t resolveFrameNumber(const std::optional<uint64_t>& frameNumber); private: // can't be copied SurfaceControl& operator = (SurfaceControl& rhs); Loading @@ -124,6 +127,7 @@ private: uint32_t mHeight; PixelFormat mFormat; uint32_t mCreateFlags; uint64_t mFallbackFrameNumber = 100; }; }; // namespace android Loading Loading
libs/gui/SurfaceComposerClient.cpp +4 −5 Original line number Diff line number Diff line Loading @@ -1421,7 +1421,7 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer( const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer, const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& frameNumber, const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& optFrameNumber, ReleaseBufferCallback callback) { layer_state_t* s = getLayerState(sc); if (!s) { Loading @@ -1433,10 +1433,9 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>(); bufferData->buffer = buffer; if (frameNumber) { bufferData->frameNumber = *frameNumber; uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber); bufferData->frameNumber = frameNumber; bufferData->flags |= BufferData::BufferDataChange::frameNumberChanged; } if (fence) { bufferData->acquireFence = *fence; bufferData->flags |= BufferData::BufferDataChange::fenceChanged; Loading
libs/gui/SurfaceControl.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -280,5 +280,18 @@ sp<SurfaceControl> SurfaceControl::getParentingLayer() { return this; } uint64_t SurfaceControl::resolveFrameNumber(const std::optional<uint64_t>& frameNumber) { if (frameNumber.has_value()) { auto ret = frameNumber.value(); // Set the fallback to something far enough ahead that in the unlikely event of mixed // "real" frame numbers and fallback frame numbers, we still won't collide in any // meaningful capacity mFallbackFrameNumber = ret + 100; return ret; } else { return mFallbackFrameNumber++; } } // ---------------------------------------------------------------------------- }; // namespace android
libs/gui/include/gui/SurfaceControl.h +4 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <stdint.h> #include <sys/types.h> #include <optional> #include <utils/RefBase.h> #include <utils/threads.h> Loading Loading @@ -98,6 +99,8 @@ public: sp<SurfaceControl> getParentingLayer(); uint64_t resolveFrameNumber(const std::optional<uint64_t>& frameNumber); private: // can't be copied SurfaceControl& operator = (SurfaceControl& rhs); Loading @@ -124,6 +127,7 @@ private: uint32_t mHeight; PixelFormat mFormat; uint32_t mCreateFlags; uint64_t mFallbackFrameNumber = 100; }; }; // namespace android Loading