diff options
4 files changed, 20 insertions, 3 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 3744f8b0b8..17d5b9a38d 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4856,6 +4856,9 @@ void SurfaceFlinger::dumpAllLocked(const DumpArgs& args, std::string& result) co result.append(mScheduler->doDump() + "\n"); StringAppendF(&result, "+ Smart video mode: %s\n\n", mUseSmart90ForVideo ? "on" : "off"); result.append(mRefreshRateStats.doDump() + "\n"); + + result.append(mTimeStats->miniDump()); + result.append("\n"); } const Vector<sp<Layer>>& SurfaceFlinger::getLayerSortedByZForHwcDisplay(DisplayId displayId) { diff --git a/services/surfaceflinger/TimeStats/TimeStats.cpp b/services/surfaceflinger/TimeStats/TimeStats.cpp index 740099e350..c97a19b39b 100644 --- a/services/surfaceflinger/TimeStats/TimeStats.cpp +++ b/services/surfaceflinger/TimeStats/TimeStats.cpp @@ -67,6 +67,16 @@ void TimeStats::parseArgs(bool asProto, const Vector<String16>& args, std::strin } } +std::string TimeStats::miniDump() { + ATRACE_CALL(); + + std::string result = "TimeStats miniDump:\n"; + std::lock_guard<std::mutex> lock(mMutex); + android::base::StringAppendF(&result, "Number of tracked layers is %zu\n", + mTimeStatsTracker.size()); + return result; +} + void TimeStats::incrementTotalFrames() { if (!mEnabled.load()) return; @@ -252,7 +262,8 @@ void TimeStats::setPostTime(int32_t layerID, uint64_t frameNumber, const std::st postTime); std::lock_guard<std::mutex> lock(mMutex); - if (!mTimeStatsTracker.count(layerID) && layerNameIsValid(layerName)) { + if (!mTimeStatsTracker.count(layerID) && mTimeStatsTracker.size() < MAX_NUM_LAYER_RECORDS && + layerNameIsValid(layerName)) { mTimeStatsTracker[layerID].layerName = layerName; } if (!mTimeStatsTracker.count(layerID)) return; diff --git a/services/surfaceflinger/TimeStats/TimeStats.h b/services/surfaceflinger/TimeStats/TimeStats.h index d8c0786cd0..4e040a31b1 100644 --- a/services/surfaceflinger/TimeStats/TimeStats.h +++ b/services/surfaceflinger/TimeStats/TimeStats.h @@ -41,6 +41,7 @@ public: virtual void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) = 0; virtual bool isEnabled() = 0; + virtual std::string miniDump(); virtual void incrementTotalFrames() = 0; virtual void incrementMissedFrames() = 0; @@ -112,6 +113,7 @@ public: void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) override; bool isEnabled() override; + std::string miniDump() override; void incrementTotalFrames() override; void incrementMissedFrames() override; @@ -137,8 +139,6 @@ public: void recordRefreshRate(uint32_t fps, nsecs_t duration) override; void setPresentFenceGlobal(const std::shared_ptr<FenceTime>& presentFence) override; - // TODO(zzyiwei): Bound the timeStatsTracker with weighted LRU - // static const size_t MAX_NUM_LAYER_RECORDS = 200; static const size_t MAX_NUM_TIME_RECORDS = 64; private: @@ -159,6 +159,8 @@ private: std::unordered_map<int32_t, LayerRecord> mTimeStatsTracker; PowerTime mPowerTime; GlobalRecord mGlobalRecord; + + static const size_t MAX_NUM_LAYER_RECORDS = 200; }; } // namespace impl diff --git a/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h b/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h index 08fdb9d137..b1634a8da7 100644 --- a/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h +++ b/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h @@ -30,6 +30,7 @@ public: MOCK_METHOD3(parseArgs, void(bool, const Vector<String16>&, std::string&)); MOCK_METHOD0(isEnabled, bool()); + MOCK_METHOD0(miniDump, std::string()); MOCK_METHOD0(incrementTotalFrames, void()); MOCK_METHOD0(incrementMissedFrames, void()); MOCK_METHOD0(incrementClientCompositionFrames, void()); |