diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index e06ee38..4f54f17 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -686,22 +686,23 @@
 
         readPersistentProperties();
         mPowerAdvisor->onBootFinished();
-
-        // 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();
+        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");
             }
         }
 
-        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)) {
@@ -825,11 +826,6 @@
 
     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)) {
@@ -7222,18 +7218,6 @@
     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() {
