diff options
| author | 2019-04-22 19:00:02 -0700 | |
|---|---|---|
| committer | 2019-04-22 20:07:29 -0700 | |
| commit | 7eb58b7f854d825b78daa685a7c6738cc4a76f18 (patch) | |
| tree | 14ac730ec49523425e437028ac9a1261e81e1fb5 | |
| parent | 8cd204d6cd66f581e10ce574ba72faf1ebf6b592 (diff) | |
TimeStats: bound the layer records and dump in SF dumpsys
Fixes: 131121064
Test: all SF tests
Change-Id: Ief641dfb4f69e5099a7fbf42dcdeecc5eb3d2bf9
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()); |