diff options
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/gui/ITransactionCompletedListener.cpp | 21 | ||||
| -rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 4 | ||||
| -rw-r--r-- | libs/gui/include/gui/ITransactionCompletedListener.h | 13 | ||||
| -rw-r--r-- | libs/gui/include/gui/SurfaceComposerClient.h | 7 | ||||
| -rw-r--r-- | libs/gui/include/gui/test/CallbackUtils.h | 11 |
5 files changed, 39 insertions, 17 deletions
diff --git a/libs/gui/ITransactionCompletedListener.cpp b/libs/gui/ITransactionCompletedListener.cpp index aa7ebc9eb3..f7392d4969 100644 --- a/libs/gui/ITransactionCompletedListener.cpp +++ b/libs/gui/ITransactionCompletedListener.cpp @@ -111,7 +111,14 @@ status_t JankData::readFromParcel(const Parcel* input) { status_t SurfaceStats::writeToParcel(Parcel* output) const { SAFE_PARCEL(output->writeStrongBinder, surfaceControl); - SAFE_PARCEL(output->writeInt64, acquireTime); + if (const auto* acquireFence = std::get_if<sp<Fence>>(&acquireTimeOrFence)) { + SAFE_PARCEL(output->writeBool, true); + SAFE_PARCEL(output->write, **acquireFence); + } else { + SAFE_PARCEL(output->writeBool, false); + SAFE_PARCEL(output->writeInt64, std::get<nsecs_t>(acquireTimeOrFence)); + } + if (previousReleaseFence) { SAFE_PARCEL(output->writeBool, true); SAFE_PARCEL(output->write, *previousReleaseFence); @@ -131,10 +138,20 @@ status_t SurfaceStats::writeToParcel(Parcel* output) const { status_t SurfaceStats::readFromParcel(const Parcel* input) { SAFE_PARCEL(input->readStrongBinder, &surfaceControl); - SAFE_PARCEL(input->readInt64, &acquireTime); + bool hasFence = false; SAFE_PARCEL(input->readBool, &hasFence); if (hasFence) { + acquireTimeOrFence = sp<Fence>::make(); + SAFE_PARCEL(input->read, *std::get<sp<Fence>>(acquireTimeOrFence)); + } else { + nsecs_t acquireTime; + SAFE_PARCEL(input->readInt64, &acquireTime); + acquireTimeOrFence = acquireTime; + } + + SAFE_PARCEL(input->readBool, &hasFence); + if (hasFence) { previousReleaseFence = new Fence(); SAFE_PARCEL(input->read, *previousReleaseFence); } diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 91b2fb1c3b..f78726c5a2 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -296,7 +296,7 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener surfaceControlStats .emplace_back(callbacksMap[callbackId] .surfaceControls[surfaceStats.surfaceControl], - transactionStats.latchTime, surfaceStats.acquireTime, + transactionStats.latchTime, surfaceStats.acquireTimeOrFence, transactionStats.presentFence, surfaceStats.previousReleaseFence, surfaceStats.transformHint, surfaceStats.eventStats); @@ -321,7 +321,7 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener surfaceControlStats .emplace_back(callbacksMap[callbackId] .surfaceControls[surfaceStats.surfaceControl], - transactionStats.latchTime, surfaceStats.acquireTime, + transactionStats.latchTime, surfaceStats.acquireTimeOrFence, transactionStats.presentFence, surfaceStats.previousReleaseFence, surfaceStats.transformHint, surfaceStats.eventStats); diff --git a/libs/gui/include/gui/ITransactionCompletedListener.h b/libs/gui/include/gui/ITransactionCompletedListener.h index 0df5822597..a791c665e1 100644 --- a/libs/gui/include/gui/ITransactionCompletedListener.h +++ b/libs/gui/include/gui/ITransactionCompletedListener.h @@ -30,6 +30,7 @@ #include <cstdint> #include <unordered_map> #include <unordered_set> +#include <variant> namespace android { @@ -130,12 +131,12 @@ public: status_t readFromParcel(const Parcel* input) override; SurfaceStats() = default; - SurfaceStats(const sp<IBinder>& sc, nsecs_t time, const sp<Fence>& prevReleaseFence, - uint32_t hint, uint32_t currentMaxAcquiredBuffersCount, - FrameEventHistoryStats frameEventStats, std::vector<JankData> jankData, - ReleaseCallbackId previousReleaseCallbackId) + SurfaceStats(const sp<IBinder>& sc, std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence, + const sp<Fence>& prevReleaseFence, uint32_t hint, + uint32_t currentMaxAcquiredBuffersCount, FrameEventHistoryStats frameEventStats, + std::vector<JankData> jankData, ReleaseCallbackId previousReleaseCallbackId) : surfaceControl(sc), - acquireTime(time), + acquireTimeOrFence(std::move(acquireTimeOrFence)), previousReleaseFence(prevReleaseFence), transformHint(hint), currentMaxAcquiredBufferCount(currentMaxAcquiredBuffersCount), @@ -144,7 +145,7 @@ public: previousReleaseCallbackId(previousReleaseCallbackId) {} sp<IBinder> surfaceControl; - nsecs_t acquireTime = -1; + std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1; sp<Fence> previousReleaseFence; uint32_t transformHint = 0; uint32_t currentMaxAcquiredBufferCount = 0; diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h index 61eeab35e5..731ac65cd8 100644 --- a/libs/gui/include/gui/SurfaceComposerClient.h +++ b/libs/gui/include/gui/SurfaceComposerClient.h @@ -58,12 +58,13 @@ class Region; using gui::IRegionSamplingListener; struct SurfaceControlStats { - SurfaceControlStats(const sp<SurfaceControl>& sc, nsecs_t latchTime, nsecs_t acquireTime, + 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) : surfaceControl(sc), latchTime(latchTime), - acquireTime(acquireTime), + acquireTimeOrFence(std::move(acquireTimeOrFence)), presentFence(presentFence), previousReleaseFence(prevReleaseFence), transformHint(hint), @@ -71,7 +72,7 @@ struct SurfaceControlStats { sp<SurfaceControl> surfaceControl; nsecs_t latchTime = -1; - nsecs_t acquireTime = -1; + std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1; sp<Fence> presentFence; sp<Fence> previousReleaseFence; uint32_t transformHint = 0; diff --git a/libs/gui/include/gui/test/CallbackUtils.h b/libs/gui/include/gui/test/CallbackUtils.h index 64032087eb..62d1496ccd 100644 --- a/libs/gui/include/gui/test/CallbackUtils.h +++ b/libs/gui/include/gui/test/CallbackUtils.h @@ -134,12 +134,15 @@ private: void verifySurfaceControlStats(const SurfaceControlStats& surfaceControlStats, nsecs_t latchTime) const { - const auto& [surfaceControl, latch, acquireTime, presentFence, previousReleaseFence, - transformHint, frameEvents] = surfaceControlStats; + const auto& [surfaceControl, latch, acquireTimeOrFence, presentFence, + previousReleaseFence, transformHint, frameEvents] = surfaceControlStats; - ASSERT_EQ(acquireTime > 0, mBufferResult == ExpectedResult::Buffer::ACQUIRED) + ASSERT_TRUE(std::holds_alternative<nsecs_t>(acquireTimeOrFence)); + ASSERT_EQ(std::get<nsecs_t>(acquireTimeOrFence) > 0, + mBufferResult == ExpectedResult::Buffer::ACQUIRED) << "bad acquire time"; - ASSERT_LE(acquireTime, latchTime) << "acquire time should be <= latch time"; + ASSERT_LE(std::get<nsecs_t>(acquireTimeOrFence), latchTime) + << "acquire time should be <= latch time"; if (mPreviousBufferResult == ExpectedResult::PreviousBuffer::RELEASED) { ASSERT_NE(previousReleaseFence, nullptr) |