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

Commit 472c55f7 authored by Steven Thomas's avatar Steven Thomas Committed by Automerger Merge Worker
Browse files

Merge "Give touch boost higher priority than idle detection" into rvc-dev am: 0abfdcad

Change-Id: I4c2c5cf7b7b91bfc78ae0224a51be3508d6bcffc
parents d5523f96 0abfdcad
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -97,8 +97,8 @@ std::pair<nsecs_t, nsecs_t> RefreshRateConfigs::getDisplayFrames(nsecs_t layerPe
    return {displayFramesQuot, displayFramesRem};
}

const RefreshRate& RefreshRateConfigs::getRefreshRateForContentV2(
        const std::vector<LayerRequirement>& layers, bool touchActive,
const RefreshRate& RefreshRateConfigs::getBestRefreshRate(
        const std::vector<LayerRequirement>& layers, bool touchActive, bool idle,
        bool* touchConsidered) const {
    ATRACE_CALL();
    ALOGV("getRefreshRateForContent %zu layers", layers.size());
@@ -106,14 +106,6 @@ const RefreshRate& RefreshRateConfigs::getRefreshRateForContentV2(
    *touchConsidered = false;
    std::lock_guard lock(mLock);

    // If there are not layers, there is not content detection, so return the current
    // refresh rate.
    if (layers.empty()) {
        *touchConsidered = touchActive;
        return touchActive ? getMaxRefreshRateByPolicyLocked()
                           : getCurrentRefreshRateByPolicyLocked();
    }

    int noVoteLayers = 0;
    int minVoteLayers = 0;
    int maxVoteLayers = 0;
@@ -143,6 +135,14 @@ const RefreshRate& RefreshRateConfigs::getRefreshRateForContentV2(
        return getMaxRefreshRateByPolicyLocked();
    }

    if (!touchActive && idle) {
        return getMinRefreshRateByPolicyLocked();
    }

    if (layers.empty()) {
        return getCurrentRefreshRateByPolicyLocked();
    }

    // Only if all layers want Min we should return Min
    if (noVoteLayers + minVoteLayers == layers.size()) {
        return getMinRefreshRateByPolicyLocked();
+8 −6
Original line number Diff line number Diff line
@@ -212,12 +212,14 @@ public:
    const RefreshRate& getRefreshRateForContent(const std::vector<LayerRequirement>& layers) const
            EXCLUDES(mLock);

    // Returns the refresh rate that fits best to the given layers. This function also gets a
    // boolean flag that indicates whether user touched the screen recently to be factored in when
    // choosing the refresh rate and returns whether the refresh rate was chosen as a result of
    // a touch event.
    const RefreshRate& getRefreshRateForContentV2(const std::vector<LayerRequirement>& layers,
                                                  bool touchActive, bool* touchConsidered) const
    // Returns the refresh rate that fits best to the given layers.
    //   layers - The layer requirements to consider.
    //   touchActive - Whether the user touched the screen recently. Used to apply touch boost.
    //   idle - True if the system hasn't seen any buffers posted to layers recently.
    //   touchConsidered - An output param that tells the caller whether the refresh rate was chosen
    //                     based on touch boost.
    const RefreshRate& getBestRefreshRate(const std::vector<LayerRequirement>& layers,
                                          bool touchActive, bool idle, bool* touchConsidered) const
            EXCLUDES(mLock);

    // Returns all the refresh rates supported by the device. This won't change at runtime.
+13 −15
Original line number Diff line number Diff line
@@ -469,7 +469,7 @@ void Scheduler::notifyTouchEvent() {
    // that is currently on top. b/142507166 will give us this capability.
    std::lock_guard<std::mutex> lock(mFeatureStateLock);
    if (mLayerHistory) {
        // Layer History will be cleared based on RefreshRateConfigs::getRefreshRateForContentV2
        // Layer History will be cleared based on RefreshRateConfigs::getBestRefreshRate

        mTouchTimer->reset();

@@ -582,19 +582,20 @@ HwcConfigIndexType Scheduler::calculateRefreshRateConfigIndexType() {
        return mRefreshRateConfigs.getMaxRefreshRateByPolicy().getConfigId();
    }

    const bool touchActive = mTouchTimer && mFeatures.touch == TouchState::Active;
    const bool idle = mIdleTimer && mFeatures.idleTimer == TimerState::Expired;

    if (!mUseContentDetectionV2) {
        // As long as touch is active we want to be in performance mode.
        if (mTouchTimer && mFeatures.touch == TouchState::Active) {
        if (touchActive) {
            return mRefreshRateConfigs.getMaxRefreshRateByPolicy().getConfigId();
        }
    }

        // If timer has expired as it means there is no new content on the screen.
    if (mIdleTimer && mFeatures.idleTimer == TimerState::Expired) {
        if (idle) {
            return mRefreshRateConfigs.getMinRefreshRateByPolicy().getConfigId();
        }

    if (!mUseContentDetectionV2) {
        // If content detection is off we choose performance as we don't know the content fps.
        if (mFeatures.contentDetectionV1 == ContentDetectionState::Off) {
            // NOTE: V1 always calls this, but this is not a default behavior for V2.
@@ -607,11 +608,8 @@ HwcConfigIndexType Scheduler::calculateRefreshRateConfigIndexType() {
    }

    bool touchConsidered;
    const auto& ret =
            mRefreshRateConfigs
                    .getRefreshRateForContentV2(mFeatures.contentRequirements,
                                                mTouchTimer &&
                                                        mFeatures.touch == TouchState::Active,
    const auto& ret = mRefreshRateConfigs
                              .getBestRefreshRate(mFeatures.contentRequirements, touchActive, idle,
                                                  &touchConsidered)
                              .getConfigId();
    if (touchConsidered) {
+260 −202

File changed.

Preview size limit exceeded, changes collapsed.