Loading libs/hwui/renderthread/CanvasContext.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -761,8 +761,8 @@ void CanvasContext::draw(bool solelyTextureViewUpdates) { if (mExpectSurfaceStats) { reportMetricsWithPresentTime(); { // acquire lock std::lock_guard lock(mLast4FrameMetricsInfosMutex); FrameMetricsInfo& next = mLast4FrameMetricsInfos.next(); std::lock_guard lock(mLastFrameMetricsInfosMutex); FrameMetricsInfo& next = mLastFrameMetricsInfos.next(); next.frameInfo = mCurrentFrameInfo; next.frameNumber = frameCompleteNr; next.surfaceId = mSurfaceControlGenerationId; Loading Loading @@ -816,12 +816,12 @@ void CanvasContext::reportMetricsWithPresentTime() { int32_t surfaceControlId; { // acquire lock std::scoped_lock lock(mLast4FrameMetricsInfosMutex); if (mLast4FrameMetricsInfos.size() != mLast4FrameMetricsInfos.capacity()) { std::scoped_lock lock(mLastFrameMetricsInfosMutex); if (mLastFrameMetricsInfos.size() != mLastFrameMetricsInfos.capacity()) { // Not enough frames yet return; } auto frameMetricsInfo = mLast4FrameMetricsInfos.front(); auto frameMetricsInfo = mLastFrameMetricsInfos.front(); forthBehind = frameMetricsInfo.frameInfo; frameNumber = frameMetricsInfo.frameNumber; surfaceControlId = frameMetricsInfo.surfaceId; Loading Loading @@ -869,12 +869,12 @@ void CanvasContext::removeFrameMetricsObserver(FrameMetricsObserver* observer) { } } FrameInfo* CanvasContext::getFrameInfoFromLast4(uint64_t frameNumber, uint32_t surfaceControlId) { std::scoped_lock lock(mLast4FrameMetricsInfosMutex); for (size_t i = 0; i < mLast4FrameMetricsInfos.size(); i++) { if (mLast4FrameMetricsInfos[i].frameNumber == frameNumber && mLast4FrameMetricsInfos[i].surfaceId == surfaceControlId) { return mLast4FrameMetricsInfos[i].frameInfo; FrameInfo* CanvasContext::getFrameInfoFromLastFew(uint64_t frameNumber, uint32_t surfaceControlId) { std::scoped_lock lock(mLastFrameMetricsInfosMutex); for (size_t i = 0; i < mLastFrameMetricsInfos.size(); i++) { if (mLastFrameMetricsInfos[i].frameNumber == frameNumber && mLastFrameMetricsInfos[i].surfaceId == surfaceControlId) { return mLastFrameMetricsInfos[i].frameInfo; } } Loading @@ -894,7 +894,7 @@ void CanvasContext::onSurfaceStatsAvailable(void* context, int32_t surfaceContro } uint64_t frameNumber = functions.getFrameNumberFunc(stats); FrameInfo* frameInfo = instance->getFrameInfoFromLast4(frameNumber, surfaceControlId); FrameInfo* frameInfo = instance->getFrameInfoFromLastFew(frameNumber, surfaceControlId); if (frameInfo != nullptr) { std::scoped_lock lock(instance->mFrameInfoMutex); Loading libs/hwui/renderthread/CanvasContext.h +5 −5 Original line number Diff line number Diff line Loading @@ -260,7 +260,7 @@ private: void finishFrame(FrameInfo* frameInfo); /** * Invoke 'reportFrameMetrics' on the last frame stored in 'mLast4FrameInfos'. * Invoke 'reportFrameMetrics' on the last frame stored in 'mLastFrameInfos'. * Populate the 'presentTime' field before calling. */ void reportMetricsWithPresentTime(); Loading @@ -271,7 +271,7 @@ private: int32_t surfaceId; }; FrameInfo* getFrameInfoFromLast4(uint64_t frameNumber, uint32_t surfaceControlId); FrameInfo* getFrameInfoFromLastFew(uint64_t frameNumber, uint32_t surfaceControlId); Frame getFrame(); Loading Loading @@ -336,9 +336,9 @@ private: // List of data of frames that are awaiting GPU completion reporting. Used to compute frame // metrics and determine whether or not to report the metrics. RingBuffer<FrameMetricsInfo, 4> mLast4FrameMetricsInfos GUARDED_BY(mLast4FrameMetricsInfosMutex); std::mutex mLast4FrameMetricsInfosMutex; RingBuffer<FrameMetricsInfo, 6> mLastFrameMetricsInfos GUARDED_BY(mLastFrameMetricsInfosMutex); std::mutex mLastFrameMetricsInfosMutex; std::string mName; JankTracker mJankTracker; Loading Loading
libs/hwui/renderthread/CanvasContext.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -761,8 +761,8 @@ void CanvasContext::draw(bool solelyTextureViewUpdates) { if (mExpectSurfaceStats) { reportMetricsWithPresentTime(); { // acquire lock std::lock_guard lock(mLast4FrameMetricsInfosMutex); FrameMetricsInfo& next = mLast4FrameMetricsInfos.next(); std::lock_guard lock(mLastFrameMetricsInfosMutex); FrameMetricsInfo& next = mLastFrameMetricsInfos.next(); next.frameInfo = mCurrentFrameInfo; next.frameNumber = frameCompleteNr; next.surfaceId = mSurfaceControlGenerationId; Loading Loading @@ -816,12 +816,12 @@ void CanvasContext::reportMetricsWithPresentTime() { int32_t surfaceControlId; { // acquire lock std::scoped_lock lock(mLast4FrameMetricsInfosMutex); if (mLast4FrameMetricsInfos.size() != mLast4FrameMetricsInfos.capacity()) { std::scoped_lock lock(mLastFrameMetricsInfosMutex); if (mLastFrameMetricsInfos.size() != mLastFrameMetricsInfos.capacity()) { // Not enough frames yet return; } auto frameMetricsInfo = mLast4FrameMetricsInfos.front(); auto frameMetricsInfo = mLastFrameMetricsInfos.front(); forthBehind = frameMetricsInfo.frameInfo; frameNumber = frameMetricsInfo.frameNumber; surfaceControlId = frameMetricsInfo.surfaceId; Loading Loading @@ -869,12 +869,12 @@ void CanvasContext::removeFrameMetricsObserver(FrameMetricsObserver* observer) { } } FrameInfo* CanvasContext::getFrameInfoFromLast4(uint64_t frameNumber, uint32_t surfaceControlId) { std::scoped_lock lock(mLast4FrameMetricsInfosMutex); for (size_t i = 0; i < mLast4FrameMetricsInfos.size(); i++) { if (mLast4FrameMetricsInfos[i].frameNumber == frameNumber && mLast4FrameMetricsInfos[i].surfaceId == surfaceControlId) { return mLast4FrameMetricsInfos[i].frameInfo; FrameInfo* CanvasContext::getFrameInfoFromLastFew(uint64_t frameNumber, uint32_t surfaceControlId) { std::scoped_lock lock(mLastFrameMetricsInfosMutex); for (size_t i = 0; i < mLastFrameMetricsInfos.size(); i++) { if (mLastFrameMetricsInfos[i].frameNumber == frameNumber && mLastFrameMetricsInfos[i].surfaceId == surfaceControlId) { return mLastFrameMetricsInfos[i].frameInfo; } } Loading @@ -894,7 +894,7 @@ void CanvasContext::onSurfaceStatsAvailable(void* context, int32_t surfaceContro } uint64_t frameNumber = functions.getFrameNumberFunc(stats); FrameInfo* frameInfo = instance->getFrameInfoFromLast4(frameNumber, surfaceControlId); FrameInfo* frameInfo = instance->getFrameInfoFromLastFew(frameNumber, surfaceControlId); if (frameInfo != nullptr) { std::scoped_lock lock(instance->mFrameInfoMutex); Loading
libs/hwui/renderthread/CanvasContext.h +5 −5 Original line number Diff line number Diff line Loading @@ -260,7 +260,7 @@ private: void finishFrame(FrameInfo* frameInfo); /** * Invoke 'reportFrameMetrics' on the last frame stored in 'mLast4FrameInfos'. * Invoke 'reportFrameMetrics' on the last frame stored in 'mLastFrameInfos'. * Populate the 'presentTime' field before calling. */ void reportMetricsWithPresentTime(); Loading @@ -271,7 +271,7 @@ private: int32_t surfaceId; }; FrameInfo* getFrameInfoFromLast4(uint64_t frameNumber, uint32_t surfaceControlId); FrameInfo* getFrameInfoFromLastFew(uint64_t frameNumber, uint32_t surfaceControlId); Frame getFrame(); Loading Loading @@ -336,9 +336,9 @@ private: // List of data of frames that are awaiting GPU completion reporting. Used to compute frame // metrics and determine whether or not to report the metrics. RingBuffer<FrameMetricsInfo, 4> mLast4FrameMetricsInfos GUARDED_BY(mLast4FrameMetricsInfosMutex); std::mutex mLast4FrameMetricsInfosMutex; RingBuffer<FrameMetricsInfo, 6> mLastFrameMetricsInfos GUARDED_BY(mLastFrameMetricsInfosMutex); std::mutex mLastFrameMetricsInfosMutex; std::string mName; JankTracker mJankTracker; Loading