summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yiwei Zhang <zzyiwei@google.com> 2019-04-22 19:00:02 -0700
committer Yiwei Zhang <zzyiwei@google.com> 2019-04-22 20:07:29 -0700
commit7eb58b7f854d825b78daa685a7c6738cc4a76f18 (patch)
tree14ac730ec49523425e437028ac9a1261e81e1fb5
parent8cd204d6cd66f581e10ce574ba72faf1ebf6b592 (diff)
TimeStats: bound the layer records and dump in SF dumpsys
Fixes: 131121064 Test: all SF tests Change-Id: Ief641dfb4f69e5099a7fbf42dcdeecc5eb3d2bf9
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp3
-rw-r--r--services/surfaceflinger/TimeStats/TimeStats.cpp13
-rw-r--r--services/surfaceflinger/TimeStats/TimeStats.h6
-rw-r--r--services/surfaceflinger/tests/unittests/mock/MockTimeStats.h1
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());