Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7eb58b7f authored by Yiwei Zhang's avatar Yiwei Zhang
Browse files

TimeStats: bound the layer records and dump in SF dumpsys

Fixes: 131121064
Test: all SF tests
Change-Id: Ief641dfb4f69e5099a7fbf42dcdeecc5eb3d2bf9
parent 8cd204d6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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) {
+12 −1
Original line number Diff line number Diff line
@@ -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;
+4 −2
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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());