Loading libs/gui/BLASTBufferQueue.cpp +17 −7 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ #include <android-base/thread_annotations.h> #include <chrono> #include <com_android_graphics_libgui_flags.h> using namespace com::android::graphics::libgui; using namespace std::chrono_literals; Loading Loading @@ -102,12 +104,11 @@ void BLASTBufferItemConsumer::addAndGetFrameTimestamps(const NewFrameEventsEntry } } void BLASTBufferItemConsumer::updateFrameTimestamps(uint64_t frameNumber, nsecs_t refreshStartTime, const sp<Fence>& glDoneFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, CompositorTiming compositorTiming, nsecs_t latchTime, nsecs_t dequeueReadyTime) { void BLASTBufferItemConsumer::updateFrameTimestamps( uint64_t frameNumber, uint64_t previousFrameNumber, nsecs_t refreshStartTime, const sp<Fence>& glDoneFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, CompositorTiming compositorTiming, nsecs_t latchTime, nsecs_t dequeueReadyTime) { Mutex::Autolock lock(mMutex); // if the producer is not connected, don't bother updating, Loading @@ -118,7 +119,15 @@ void BLASTBufferItemConsumer::updateFrameTimestamps(uint64_t frameNumber, nsecs_ std::shared_ptr<FenceTime> releaseFenceTime = std::make_shared<FenceTime>(prevReleaseFence); mFrameEventHistory.addLatch(frameNumber, latchTime); if (flags::frametimestamps_previousrelease()) { if (previousFrameNumber > 0) { mFrameEventHistory.addRelease(previousFrameNumber, dequeueReadyTime, std::move(releaseFenceTime)); } } else { mFrameEventHistory.addRelease(frameNumber, dequeueReadyTime, std::move(releaseFenceTime)); } mFrameEventHistory.addPreComposition(frameNumber, refreshStartTime); mFrameEventHistory.addPostComposition(frameNumber, glDoneFenceTime, presentFenceTime, compositorTiming); Loading Loading @@ -364,6 +373,7 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence if (stat.latchTime > 0) { mBufferItemConsumer ->updateFrameTimestamps(stat.frameEventStats.frameNumber, stat.frameEventStats.previousFrameNumber, stat.frameEventStats.refreshStartTime, stat.frameEventStats.gpuCompositionDoneFence, stat.presentFence, stat.previousReleaseFence, Loading libs/gui/ITransactionCompletedListener.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,10 @@ #include <gui/LayerState.h> #include <private/gui/ParcelUtils.h> #include <com_android_graphics_libgui_flags.h> using namespace com::android::graphics::libgui; namespace android { namespace { // Anonymous Loading @@ -49,6 +53,11 @@ status_t FrameEventHistoryStats::writeToParcel(Parcel* output) const { status_t err = output->writeUint64(frameNumber); if (err != NO_ERROR) return err; if (flags::frametimestamps_previousrelease()) { err = output->writeUint64(previousFrameNumber); if (err != NO_ERROR) return err; } if (gpuCompositionDoneFence) { err = output->writeBool(true); if (err != NO_ERROR) return err; Loading Loading @@ -79,6 +88,11 @@ status_t FrameEventHistoryStats::readFromParcel(const Parcel* input) { status_t err = input->readUint64(&frameNumber); if (err != NO_ERROR) return err; if (flags::frametimestamps_previousrelease()) { err = input->readUint64(&previousFrameNumber); if (err != NO_ERROR) return err; } bool hasFence = false; err = input->readBool(&hasFence); if (err != NO_ERROR) return err; Loading libs/gui/fuzzer/libgui_bufferQueue_fuzzer.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -141,8 +141,8 @@ void BufferQueueFuzzer::invokeBlastBufferQueue() { CompositorTiming compTiming; sp<Fence> previousFence = new Fence(memfd_create("pfd", MFD_ALLOW_SEALING)); sp<Fence> gpuFence = new Fence(memfd_create("gfd", MFD_ALLOW_SEALING)); FrameEventHistoryStats frameStats(frameNumber, gpuFence, compTiming, mFdp.ConsumeIntegral<int64_t>(), FrameEventHistoryStats frameStats(frameNumber, mFdp.ConsumeIntegral<uint64_t>(), gpuFence, compTiming, mFdp.ConsumeIntegral<int64_t>(), mFdp.ConsumeIntegral<int64_t>()); std::vector<SurfaceControlStats> stats; sp<Fence> presentFence = new Fence(memfd_create("fd", MFD_ALLOW_SEALING)); Loading libs/gui/include/gui/BLASTBufferQueue.h +2 −2 Original line number Diff line number Diff line Loading @@ -50,8 +50,8 @@ public: void onDisconnect() override EXCLUDES(mMutex); void addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps, FrameEventHistoryDelta* outDelta) override EXCLUDES(mMutex); void updateFrameTimestamps(uint64_t frameNumber, nsecs_t refreshStartTime, const sp<Fence>& gpuCompositionDoneFence, void updateFrameTimestamps(uint64_t frameNumber, uint64_t previousFrameNumber, nsecs_t refreshStartTime, const sp<Fence>& gpuCompositionDoneFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, CompositorTiming compositorTiming, nsecs_t latchTime, nsecs_t dequeueReadyTime) EXCLUDES(mMutex); Loading libs/gui/include/gui/ITransactionCompletedListener.h +5 −2 Original line number Diff line number Diff line Loading @@ -95,15 +95,18 @@ public: status_t readFromParcel(const Parcel* input) override; FrameEventHistoryStats() = default; FrameEventHistoryStats(uint64_t fn, const sp<Fence>& gpuCompFence, CompositorTiming compTiming, FrameEventHistoryStats(uint64_t frameNumber, uint64_t previousFrameNumber, const sp<Fence>& gpuCompFence, CompositorTiming compTiming, nsecs_t refreshTime, nsecs_t dequeueReadyTime) : frameNumber(fn), : frameNumber(frameNumber), previousFrameNumber(previousFrameNumber), gpuCompositionDoneFence(gpuCompFence), compositorTiming(compTiming), refreshStartTime(refreshTime), dequeueReadyTime(dequeueReadyTime) {} uint64_t frameNumber; uint64_t previousFrameNumber; sp<Fence> gpuCompositionDoneFence; CompositorTiming compositorTiming; nsecs_t refreshStartTime; Loading Loading
libs/gui/BLASTBufferQueue.cpp +17 −7 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ #include <android-base/thread_annotations.h> #include <chrono> #include <com_android_graphics_libgui_flags.h> using namespace com::android::graphics::libgui; using namespace std::chrono_literals; Loading Loading @@ -102,12 +104,11 @@ void BLASTBufferItemConsumer::addAndGetFrameTimestamps(const NewFrameEventsEntry } } void BLASTBufferItemConsumer::updateFrameTimestamps(uint64_t frameNumber, nsecs_t refreshStartTime, const sp<Fence>& glDoneFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, CompositorTiming compositorTiming, nsecs_t latchTime, nsecs_t dequeueReadyTime) { void BLASTBufferItemConsumer::updateFrameTimestamps( uint64_t frameNumber, uint64_t previousFrameNumber, nsecs_t refreshStartTime, const sp<Fence>& glDoneFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, CompositorTiming compositorTiming, nsecs_t latchTime, nsecs_t dequeueReadyTime) { Mutex::Autolock lock(mMutex); // if the producer is not connected, don't bother updating, Loading @@ -118,7 +119,15 @@ void BLASTBufferItemConsumer::updateFrameTimestamps(uint64_t frameNumber, nsecs_ std::shared_ptr<FenceTime> releaseFenceTime = std::make_shared<FenceTime>(prevReleaseFence); mFrameEventHistory.addLatch(frameNumber, latchTime); if (flags::frametimestamps_previousrelease()) { if (previousFrameNumber > 0) { mFrameEventHistory.addRelease(previousFrameNumber, dequeueReadyTime, std::move(releaseFenceTime)); } } else { mFrameEventHistory.addRelease(frameNumber, dequeueReadyTime, std::move(releaseFenceTime)); } mFrameEventHistory.addPreComposition(frameNumber, refreshStartTime); mFrameEventHistory.addPostComposition(frameNumber, glDoneFenceTime, presentFenceTime, compositorTiming); Loading Loading @@ -364,6 +373,7 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence if (stat.latchTime > 0) { mBufferItemConsumer ->updateFrameTimestamps(stat.frameEventStats.frameNumber, stat.frameEventStats.previousFrameNumber, stat.frameEventStats.refreshStartTime, stat.frameEventStats.gpuCompositionDoneFence, stat.presentFence, stat.previousReleaseFence, Loading
libs/gui/ITransactionCompletedListener.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,10 @@ #include <gui/LayerState.h> #include <private/gui/ParcelUtils.h> #include <com_android_graphics_libgui_flags.h> using namespace com::android::graphics::libgui; namespace android { namespace { // Anonymous Loading @@ -49,6 +53,11 @@ status_t FrameEventHistoryStats::writeToParcel(Parcel* output) const { status_t err = output->writeUint64(frameNumber); if (err != NO_ERROR) return err; if (flags::frametimestamps_previousrelease()) { err = output->writeUint64(previousFrameNumber); if (err != NO_ERROR) return err; } if (gpuCompositionDoneFence) { err = output->writeBool(true); if (err != NO_ERROR) return err; Loading Loading @@ -79,6 +88,11 @@ status_t FrameEventHistoryStats::readFromParcel(const Parcel* input) { status_t err = input->readUint64(&frameNumber); if (err != NO_ERROR) return err; if (flags::frametimestamps_previousrelease()) { err = input->readUint64(&previousFrameNumber); if (err != NO_ERROR) return err; } bool hasFence = false; err = input->readBool(&hasFence); if (err != NO_ERROR) return err; Loading
libs/gui/fuzzer/libgui_bufferQueue_fuzzer.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -141,8 +141,8 @@ void BufferQueueFuzzer::invokeBlastBufferQueue() { CompositorTiming compTiming; sp<Fence> previousFence = new Fence(memfd_create("pfd", MFD_ALLOW_SEALING)); sp<Fence> gpuFence = new Fence(memfd_create("gfd", MFD_ALLOW_SEALING)); FrameEventHistoryStats frameStats(frameNumber, gpuFence, compTiming, mFdp.ConsumeIntegral<int64_t>(), FrameEventHistoryStats frameStats(frameNumber, mFdp.ConsumeIntegral<uint64_t>(), gpuFence, compTiming, mFdp.ConsumeIntegral<int64_t>(), mFdp.ConsumeIntegral<int64_t>()); std::vector<SurfaceControlStats> stats; sp<Fence> presentFence = new Fence(memfd_create("fd", MFD_ALLOW_SEALING)); Loading
libs/gui/include/gui/BLASTBufferQueue.h +2 −2 Original line number Diff line number Diff line Loading @@ -50,8 +50,8 @@ public: void onDisconnect() override EXCLUDES(mMutex); void addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps, FrameEventHistoryDelta* outDelta) override EXCLUDES(mMutex); void updateFrameTimestamps(uint64_t frameNumber, nsecs_t refreshStartTime, const sp<Fence>& gpuCompositionDoneFence, void updateFrameTimestamps(uint64_t frameNumber, uint64_t previousFrameNumber, nsecs_t refreshStartTime, const sp<Fence>& gpuCompositionDoneFence, const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence, CompositorTiming compositorTiming, nsecs_t latchTime, nsecs_t dequeueReadyTime) EXCLUDES(mMutex); Loading
libs/gui/include/gui/ITransactionCompletedListener.h +5 −2 Original line number Diff line number Diff line Loading @@ -95,15 +95,18 @@ public: status_t readFromParcel(const Parcel* input) override; FrameEventHistoryStats() = default; FrameEventHistoryStats(uint64_t fn, const sp<Fence>& gpuCompFence, CompositorTiming compTiming, FrameEventHistoryStats(uint64_t frameNumber, uint64_t previousFrameNumber, const sp<Fence>& gpuCompFence, CompositorTiming compTiming, nsecs_t refreshTime, nsecs_t dequeueReadyTime) : frameNumber(fn), : frameNumber(frameNumber), previousFrameNumber(previousFrameNumber), gpuCompositionDoneFence(gpuCompFence), compositorTiming(compTiming), refreshStartTime(refreshTime), dequeueReadyTime(dequeueReadyTime) {} uint64_t frameNumber; uint64_t previousFrameNumber; sp<Fence> gpuCompositionDoneFence; CompositorTiming compositorTiming; nsecs_t refreshStartTime; Loading