Loading services/surfaceflinger/Android.bp +5 −2 Original line number Diff line number Diff line Loading @@ -60,11 +60,14 @@ cc_defaults { ], static_libs: [ "libcompositionengine", "libperfetto_client_experimental", "librenderengine", "libserviceutils", "libtimestats", "libtrace_proto", "libvr_manager", "libvrflinger", "perfetto_src_tracing_ipc", ], header_libs: [ "android.hardware.graphics.composer@2.1-command-buffer", Loading @@ -73,8 +76,10 @@ cc_defaults { ], export_static_lib_headers: [ "libcompositionengine", "libperfetto_client_experimental", "librenderengine", "libserviceutils", "libtimestats", ], export_shared_lib_headers: [ "android.hardware.graphics.allocator@2.0", Loading Loading @@ -160,7 +165,6 @@ filegroup { "SurfaceFlinger.cpp", "SurfaceInterceptor.cpp", "SurfaceTracing.cpp", "TimeStats/TimeStats.cpp", "TransactionCompletedThread.cpp", ], } Loading Loading @@ -230,7 +234,6 @@ cc_binary { subdirs = [ "layerproto", "TimeStats/timestatsproto", "tests", ] Loading services/surfaceflinger/BufferLayer.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -314,12 +314,17 @@ bool BufferLayer::onPostComposition(const std::optional<DisplayId>& displayId, if (presentFence->isValid()) { mFlinger->mTimeStats->setPresentFence(layerID, mCurrentFrameNumber, presentFence); mFlinger->mTimeStats->traceFence(layerID, getCurrentBufferId(), mCurrentFrameNumber, presentFence, TimeStats::FrameEvent::PRESENT_FENCE); mFrameTracker.setActualPresentFence(std::shared_ptr<FenceTime>(presentFence)); } else if (displayId && mFlinger->getHwComposer().isConnected(*displayId)) { // The HWC doesn't support present fences, so use the refresh // timestamp instead. const nsecs_t actualPresentTime = mFlinger->getHwComposer().getRefreshTimestamp(*displayId); mFlinger->mTimeStats->setPresentTime(layerID, mCurrentFrameNumber, actualPresentTime); mFlinger->mTimeStats->traceTimestamp(layerID, getCurrentBufferId(), mCurrentFrameNumber, actualPresentTime, TimeStats::FrameEvent::PRESENT_FENCE); mFrameTracker.setActualPresentTime(actualPresentTime); } Loading services/surfaceflinger/BufferQueueLayer.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,14 @@ BufferQueueLayer::~BufferQueueLayer() { void BufferQueueLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { mConsumer->setReleaseFence(releaseFence); // Prevent tracing the same release multiple times. if (mPreviousFrameNumber != mPreviousReleasedFrameNumber) { mFlinger->mTimeStats->traceFence(getSequence(), mPreviousBufferId, mPreviousFrameNumber, std::make_shared<FenceTime>(releaseFence), TimeStats::FrameEvent::RELEASE_FENCE); mPreviousReleasedFrameNumber = mPreviousFrameNumber; } } void BufferQueueLayer::setTransformHint(uint32_t orientation) const { Loading Loading @@ -355,9 +363,15 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t mQueuedFrames--; } uint64_t bufferID = mQueueItems[0].mGraphicBuffer->getId(); mFlinger->mTimeStats->setAcquireFence(layerID, currentFrameNumber, mQueueItems[0].mFenceTime); mFlinger->mTimeStats->traceFence(layerID, bufferID, currentFrameNumber, mQueueItems[0].mFenceTime, TimeStats::FrameEvent::ACQUIRE_FENCE); mFlinger->mTimeStats->setLatchTime(layerID, currentFrameNumber, latchTime); mFlinger->mTimeStats->traceTimestamp(layerID, bufferID, currentFrameNumber, latchTime, TimeStats::FrameEvent::LATCH); mQueueItems.removeAt(0); } Loading @@ -373,6 +387,7 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t status_t BufferQueueLayer::updateActiveBuffer() { // update the active buffer mPreviousBufferId = getCurrentBufferId(); mActiveBuffer = mConsumer->getCurrentBuffer(&mActiveBufferSlot, &mActiveBufferFence); auto& layerCompositionState = getCompositionLayer()->editState().frontEnd; layerCompositionState.buffer = mActiveBuffer; Loading Loading @@ -413,6 +428,11 @@ void BufferQueueLayer::latchPerFrameState( // ----------------------------------------------------------------------- void BufferQueueLayer::onFrameAvailable(const BufferItem& item) { const int32_t layerID = getSequence(); mFlinger->mTimeStats->traceNewLayer(layerID, getName().c_str()); mFlinger->mTimeStats->traceTimestamp(layerID, item.mGraphicBuffer->getId(), item.mFrameNumber, systemTime(), TimeStats::FrameEvent::POST); ATRACE_CALL(); // Add this buffer from our internal queue tracker { // Autolock scope Loading services/surfaceflinger/BufferQueueLayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,9 @@ private: uint64_t mPreviousFrameNumber{0}; bool mUpdateTexImageFailed{false}; uint64_t mPreviousBufferId = 0; uint64_t mPreviousReleasedFrameNumber = 0; // Local copy of the queued contents of the incoming BufferQueue mutable Mutex mQueueItemLock; Condition mQueueItemCondition; Loading services/surfaceflinger/BufferStateLayer.cpp +20 −1 Original line number Diff line number Diff line Loading @@ -87,6 +87,14 @@ void BufferStateLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { break; } } // Prevent tracing the same release multiple times. if (mPreviousFrameNumber != mPreviousReleasedFrameNumber) { mFlinger->mTimeStats->traceFence(getSequence(), mPreviousBufferId, mPreviousFrameNumber, std::make_shared<FenceTime>(releaseFence), TimeStats::FrameEvent::RELEASE_FENCE); mPreviousReleasedFrameNumber = mPreviousFrameNumber; } } void BufferStateLayer::setTransformHint(uint32_t /*orientation*/) const { Loading Loading @@ -226,7 +234,11 @@ bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTi mCurrentState.modified = true; setTransactionFlags(eTransactionNeeded); mFlinger->mTimeStats->setPostTime(getSequence(), mFrameNumber, getName().c_str(), postTime); const int32_t layerID = getSequence(); mFlinger->mTimeStats->setPostTime(layerID, mFrameNumber, getName().c_str(), postTime); mFlinger->mTimeStats->traceNewLayer(layerID, getName().c_str()); mFlinger->mTimeStats->traceTimestamp(layerID, buffer->getId(), mFrameNumber, postTime, TimeStats::FrameEvent::POST); mCurrentState.desiredPresentTime = desiredPresentTime; if (mFlinger->mUseSmart90ForVideo) { Loading Loading @@ -561,8 +573,13 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse } } const uint64_t bufferID = getCurrentBufferId(); mFlinger->mTimeStats->setAcquireFence(layerID, mFrameNumber, getCurrentFenceTime()); mFlinger->mTimeStats->traceFence(layerID, bufferID, mFrameNumber, getCurrentFenceTime(), TimeStats::FrameEvent::ACQUIRE_FENCE); mFlinger->mTimeStats->setLatchTime(layerID, mFrameNumber, latchTime); mFlinger->mTimeStats->traceTimestamp(layerID, bufferID, mFrameNumber, latchTime, TimeStats::FrameEvent::LATCH); mCurrentStateModified = false; Loading @@ -576,6 +593,7 @@ status_t BufferStateLayer::updateActiveBuffer() { return BAD_VALUE; } mPreviousBufferId = getCurrentBufferId(); mActiveBuffer = s.buffer; mActiveBufferFence = s.acquireFence; auto& layerCompositionState = getCompositionLayer()->editState().frontEnd; Loading @@ -586,6 +604,7 @@ status_t BufferStateLayer::updateActiveBuffer() { status_t BufferStateLayer::updateFrameNumber(nsecs_t /*latchTime*/) { // TODO(marissaw): support frame history events mPreviousFrameNumber = mCurrentFrameNumber; mCurrentFrameNumber = mFrameNumber; return NO_ERROR; } Loading Loading
services/surfaceflinger/Android.bp +5 −2 Original line number Diff line number Diff line Loading @@ -60,11 +60,14 @@ cc_defaults { ], static_libs: [ "libcompositionengine", "libperfetto_client_experimental", "librenderengine", "libserviceutils", "libtimestats", "libtrace_proto", "libvr_manager", "libvrflinger", "perfetto_src_tracing_ipc", ], header_libs: [ "android.hardware.graphics.composer@2.1-command-buffer", Loading @@ -73,8 +76,10 @@ cc_defaults { ], export_static_lib_headers: [ "libcompositionengine", "libperfetto_client_experimental", "librenderengine", "libserviceutils", "libtimestats", ], export_shared_lib_headers: [ "android.hardware.graphics.allocator@2.0", Loading Loading @@ -160,7 +165,6 @@ filegroup { "SurfaceFlinger.cpp", "SurfaceInterceptor.cpp", "SurfaceTracing.cpp", "TimeStats/TimeStats.cpp", "TransactionCompletedThread.cpp", ], } Loading Loading @@ -230,7 +234,6 @@ cc_binary { subdirs = [ "layerproto", "TimeStats/timestatsproto", "tests", ] Loading
services/surfaceflinger/BufferLayer.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -314,12 +314,17 @@ bool BufferLayer::onPostComposition(const std::optional<DisplayId>& displayId, if (presentFence->isValid()) { mFlinger->mTimeStats->setPresentFence(layerID, mCurrentFrameNumber, presentFence); mFlinger->mTimeStats->traceFence(layerID, getCurrentBufferId(), mCurrentFrameNumber, presentFence, TimeStats::FrameEvent::PRESENT_FENCE); mFrameTracker.setActualPresentFence(std::shared_ptr<FenceTime>(presentFence)); } else if (displayId && mFlinger->getHwComposer().isConnected(*displayId)) { // The HWC doesn't support present fences, so use the refresh // timestamp instead. const nsecs_t actualPresentTime = mFlinger->getHwComposer().getRefreshTimestamp(*displayId); mFlinger->mTimeStats->setPresentTime(layerID, mCurrentFrameNumber, actualPresentTime); mFlinger->mTimeStats->traceTimestamp(layerID, getCurrentBufferId(), mCurrentFrameNumber, actualPresentTime, TimeStats::FrameEvent::PRESENT_FENCE); mFrameTracker.setActualPresentTime(actualPresentTime); } Loading
services/surfaceflinger/BufferQueueLayer.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,14 @@ BufferQueueLayer::~BufferQueueLayer() { void BufferQueueLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { mConsumer->setReleaseFence(releaseFence); // Prevent tracing the same release multiple times. if (mPreviousFrameNumber != mPreviousReleasedFrameNumber) { mFlinger->mTimeStats->traceFence(getSequence(), mPreviousBufferId, mPreviousFrameNumber, std::make_shared<FenceTime>(releaseFence), TimeStats::FrameEvent::RELEASE_FENCE); mPreviousReleasedFrameNumber = mPreviousFrameNumber; } } void BufferQueueLayer::setTransformHint(uint32_t orientation) const { Loading Loading @@ -355,9 +363,15 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t mQueuedFrames--; } uint64_t bufferID = mQueueItems[0].mGraphicBuffer->getId(); mFlinger->mTimeStats->setAcquireFence(layerID, currentFrameNumber, mQueueItems[0].mFenceTime); mFlinger->mTimeStats->traceFence(layerID, bufferID, currentFrameNumber, mQueueItems[0].mFenceTime, TimeStats::FrameEvent::ACQUIRE_FENCE); mFlinger->mTimeStats->setLatchTime(layerID, currentFrameNumber, latchTime); mFlinger->mTimeStats->traceTimestamp(layerID, bufferID, currentFrameNumber, latchTime, TimeStats::FrameEvent::LATCH); mQueueItems.removeAt(0); } Loading @@ -373,6 +387,7 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t status_t BufferQueueLayer::updateActiveBuffer() { // update the active buffer mPreviousBufferId = getCurrentBufferId(); mActiveBuffer = mConsumer->getCurrentBuffer(&mActiveBufferSlot, &mActiveBufferFence); auto& layerCompositionState = getCompositionLayer()->editState().frontEnd; layerCompositionState.buffer = mActiveBuffer; Loading Loading @@ -413,6 +428,11 @@ void BufferQueueLayer::latchPerFrameState( // ----------------------------------------------------------------------- void BufferQueueLayer::onFrameAvailable(const BufferItem& item) { const int32_t layerID = getSequence(); mFlinger->mTimeStats->traceNewLayer(layerID, getName().c_str()); mFlinger->mTimeStats->traceTimestamp(layerID, item.mGraphicBuffer->getId(), item.mFrameNumber, systemTime(), TimeStats::FrameEvent::POST); ATRACE_CALL(); // Add this buffer from our internal queue tracker { // Autolock scope Loading
services/surfaceflinger/BufferQueueLayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,9 @@ private: uint64_t mPreviousFrameNumber{0}; bool mUpdateTexImageFailed{false}; uint64_t mPreviousBufferId = 0; uint64_t mPreviousReleasedFrameNumber = 0; // Local copy of the queued contents of the incoming BufferQueue mutable Mutex mQueueItemLock; Condition mQueueItemCondition; Loading
services/surfaceflinger/BufferStateLayer.cpp +20 −1 Original line number Diff line number Diff line Loading @@ -87,6 +87,14 @@ void BufferStateLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { break; } } // Prevent tracing the same release multiple times. if (mPreviousFrameNumber != mPreviousReleasedFrameNumber) { mFlinger->mTimeStats->traceFence(getSequence(), mPreviousBufferId, mPreviousFrameNumber, std::make_shared<FenceTime>(releaseFence), TimeStats::FrameEvent::RELEASE_FENCE); mPreviousReleasedFrameNumber = mPreviousFrameNumber; } } void BufferStateLayer::setTransformHint(uint32_t /*orientation*/) const { Loading Loading @@ -226,7 +234,11 @@ bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTi mCurrentState.modified = true; setTransactionFlags(eTransactionNeeded); mFlinger->mTimeStats->setPostTime(getSequence(), mFrameNumber, getName().c_str(), postTime); const int32_t layerID = getSequence(); mFlinger->mTimeStats->setPostTime(layerID, mFrameNumber, getName().c_str(), postTime); mFlinger->mTimeStats->traceNewLayer(layerID, getName().c_str()); mFlinger->mTimeStats->traceTimestamp(layerID, buffer->getId(), mFrameNumber, postTime, TimeStats::FrameEvent::POST); mCurrentState.desiredPresentTime = desiredPresentTime; if (mFlinger->mUseSmart90ForVideo) { Loading Loading @@ -561,8 +573,13 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse } } const uint64_t bufferID = getCurrentBufferId(); mFlinger->mTimeStats->setAcquireFence(layerID, mFrameNumber, getCurrentFenceTime()); mFlinger->mTimeStats->traceFence(layerID, bufferID, mFrameNumber, getCurrentFenceTime(), TimeStats::FrameEvent::ACQUIRE_FENCE); mFlinger->mTimeStats->setLatchTime(layerID, mFrameNumber, latchTime); mFlinger->mTimeStats->traceTimestamp(layerID, bufferID, mFrameNumber, latchTime, TimeStats::FrameEvent::LATCH); mCurrentStateModified = false; Loading @@ -576,6 +593,7 @@ status_t BufferStateLayer::updateActiveBuffer() { return BAD_VALUE; } mPreviousBufferId = getCurrentBufferId(); mActiveBuffer = s.buffer; mActiveBufferFence = s.acquireFence; auto& layerCompositionState = getCompositionLayer()->editState().frontEnd; Loading @@ -586,6 +604,7 @@ status_t BufferStateLayer::updateActiveBuffer() { status_t BufferStateLayer::updateFrameNumber(nsecs_t /*latchTime*/) { // TODO(marissaw): support frame history events mPreviousFrameNumber = mCurrentFrameNumber; mCurrentFrameNumber = mFrameNumber; return NO_ERROR; } Loading