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

Commit 81b5b052 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

SurfaceFlinger: fix setDesiredActiveConfig am: 59db0a38 am: 50b32e72

Change-Id: Id2c249c94c0dee8f9e328b34fb6839b95dc0f395
parents 73cf0256 50b32e72
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -906,15 +906,24 @@ void SurfaceFlinger::setDesiredActiveConfig(const ActiveConfigInfo& info) {
    auto refreshRate = mRefreshRateConfigs->getRefreshRateFromConfigId(info.configId);
    ALOGV("setDesiredActiveConfig(%s)", refreshRate.name.c_str());

    // Don't check against the current mode yet. Worst case we set the desired
    // config twice. However event generation config might have changed so we need to update it
    // accordingly
    std::lock_guard<std::mutex> lock(mActiveConfigLock);
    if (mDesiredActiveConfigChanged) {
        // If a config change is pending, just cache the latest request in
        // mDesiredActiveConfig
        const Scheduler::ConfigEvent prevConfig = mDesiredActiveConfig.event;
        mDesiredActiveConfig = info;
        mDesiredActiveConfig.event = mDesiredActiveConfig.event | prevConfig;
    } else {
        // Check is we are already at the desired config
        const auto display = getDefaultDisplayDeviceLocked();
        if (!display || display->getActiveConfig() == refreshRate.configId) {
            return;
        }

        // Initiate a config change.
        mDesiredActiveConfigChanged = true;
        mDesiredActiveConfig = info;

    if (!mDesiredActiveConfigChanged) {
        // This will trigger HWC refresh without resetting the idle timer.
        repaintEverythingForHWC();
        // Start receiving vsync samples now, so that we can detect a period
@@ -927,7 +936,6 @@ void SurfaceFlinger::setDesiredActiveConfig(const ActiveConfigInfo& info) {
        mPhaseConfiguration->setRefreshRateFps(refreshRate.fps);
        mVSyncModulator->setPhaseOffsets(mPhaseConfiguration->getCurrentOffsets());
    }
    mDesiredActiveConfigChanged = true;

    if (mRefreshRateOverlay) {
        mRefreshRateOverlay->changeRefreshRate(refreshRate);