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

Commit ff0f1389 authored by Matt Buckley's avatar Matt Buckley Committed by Android (Google) Code Review
Browse files

Merge "Check for adpf cpu hints for SurfaceFlinger during init"

parents 5190320c e3a54706
Loading
Loading
Loading
Loading
+30 −14
Original line number Diff line number Diff line
@@ -686,23 +686,22 @@ void SurfaceFlinger::bootFinished() {

        readPersistentProperties();
        mPowerAdvisor->onBootFinished();
        const bool powerHintEnabled = mFlagManager.use_adpf_cpu_hint();
        mPowerAdvisor->enablePowerHint(powerHintEnabled);
        const bool powerHintUsed = mPowerAdvisor->usePowerHintSession();
        ALOGD("Power hint is %s",
              powerHintUsed ? "supported" : (powerHintEnabled ? "unsupported" : "disabled"));
        if (powerHintUsed) {
            std::optional<pid_t> renderEngineTid = getRenderEngine().getRenderEngineTid();
            std::vector<int32_t> tidList;
            tidList.emplace_back(gettid());
            if (renderEngineTid.has_value()) {
                tidList.emplace_back(*renderEngineTid);
            }
            if (!mPowerAdvisor->startPowerHintSession(tidList)) {
                ALOGW("Cannot start power hint session");

        // try to enable power hint session again using mendel flag now that boot is finished,
        // but only if we didn't already try earlier
        if (!mPowerAdvisor->usePowerHintSession() && mFlagManager.use_adpf_cpu_hint()) {
            mPowerAdvisor->enablePowerHint(true);
            // check again to make sure it's actually supported
            if (mPowerAdvisor->usePowerHintSession()) {
                startPowerHintSession();
            }
        }

        ALOGD("Power hint session is %s",
              mPowerAdvisor->usePowerHintSession()
                      ? "enabled"
                      : (!mPowerAdvisor->supportsPowerHintSession() ? "unsupported" : "disabled"));

        mBootStage = BootStage::FINISHED;

        if (property_get_bool("sf.debug.show_refresh_rate_overlay", false)) {
@@ -826,6 +825,11 @@ void SurfaceFlinger::init() {

    mPowerAdvisor->init();

    mPowerAdvisor->enablePowerHint(mFlagManager.use_adpf_cpu_hint());
    if (mPowerAdvisor->usePowerHintSession()) {
        startPowerHintSession();
    }

    char primeShaderCache[PROPERTY_VALUE_MAX];
    property_get("service.sf.prime_shader_cache", primeShaderCache, "1");
    if (atoi(primeShaderCache)) {
@@ -7153,6 +7157,18 @@ bool SurfaceFlinger::commitCreatedLayers(int64_t vsyncId) {
    return true;
}

void SurfaceFlinger::startPowerHintSession() const {
    std::optional<pid_t> renderEngineTid = getRenderEngine().getRenderEngineTid();
    std::vector<int32_t> tidList;
    tidList.emplace_back(gettid());
    if (renderEngineTid.has_value()) {
        tidList.emplace_back(*renderEngineTid);
    }
    if (!mPowerAdvisor->startPowerHintSession(tidList)) {
        ALOGW("Cannot start power hint session");
    }
}

// gui::ISurfaceComposer

binder::Status SurfaceComposerAIDL::bootFinished() {
+2 −0
Original line number Diff line number Diff line
@@ -1399,6 +1399,8 @@ private:
        bool early = false;
    } mPowerHintSessionMode;

    void startPowerHintSession() const;

    nsecs_t mAnimationTransactionTimeout = s2ns(5);

    friend class SurfaceComposerAIDL;