Loading services/surfaceflinger/SurfaceFlinger.cpp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -4885,6 +4885,9 @@ void SurfaceFlinger::dumpAllLocked(const DumpArgs& args, std::string& result) co result.append(mScheduler->doDump() + "\n"); result.append(mScheduler->doDump() + "\n"); StringAppendF(&result, "+ Smart video mode: %s\n\n", mUseSmart90ForVideo ? "on" : "off"); StringAppendF(&result, "+ Smart video mode: %s\n\n", mUseSmart90ForVideo ? "on" : "off"); result.append(mRefreshRateStats.doDump() + "\n"); result.append(mRefreshRateStats.doDump() + "\n"); result.append(mTimeStats->miniDump()); result.append("\n"); } } const Vector<sp<Layer>>& SurfaceFlinger::getLayerSortedByZForHwcDisplay(DisplayId displayId) { const Vector<sp<Layer>>& SurfaceFlinger::getLayerSortedByZForHwcDisplay(DisplayId displayId) { Loading services/surfaceflinger/TimeStats/TimeStats.cpp +12 −1 Original line number Original line Diff line number Diff line Loading @@ -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() { void TimeStats::incrementTotalFrames() { if (!mEnabled.load()) return; if (!mEnabled.load()) return; Loading Loading @@ -252,7 +262,8 @@ void TimeStats::setPostTime(int32_t layerID, uint64_t frameNumber, const std::st postTime); postTime); std::lock_guard<std::mutex> lock(mMutex); 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; mTimeStatsTracker[layerID].layerName = layerName; } } if (!mTimeStatsTracker.count(layerID)) return; if (!mTimeStatsTracker.count(layerID)) return; Loading services/surfaceflinger/TimeStats/TimeStats.h +4 −2 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ public: virtual void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) = 0; virtual void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) = 0; virtual bool isEnabled() = 0; virtual bool isEnabled() = 0; virtual std::string miniDump(); virtual void incrementTotalFrames() = 0; virtual void incrementTotalFrames() = 0; virtual void incrementMissedFrames() = 0; virtual void incrementMissedFrames() = 0; Loading Loading @@ -112,6 +113,7 @@ public: void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) override; void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) override; bool isEnabled() override; bool isEnabled() override; std::string miniDump() override; void incrementTotalFrames() override; void incrementTotalFrames() override; void incrementMissedFrames() override; void incrementMissedFrames() override; Loading @@ -137,8 +139,6 @@ public: void recordRefreshRate(uint32_t fps, nsecs_t duration) override; void recordRefreshRate(uint32_t fps, nsecs_t duration) override; void setPresentFenceGlobal(const std::shared_ptr<FenceTime>& presentFence) 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; static const size_t MAX_NUM_TIME_RECORDS = 64; private: private: Loading @@ -159,6 +159,8 @@ private: std::unordered_map<int32_t, LayerRecord> mTimeStatsTracker; std::unordered_map<int32_t, LayerRecord> mTimeStatsTracker; PowerTime mPowerTime; PowerTime mPowerTime; GlobalRecord mGlobalRecord; GlobalRecord mGlobalRecord; static const size_t MAX_NUM_LAYER_RECORDS = 200; }; }; } // namespace impl } // namespace impl Loading services/surfaceflinger/tests/unittests/mock/MockTimeStats.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ public: MOCK_METHOD3(parseArgs, void(bool, const Vector<String16>&, std::string&)); MOCK_METHOD3(parseArgs, void(bool, const Vector<String16>&, std::string&)); MOCK_METHOD0(isEnabled, bool()); MOCK_METHOD0(isEnabled, bool()); MOCK_METHOD0(miniDump, std::string()); MOCK_METHOD0(incrementTotalFrames, void()); MOCK_METHOD0(incrementTotalFrames, void()); MOCK_METHOD0(incrementMissedFrames, void()); MOCK_METHOD0(incrementMissedFrames, void()); MOCK_METHOD0(incrementClientCompositionFrames, void()); MOCK_METHOD0(incrementClientCompositionFrames, void()); Loading Loading
services/surfaceflinger/SurfaceFlinger.cpp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -4885,6 +4885,9 @@ void SurfaceFlinger::dumpAllLocked(const DumpArgs& args, std::string& result) co result.append(mScheduler->doDump() + "\n"); result.append(mScheduler->doDump() + "\n"); StringAppendF(&result, "+ Smart video mode: %s\n\n", mUseSmart90ForVideo ? "on" : "off"); StringAppendF(&result, "+ Smart video mode: %s\n\n", mUseSmart90ForVideo ? "on" : "off"); result.append(mRefreshRateStats.doDump() + "\n"); result.append(mRefreshRateStats.doDump() + "\n"); result.append(mTimeStats->miniDump()); result.append("\n"); } } const Vector<sp<Layer>>& SurfaceFlinger::getLayerSortedByZForHwcDisplay(DisplayId displayId) { const Vector<sp<Layer>>& SurfaceFlinger::getLayerSortedByZForHwcDisplay(DisplayId displayId) { Loading
services/surfaceflinger/TimeStats/TimeStats.cpp +12 −1 Original line number Original line Diff line number Diff line Loading @@ -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() { void TimeStats::incrementTotalFrames() { if (!mEnabled.load()) return; if (!mEnabled.load()) return; Loading Loading @@ -252,7 +262,8 @@ void TimeStats::setPostTime(int32_t layerID, uint64_t frameNumber, const std::st postTime); postTime); std::lock_guard<std::mutex> lock(mMutex); 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; mTimeStatsTracker[layerID].layerName = layerName; } } if (!mTimeStatsTracker.count(layerID)) return; if (!mTimeStatsTracker.count(layerID)) return; Loading
services/surfaceflinger/TimeStats/TimeStats.h +4 −2 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ public: virtual void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) = 0; virtual void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) = 0; virtual bool isEnabled() = 0; virtual bool isEnabled() = 0; virtual std::string miniDump(); virtual void incrementTotalFrames() = 0; virtual void incrementTotalFrames() = 0; virtual void incrementMissedFrames() = 0; virtual void incrementMissedFrames() = 0; Loading Loading @@ -112,6 +113,7 @@ public: void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) override; void parseArgs(bool asProto, const Vector<String16>& args, std::string& result) override; bool isEnabled() override; bool isEnabled() override; std::string miniDump() override; void incrementTotalFrames() override; void incrementTotalFrames() override; void incrementMissedFrames() override; void incrementMissedFrames() override; Loading @@ -137,8 +139,6 @@ public: void recordRefreshRate(uint32_t fps, nsecs_t duration) override; void recordRefreshRate(uint32_t fps, nsecs_t duration) override; void setPresentFenceGlobal(const std::shared_ptr<FenceTime>& presentFence) 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; static const size_t MAX_NUM_TIME_RECORDS = 64; private: private: Loading @@ -159,6 +159,8 @@ private: std::unordered_map<int32_t, LayerRecord> mTimeStatsTracker; std::unordered_map<int32_t, LayerRecord> mTimeStatsTracker; PowerTime mPowerTime; PowerTime mPowerTime; GlobalRecord mGlobalRecord; GlobalRecord mGlobalRecord; static const size_t MAX_NUM_LAYER_RECORDS = 200; }; }; } // namespace impl } // namespace impl Loading
services/surfaceflinger/tests/unittests/mock/MockTimeStats.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ public: MOCK_METHOD3(parseArgs, void(bool, const Vector<String16>&, std::string&)); MOCK_METHOD3(parseArgs, void(bool, const Vector<String16>&, std::string&)); MOCK_METHOD0(isEnabled, bool()); MOCK_METHOD0(isEnabled, bool()); MOCK_METHOD0(miniDump, std::string()); MOCK_METHOD0(incrementTotalFrames, void()); MOCK_METHOD0(incrementTotalFrames, void()); MOCK_METHOD0(incrementMissedFrames, void()); MOCK_METHOD0(incrementMissedFrames, void()); MOCK_METHOD0(incrementClientCompositionFrames, void()); MOCK_METHOD0(incrementClientCompositionFrames, void()); Loading