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

Commit 0dca4864 authored by Andy Yu's avatar Andy Yu
Browse files

[SF] Add trace and dump for Game frame rate overrides

To discern the source of the frame rate vote, this change
adds trace in LayerHistory when determining the layer vote.

Also, dumping information of game mode and game default frame rate
overrides in SurfaceFlinger dump for debuggin purposes.

Bug: 324125833
Test: atest LayerHistoryTest
Change-Id: Ice628b7f421f6402fbb1e33413966c503bf5eaec
parent 50229b4a
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
@@ -300,12 +300,26 @@ void LayerHistory::partitionLayers(nsecs_t now) {

                if (gameModeFrameRateOverride.isValid()) {
                    info->setLayerVote({gameFrameRateOverrideVoteType, gameModeFrameRateOverride});
                    ATRACE_FORMAT_INSTANT("GameModeFrameRateOverride");
                    if (CC_UNLIKELY(mTraceEnabled)) {
                        trace(*info, gameFrameRateOverrideVoteType,
                              gameModeFrameRateOverride.getIntValue());
                    }
                } else if (frameRate.isValid()) {
                    info->setLayerVote({setFrameRateVoteType, frameRate.vote.rate,
                                        frameRate.vote.seamlessness, frameRate.category});
                    if (CC_UNLIKELY(mTraceEnabled)) {
                        trace(*info, gameFrameRateOverrideVoteType,
                              frameRate.vote.rate.getIntValue());
                    }
                } else if (gameDefaultFrameRateOverride.isValid()) {
                    info->setLayerVote(
                            {gameFrameRateOverrideVoteType, gameDefaultFrameRateOverride});
                    ATRACE_FORMAT_INSTANT("GameDefaultFrameRateOverride");
                    if (CC_UNLIKELY(mTraceEnabled)) {
                        trace(*info, gameFrameRateOverrideVoteType,
                              gameDefaultFrameRateOverride.getIntValue());
                    }
                } else {
                    info->resetLayerVote();
                }
@@ -341,9 +355,18 @@ void LayerHistory::clear() {

std::string LayerHistory::dump() const {
    std::lock_guard lock(mLock);
    return base::StringPrintf("{size=%zu, active=%zu}",
    return base::StringPrintf("{size=%zu, active=%zu}\n\tGameFrameRateOverrides=\n\t\t%s",
                              mActiveLayerInfos.size() + mInactiveLayerInfos.size(),
                              mActiveLayerInfos.size());
                              mActiveLayerInfos.size(), dumpGameFrameRateOverridesLocked().c_str());
}

std::string LayerHistory::dumpGameFrameRateOverridesLocked() const {
    std::string overridesString = "(uid, gameModeOverride, gameDefaultOverride)=";
    for (auto it = mGameFrameRateOverride.begin(); it != mGameFrameRateOverride.end(); ++it) {
        base::StringAppendF(&overridesString, "{%u, %d %d} ", it->first,
                            it->second.first.getIntValue(), it->second.second.getIntValue());
    }
    return overridesString;
}

float LayerHistory::getLayerFramerate(nsecs_t now, int32_t id) const {
+2 −0
Original line number Diff line number Diff line
@@ -108,6 +108,8 @@ private:
    // keyed by id as returned from Layer::getSequence()
    using LayerInfos = std::unordered_map<int32_t, LayerPair>;

    std::string dumpGameFrameRateOverridesLocked() const REQUIRES(mLock);

    // Iterates over layers maps moving all active layers to mActiveLayerInfos and all inactive
    // layers to mInactiveLayerInfos.
    // worst case time complexity is O(2 * inactive + active)