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

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

Merge "With content detection off, prefer default frame rate" into rvc-dev am: 98b789db

Change-Id: I14db68a1dda34e27b6bd594904a34bf295dd9f75
parents 5a5f55a4 98b789db
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -140,8 +140,8 @@ const RefreshRate& RefreshRateConfigs::getBestRefreshRate(
        return getMinRefreshRateByPolicyLocked();
        return getMinRefreshRateByPolicyLocked();
    }
    }


    if (layers.empty()) {
    if (layers.empty() || noVoteLayers == layers.size()) {
        return getCurrentRefreshRateByPolicyLocked();
        return getMaxRefreshRateByPolicyLocked();
    }
    }


    // Only if all layers want Min we should return Min
    // Only if all layers want Min we should return Min
+20 −25
Original line number Original line Diff line number Diff line
@@ -385,38 +385,33 @@ nsecs_t Scheduler::getDispSyncExpectedPresentTime(nsecs_t now) {
void Scheduler::registerLayer(Layer* layer) {
void Scheduler::registerLayer(Layer* layer) {
    if (!mLayerHistory) return;
    if (!mLayerHistory) return;


    // If the content detection feature is off, all layers are registered at NoVote. We still
    const auto minFps = mRefreshRateConfigs.getMinRefreshRate().getFps();
    // keep the layer history, since we use it for other features (like Frame Rate API), so layers
    const auto maxFps = mRefreshRateConfigs.getMaxRefreshRate().getFps();
    // still need to be registered.
    if (!mUseContentDetection) {
        mLayerHistory->registerLayer(layer, mRefreshRateConfigs.getMinRefreshRate().getFps(),
                                     mRefreshRateConfigs.getMaxRefreshRate().getFps(),
                                     scheduler::LayerHistory::LayerVoteType::NoVote);
        return;
    }


    // In V1 of content detection, all layers are registered as Heuristic (unless it's wallpaper).
    if (layer->getWindowType() == InputWindowInfo::TYPE_STATUS_BAR) {
    if (!mUseContentDetectionV2) {
        mLayerHistory->registerLayer(layer, minFps, maxFps,
        const auto lowFps = mRefreshRateConfigs.getMinRefreshRate().getFps();
                                     scheduler::LayerHistory::LayerVoteType::NoVote);
        const auto highFps = layer->getWindowType() == InputWindowInfo::TYPE_WALLPAPER
    } else if (!mUseContentDetection) {
                ? lowFps
        // If the content detection feature is off, all layers are registered at Max. We still keep
                : mRefreshRateConfigs.getMaxRefreshRate().getFps();
        // the layer history, since we use it for other features (like Frame Rate API), so layers

        // still need to be registered.
        mLayerHistory->registerLayer(layer, lowFps, highFps,
        mLayerHistory->registerLayer(layer, minFps, maxFps,
                                     scheduler::LayerHistory::LayerVoteType::Max);
    } else if (!mUseContentDetectionV2) {
        // In V1 of content detection, all layers are registered as Heuristic (unless it's
        // wallpaper).
        const auto highFps =
                layer->getWindowType() == InputWindowInfo::TYPE_WALLPAPER ? minFps : maxFps;

        mLayerHistory->registerLayer(layer, minFps, highFps,
                                     scheduler::LayerHistory::LayerVoteType::Heuristic);
                                     scheduler::LayerHistory::LayerVoteType::Heuristic);
    } else {
    } else {
        if (layer->getWindowType() == InputWindowInfo::TYPE_WALLPAPER) {
        if (layer->getWindowType() == InputWindowInfo::TYPE_WALLPAPER) {
            // Running Wallpaper at Min is considered as part of content detection.
            // Running Wallpaper at Min is considered as part of content detection.
            mLayerHistory->registerLayer(layer, mRefreshRateConfigs.getMinRefreshRate().getFps(),
            mLayerHistory->registerLayer(layer, minFps, maxFps,
                                         mRefreshRateConfigs.getMaxRefreshRate().getFps(),
                                         scheduler::LayerHistory::LayerVoteType::Min);
                                         scheduler::LayerHistory::LayerVoteType::Min);
        } else if (layer->getWindowType() == InputWindowInfo::TYPE_STATUS_BAR) {
            mLayerHistory->registerLayer(layer, mRefreshRateConfigs.getMinRefreshRate().getFps(),
                                         mRefreshRateConfigs.getMaxRefreshRate().getFps(),
                                         scheduler::LayerHistory::LayerVoteType::NoVote);
        } else {
        } else {
            mLayerHistory->registerLayer(layer, mRefreshRateConfigs.getMinRefreshRate().getFps(),
            mLayerHistory->registerLayer(layer, minFps, maxFps,
                                         mRefreshRateConfigs.getMaxRefreshRate().getFps(),
                                         scheduler::LayerHistory::LayerVoteType::Heuristic);
                                         scheduler::LayerHistory::LayerVoteType::Heuristic);
        }
        }
    }
    }
+4 −5
Original line number Original line Diff line number Diff line
@@ -340,15 +340,14 @@ TEST_F(RefreshRateConfigsTest, getBestRefreshRate_noLayers) {
            std::make_unique<RefreshRateConfigs>(m60_72_90Device, /*currentConfigId=*/
            std::make_unique<RefreshRateConfigs>(m60_72_90Device, /*currentConfigId=*/
                                                 HWC_CONFIG_ID_72);
                                                 HWC_CONFIG_ID_72);


    // If there are not layers, there is not content detection, so return the current
    // If there are no layers we select the default frame rate, which is the max of the primary
    // refresh rate.
    // range.
    auto layers = std::vector<LayerRequirement>{};
    auto layers = std::vector<LayerRequirement>{};
    EXPECT_EQ(mExpected72Config,
    EXPECT_EQ(mExpected90Config,
              refreshRateConfigs->getBestRefreshRate(layers, /*touchActive*/
              refreshRateConfigs->getBestRefreshRate(layers, /*touchActive*/
                                                     false, /*idle*/ false, &ignored));
                                                     false, /*idle*/ false, &ignored));


    // Current refresh rate can always be changed.
    ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {60, 60}}), 0);
    refreshRateConfigs->setCurrentConfigId(HWC_CONFIG_ID_60);
    EXPECT_EQ(mExpected60Config,
    EXPECT_EQ(mExpected60Config,
              refreshRateConfigs->getBestRefreshRate(layers, /*touchActive*/
              refreshRateConfigs->getBestRefreshRate(layers, /*touchActive*/
                                                     false, /*idle*/ false, &ignored));
                                                     false, /*idle*/ false, &ignored));