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

Commit 6e461bf8 authored by Ady Abraham's avatar Ady Abraham Committed by Automerger Merge Worker
Browse files

Merge changes I25b3f807,Iaa13a92d into sc-v2-dev am: e6adce59 am: c59df4b3

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/16048673

Change-Id: I27941d9084fad3398f4b8641b7b40aa449aa94a1
parents c8273642 c59df4b3
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -166,4 +166,15 @@ inline std::string to_string(hardware::graphics::composer::hal::PowerMode mode)
    }
    }
}
}


inline std::string to_string(hardware::graphics::composer::hal::Vsync vsync) {
    switch (vsync) {
        case hardware::graphics::composer::hal::Vsync::ENABLE:
            return "Enable";
        case hardware::graphics::composer::hal::Vsync::DISABLE:
            return "Disable";
        default:
            return "Unknown";
    }
}

} // namespace android
} // namespace android
+9 −0
Original line number Original line Diff line number Diff line
@@ -324,6 +324,7 @@ void Scheduler::onScreenAcquired(ConnectionHandle handle) {
        thread = mConnections[handle].thread.get();
        thread = mConnections[handle].thread.get();
    }
    }
    thread->onScreenAcquired();
    thread->onScreenAcquired();
    mScreenAcquired = true;
}
}


void Scheduler::onScreenReleased(ConnectionHandle handle) {
void Scheduler::onScreenReleased(ConnectionHandle handle) {
@@ -334,6 +335,7 @@ void Scheduler::onScreenReleased(ConnectionHandle handle) {
        thread = mConnections[handle].thread.get();
        thread = mConnections[handle].thread.get();
    }
    }
    thread->onScreenReleased();
    thread->onScreenReleased();
    mScreenAcquired = false;
}
}


void Scheduler::onFrameRateOverridesChanged(ConnectionHandle handle, PhysicalDisplayId displayId) {
void Scheduler::onFrameRateOverridesChanged(ConnectionHandle handle, PhysicalDisplayId displayId) {
@@ -760,6 +762,13 @@ void Scheduler::dump(std::string& result) const {
        }
        }
        StringAppendF(&result, "}\n");
        StringAppendF(&result, "}\n");
    }
    }

    {
        std::lock_guard lock(mHWVsyncLock);
        StringAppendF(&result,
                      "mScreenAcquired=%d mPrimaryHWVsyncEnabled=%d mHWVsyncAvailable=%d\n",
                      mScreenAcquired.load(), mPrimaryHWVsyncEnabled, mHWVsyncAvailable);
    }
}
}


void Scheduler::dumpVsync(std::string& s) const {
void Scheduler::dumpVsync(std::string& s) const {
+4 −1
Original line number Original line Diff line number Diff line
@@ -287,7 +287,7 @@ private:
    InjectVSyncSource* mVSyncInjector = nullptr;
    InjectVSyncSource* mVSyncInjector = nullptr;
    ConnectionHandle mInjectorConnectionHandle;
    ConnectionHandle mInjectorConnectionHandle;


    std::mutex mHWVsyncLock;
    mutable std::mutex mHWVsyncLock;
    bool mPrimaryHWVsyncEnabled GUARDED_BY(mHWVsyncLock) = false;
    bool mPrimaryHWVsyncEnabled GUARDED_BY(mHWVsyncLock) = false;
    bool mHWVsyncAvailable GUARDED_BY(mHWVsyncLock) = false;
    bool mHWVsyncAvailable GUARDED_BY(mHWVsyncLock) = false;


@@ -350,6 +350,9 @@ private:
            GUARDED_BY(mFrameRateOverridesLock);
            GUARDED_BY(mFrameRateOverridesLock);
    scheduler::RefreshRateConfigs::UidToFrameRateOverride mFrameRateOverridesFromBackdoor
    scheduler::RefreshRateConfigs::UidToFrameRateOverride mFrameRateOverridesFromBackdoor
            GUARDED_BY(mFrameRateOverridesLock);
            GUARDED_BY(mFrameRateOverridesLock);

    // Keeps track of whether the screen is acquired for debug
    std::atomic<bool> mScreenAcquired = false;
};
};


} // namespace android
} // namespace android
+17 −9
Original line number Original line Diff line number Diff line
@@ -1837,7 +1837,7 @@ void SurfaceFlinger::setVsyncEnabled(bool enabled) {


        if (const auto display = getDefaultDisplayDeviceLocked();
        if (const auto display = getDefaultDisplayDeviceLocked();
            display && display->isPoweredOn()) {
            display && display->isPoweredOn()) {
            getHwComposer().setVsyncEnabled(display->getPhysicalId(), mHWCVsyncPendingState);
            setHWCVsyncEnabled(display->getPhysicalId(), mHWCVsyncPendingState);
        }
        }
    }));
    }));
}
}
@@ -4502,6 +4502,12 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
        return;
        return;
    }
    }


    const auto activeDisplay = getDisplayDeviceLocked(mActiveDisplayToken);
    if (activeDisplay != display && display->isInternal() && activeDisplay &&
        activeDisplay->isPoweredOn()) {
        ALOGW("Trying to change power mode on non active display while the active display is ON");
    }

    display->setPowerMode(mode);
    display->setPowerMode(mode);


    if (mInterceptor->isEnabled()) {
    if (mInterceptor->isEnabled()) {
@@ -4509,7 +4515,7 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
    }
    }
    const auto vsyncPeriod = display->refreshRateConfigs().getCurrentRefreshRate().getVsyncPeriod();
    const auto vsyncPeriod = display->refreshRateConfigs().getCurrentRefreshRate().getVsyncPeriod();
    if (currentMode == hal::PowerMode::OFF) {
    if (currentMode == hal::PowerMode::OFF) {
        const auto activeDisplay = getDisplayDeviceLocked(mActiveDisplayToken);
        // Turn on the display
        if (display->isInternal() && (!activeDisplay || !activeDisplay->isPoweredOn())) {
        if (display->isInternal() && (!activeDisplay || !activeDisplay->isPoweredOn())) {
            onActiveDisplayChangedLocked(display);
            onActiveDisplayChangedLocked(display);
        }
        }
@@ -4522,8 +4528,8 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
            ALOGW("Couldn't set SCHED_FIFO on display on: %s\n", strerror(errno));
            ALOGW("Couldn't set SCHED_FIFO on display on: %s\n", strerror(errno));
        }
        }
        getHwComposer().setPowerMode(displayId, mode);
        getHwComposer().setPowerMode(displayId, mode);
        if (display->isInternal() && mode != hal::PowerMode::DOZE_SUSPEND) {
        if (isDisplayActiveLocked(display) && mode != hal::PowerMode::DOZE_SUSPEND) {
            getHwComposer().setVsyncEnabled(displayId, mHWCVsyncPendingState);
            setHWCVsyncEnabled(displayId, mHWCVsyncPendingState);
            mScheduler->onScreenAcquired(mAppConnectionHandle);
            mScheduler->onScreenAcquired(mAppConnectionHandle);
            mScheduler->resyncToHardwareVsync(true, vsyncPeriod);
            mScheduler->resyncToHardwareVsync(true, vsyncPeriod);
        }
        }
@@ -4539,13 +4545,13 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
        if (SurfaceFlinger::setSchedAttr(false) != NO_ERROR) {
        if (SurfaceFlinger::setSchedAttr(false) != NO_ERROR) {
            ALOGW("Couldn't set uclamp.min on display off: %s\n", strerror(errno));
            ALOGW("Couldn't set uclamp.min on display off: %s\n", strerror(errno));
        }
        }
        if (display->isInternal() && currentMode != hal::PowerMode::DOZE_SUSPEND) {
        if (isDisplayActiveLocked(display) && currentMode != hal::PowerMode::DOZE_SUSPEND) {
            mScheduler->disableHardwareVsync(true);
            mScheduler->disableHardwareVsync(true);
            mScheduler->onScreenReleased(mAppConnectionHandle);
            mScheduler->onScreenReleased(mAppConnectionHandle);
        }
        }


        // Make sure HWVsync is disabled before turning off the display
        // Make sure HWVsync is disabled before turning off the display
        getHwComposer().setVsyncEnabled(displayId, hal::Vsync::DISABLE);
        setHWCVsyncEnabled(displayId, hal::Vsync::DISABLE);


        getHwComposer().setPowerMode(displayId, mode);
        getHwComposer().setPowerMode(displayId, mode);
        mVisibleRegionsDirty = true;
        mVisibleRegionsDirty = true;
@@ -4553,13 +4559,13 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
    } else if (mode == hal::PowerMode::DOZE || mode == hal::PowerMode::ON) {
    } else if (mode == hal::PowerMode::DOZE || mode == hal::PowerMode::ON) {
        // Update display while dozing
        // Update display while dozing
        getHwComposer().setPowerMode(displayId, mode);
        getHwComposer().setPowerMode(displayId, mode);
        if (display->isInternal() && currentMode == hal::PowerMode::DOZE_SUSPEND) {
        if (isDisplayActiveLocked(display) && currentMode == hal::PowerMode::DOZE_SUSPEND) {
            mScheduler->onScreenAcquired(mAppConnectionHandle);
            mScheduler->onScreenAcquired(mAppConnectionHandle);
            mScheduler->resyncToHardwareVsync(true, vsyncPeriod);
            mScheduler->resyncToHardwareVsync(true, vsyncPeriod);
        }
        }
    } else if (mode == hal::PowerMode::DOZE_SUSPEND) {
    } else if (mode == hal::PowerMode::DOZE_SUSPEND) {
        // Leave display going to doze
        // Leave display going to doze
        if (display->isInternal()) {
        if (isDisplayActiveLocked(display)) {
            mScheduler->disableHardwareVsync(true);
            mScheduler->disableHardwareVsync(true);
            mScheduler->onScreenReleased(mAppConnectionHandle);
            mScheduler->onScreenReleased(mAppConnectionHandle);
        }
        }
@@ -4569,7 +4575,7 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
        getHwComposer().setPowerMode(displayId, mode);
        getHwComposer().setPowerMode(displayId, mode);
    }
    }


    if (display->isInternal()) {
    if (isDisplayActiveLocked(display)) {
        mTimeStats->setPowerMode(mode);
        mTimeStats->setPowerMode(mode);
        mRefreshRateStats->setPowerMode(mode);
        mRefreshRateStats->setPowerMode(mode);
        mScheduler->setDisplayPowerState(mode == hal::PowerMode::ON);
        mScheduler->setDisplayPowerState(mode == hal::PowerMode::ON);
@@ -4748,6 +4754,8 @@ void SurfaceFlinger::dumpVSync(std::string& result) const {


    mScheduler->dump(mAppConnectionHandle, result);
    mScheduler->dump(mAppConnectionHandle, result);
    mScheduler->dumpVsync(result);
    mScheduler->dumpVsync(result);
    StringAppendF(&result, "mHWCVsyncPendingState=%s mLastHWCVsyncState=%s\n",
                  to_string(mHWCVsyncPendingState).c_str(), to_string(mLastHWCVsyncState).c_str());
}
}


void SurfaceFlinger::dumpPlannerInfo(const DumpArgs& args, std::string& result) const {
void SurfaceFlinger::dumpPlannerInfo(const DumpArgs& args, std::string& result) const {
+6 −0
Original line number Original line Diff line number Diff line
@@ -951,6 +951,11 @@ private:
     */
     */
    nsecs_t getVsyncPeriodFromHWC() const REQUIRES(mStateLock);
    nsecs_t getVsyncPeriodFromHWC() const REQUIRES(mStateLock);


    void setHWCVsyncEnabled(PhysicalDisplayId id, hal::Vsync enabled) {
        mLastHWCVsyncState = enabled;
        getHwComposer().setVsyncEnabled(id, enabled);
    }

    // Sets the refresh rate by switching active configs, if they are available for
    // Sets the refresh rate by switching active configs, if they are available for
    // the desired refresh rate.
    // the desired refresh rate.
    void changeRefreshRateLocked(const RefreshRate&, Scheduler::ModeEvent) REQUIRES(mStateLock);
    void changeRefreshRateLocked(const RefreshRate&, Scheduler::ModeEvent) REQUIRES(mStateLock);
@@ -1304,6 +1309,7 @@ private:
    std::atomic<nsecs_t> mExpectedPresentTime = 0;
    std::atomic<nsecs_t> mExpectedPresentTime = 0;
    nsecs_t mScheduledPresentTime = 0;
    nsecs_t mScheduledPresentTime = 0;
    hal::Vsync mHWCVsyncPendingState = hal::Vsync::DISABLE;
    hal::Vsync mHWCVsyncPendingState = hal::Vsync::DISABLE;
    hal::Vsync mLastHWCVsyncState = hal::Vsync::DISABLE;


    // below flags are set by main thread only
    // below flags are set by main thread only
    bool mSetActiveModePending = false;
    bool mSetActiveModePending = false;
Loading