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