Loading libs/gui/BLASTBufferQueue.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -334,9 +334,11 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence std::optional<SurfaceControlStats> statsOptional = findMatchingStat(stats, pendingSC); if (statsOptional) { SurfaceControlStats stat = *statsOptional; mTransformHint = stat.transformHint; if (stat.transformHint) { mTransformHint = *stat.transformHint; mBufferItemConsumer->setTransformHint(mTransformHint); BQA_LOGV("updated mTransformHint=%d", mTransformHint); } // Update frametime stamps if the frame was latched and presented, indicated by a // valid latch time. if (stat.latchTime > 0) { Loading libs/gui/ITransactionCompletedListener.cpp +19 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ #define LOG_TAG "ITransactionCompletedListener" //#define LOG_NDEBUG 0 #include <cstdint> #include <optional> #include <gui/ISurfaceComposer.h> #include <gui/ITransactionCompletedListener.h> #include <gui/LayerState.h> Loading Loading @@ -126,7 +129,12 @@ status_t SurfaceStats::writeToParcel(Parcel* output) const { } else { SAFE_PARCEL(output->writeBool, false); } SAFE_PARCEL(output->writeUint32, transformHint); SAFE_PARCEL(output->writeBool, transformHint.has_value()); if (transformHint.has_value()) { output->writeUint32(transformHint.value()); } SAFE_PARCEL(output->writeUint32, currentMaxAcquiredBufferCount); SAFE_PARCEL(output->writeParcelable, eventStats); SAFE_PARCEL(output->writeInt32, static_cast<int32_t>(jankData.size())); Loading Loading @@ -156,7 +164,16 @@ status_t SurfaceStats::readFromParcel(const Parcel* input) { previousReleaseFence = new Fence(); SAFE_PARCEL(input->read, *previousReleaseFence); } SAFE_PARCEL(input->readUint32, &transformHint); bool hasTransformHint = false; SAFE_PARCEL(input->readBool, &hasTransformHint); if (hasTransformHint) { uint32_t tempTransformHint; SAFE_PARCEL(input->readUint32, &tempTransformHint); transformHint = std::make_optional(tempTransformHint); } else { transformHint = std::nullopt; } SAFE_PARCEL(input->readUint32, ¤tMaxAcquiredBufferCount); SAFE_PARCEL(input->readParcelable, &eventStats); Loading libs/gui/SurfaceComposerClient.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -386,10 +386,11 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener surfaceStats.previousReleaseFence, surfaceStats.transformHint, surfaceStats.eventStats, surfaceStats.currentMaxAcquiredBufferCount); if (callbacksMap[callbackId].surfaceControls[surfaceStats.surfaceControl]) { if (callbacksMap[callbackId].surfaceControls[surfaceStats.surfaceControl] && surfaceStats.transformHint.has_value()) { callbacksMap[callbackId] .surfaceControls[surfaceStats.surfaceControl] ->setTransformHint(surfaceStats.transformHint); ->setTransformHint(*surfaceStats.transformHint); } // If there is buffer id set, we look up any pending client release buffer callbacks // and call them. This is a performance optimization when we have a transaction Loading libs/gui/include/gui/ITransactionCompletedListener.h +2 −2 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public: SurfaceStats() = default; SurfaceStats(const sp<IBinder>& sc, std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence, const sp<Fence>& prevReleaseFence, uint32_t hint, const sp<Fence>& prevReleaseFence, std::optional<uint32_t> hint, uint32_t currentMaxAcquiredBuffersCount, FrameEventHistoryStats frameEventStats, std::vector<JankData> jankData, ReleaseCallbackId previousReleaseCallbackId) : surfaceControl(sc), Loading @@ -147,7 +147,7 @@ public: sp<IBinder> surfaceControl; std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1; sp<Fence> previousReleaseFence; uint32_t transformHint = 0; std::optional<uint32_t> transformHint = 0; uint32_t currentMaxAcquiredBufferCount = 0; FrameEventHistoryStats eventStats; std::vector<JankData> jankData; Loading libs/gui/include/gui/SurfaceComposerClient.h +2 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ struct SurfaceControlStats { SurfaceControlStats(const sp<SurfaceControl>& sc, nsecs_t latchTime, std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, uint32_t hint, FrameEventHistoryStats eventStats, std::optional<uint32_t> hint, FrameEventHistoryStats eventStats, uint32_t currentMaxAcquiredBufferCount) : surfaceControl(sc), latchTime(latchTime), Loading @@ -85,7 +85,7 @@ struct SurfaceControlStats { std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1; sp<Fence> presentFence; sp<Fence> previousReleaseFence; uint32_t transformHint = 0; std::optional<uint32_t> transformHint = 0; FrameEventHistoryStats frameEventStats; uint32_t currentMaxAcquiredBufferCount = 0; }; Loading Loading
libs/gui/BLASTBufferQueue.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -334,9 +334,11 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence std::optional<SurfaceControlStats> statsOptional = findMatchingStat(stats, pendingSC); if (statsOptional) { SurfaceControlStats stat = *statsOptional; mTransformHint = stat.transformHint; if (stat.transformHint) { mTransformHint = *stat.transformHint; mBufferItemConsumer->setTransformHint(mTransformHint); BQA_LOGV("updated mTransformHint=%d", mTransformHint); } // Update frametime stamps if the frame was latched and presented, indicated by a // valid latch time. if (stat.latchTime > 0) { Loading
libs/gui/ITransactionCompletedListener.cpp +19 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ #define LOG_TAG "ITransactionCompletedListener" //#define LOG_NDEBUG 0 #include <cstdint> #include <optional> #include <gui/ISurfaceComposer.h> #include <gui/ITransactionCompletedListener.h> #include <gui/LayerState.h> Loading Loading @@ -126,7 +129,12 @@ status_t SurfaceStats::writeToParcel(Parcel* output) const { } else { SAFE_PARCEL(output->writeBool, false); } SAFE_PARCEL(output->writeUint32, transformHint); SAFE_PARCEL(output->writeBool, transformHint.has_value()); if (transformHint.has_value()) { output->writeUint32(transformHint.value()); } SAFE_PARCEL(output->writeUint32, currentMaxAcquiredBufferCount); SAFE_PARCEL(output->writeParcelable, eventStats); SAFE_PARCEL(output->writeInt32, static_cast<int32_t>(jankData.size())); Loading Loading @@ -156,7 +164,16 @@ status_t SurfaceStats::readFromParcel(const Parcel* input) { previousReleaseFence = new Fence(); SAFE_PARCEL(input->read, *previousReleaseFence); } SAFE_PARCEL(input->readUint32, &transformHint); bool hasTransformHint = false; SAFE_PARCEL(input->readBool, &hasTransformHint); if (hasTransformHint) { uint32_t tempTransformHint; SAFE_PARCEL(input->readUint32, &tempTransformHint); transformHint = std::make_optional(tempTransformHint); } else { transformHint = std::nullopt; } SAFE_PARCEL(input->readUint32, ¤tMaxAcquiredBufferCount); SAFE_PARCEL(input->readParcelable, &eventStats); Loading
libs/gui/SurfaceComposerClient.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -386,10 +386,11 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener surfaceStats.previousReleaseFence, surfaceStats.transformHint, surfaceStats.eventStats, surfaceStats.currentMaxAcquiredBufferCount); if (callbacksMap[callbackId].surfaceControls[surfaceStats.surfaceControl]) { if (callbacksMap[callbackId].surfaceControls[surfaceStats.surfaceControl] && surfaceStats.transformHint.has_value()) { callbacksMap[callbackId] .surfaceControls[surfaceStats.surfaceControl] ->setTransformHint(surfaceStats.transformHint); ->setTransformHint(*surfaceStats.transformHint); } // If there is buffer id set, we look up any pending client release buffer callbacks // and call them. This is a performance optimization when we have a transaction Loading
libs/gui/include/gui/ITransactionCompletedListener.h +2 −2 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public: SurfaceStats() = default; SurfaceStats(const sp<IBinder>& sc, std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence, const sp<Fence>& prevReleaseFence, uint32_t hint, const sp<Fence>& prevReleaseFence, std::optional<uint32_t> hint, uint32_t currentMaxAcquiredBuffersCount, FrameEventHistoryStats frameEventStats, std::vector<JankData> jankData, ReleaseCallbackId previousReleaseCallbackId) : surfaceControl(sc), Loading @@ -147,7 +147,7 @@ public: sp<IBinder> surfaceControl; std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1; sp<Fence> previousReleaseFence; uint32_t transformHint = 0; std::optional<uint32_t> transformHint = 0; uint32_t currentMaxAcquiredBufferCount = 0; FrameEventHistoryStats eventStats; std::vector<JankData> jankData; Loading
libs/gui/include/gui/SurfaceComposerClient.h +2 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ struct SurfaceControlStats { SurfaceControlStats(const sp<SurfaceControl>& sc, nsecs_t latchTime, std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, uint32_t hint, FrameEventHistoryStats eventStats, std::optional<uint32_t> hint, FrameEventHistoryStats eventStats, uint32_t currentMaxAcquiredBufferCount) : surfaceControl(sc), latchTime(latchTime), Loading @@ -85,7 +85,7 @@ struct SurfaceControlStats { std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1; sp<Fence> presentFence; sp<Fence> previousReleaseFence; uint32_t transformHint = 0; std::optional<uint32_t> transformHint = 0; FrameEventHistoryStats frameEventStats; uint32_t currentMaxAcquiredBufferCount = 0; }; Loading