Loading libs/gui/ITransactionCompletedListener.cpp +19 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -131,8 +138,18 @@ 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(); Loading libs/gui/SurfaceComposerClient.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -297,7 +297,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); Loading @@ -322,7 +322,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); Loading libs/gui/include/gui/ITransactionCompletedListener.h +7 −6 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <cstdint> #include <unordered_map> #include <unordered_set> #include <variant> namespace android { Loading Loading @@ -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), Loading @@ -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; Loading libs/gui/include/gui/SurfaceComposerClient.h +4 −3 Original line number Diff line number Diff line Loading @@ -60,12 +60,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), Loading @@ -73,7 +74,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; Loading libs/gui/include/gui/test/CallbackUtils.h +7 −4 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
libs/gui/ITransactionCompletedListener.cpp +19 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -131,8 +138,18 @@ 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(); Loading
libs/gui/SurfaceComposerClient.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -297,7 +297,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); Loading @@ -322,7 +322,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); Loading
libs/gui/include/gui/ITransactionCompletedListener.h +7 −6 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <cstdint> #include <unordered_map> #include <unordered_set> #include <variant> namespace android { Loading Loading @@ -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), Loading @@ -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; Loading
libs/gui/include/gui/SurfaceComposerClient.h +4 −3 Original line number Diff line number Diff line Loading @@ -60,12 +60,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), Loading @@ -73,7 +74,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; Loading
libs/gui/include/gui/test/CallbackUtils.h +7 −4 Original line number Diff line number Diff line Loading @@ -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) Loading