Loading services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp +23 −18 Original line number Original line Diff line number Diff line Loading @@ -124,24 +124,20 @@ public: static std::unique_ptr<HalWrapper> connect() { static std::unique_ptr<HalWrapper> connect() { // Power HAL 1.3 is not guaranteed to be available, thus we need to query // Power HAL 1.3 is not guaranteed to be available, thus we need to query // Power HAL 1.0 first and try to cast it to Power HAL 1.3. // Power HAL 1.0 first and try to cast it to Power HAL 1.3. // Power HAL 1.0 is always available, thus if we fail to query it, it means // Power HAL is not available temporarily and we should retry later. However, // if Power HAL 1.0 is available and we can't cast it to Power HAL 1.3, // it means Power HAL 1.3 is not available at all, so we should stop trying. sp<V1_3::IPower> powerHal = nullptr; sp<V1_3::IPower> powerHal = nullptr; if (sHasPowerHal_1_3) { sp<V1_0::IPower> powerHal_1_0 = V1_0::IPower::getService(); sp<V1_0::IPower> powerHal_1_0 = V1_0::IPower::getService(); if (powerHal_1_0 != nullptr) { if (powerHal_1_0 != nullptr) { // Try to cast to Power HAL 1.3 // Try to cast to Power HAL 1.3 powerHal = V1_3::IPower::castFrom(powerHal_1_0); powerHal = V1_3::IPower::castFrom(powerHal_1_0); if (powerHal == nullptr) { if (powerHal == nullptr) { ALOGW("No Power HAL 1.3 service in system"); ALOGW("No Power HAL 1.3 service in system, disabling PowerAdvisor"); sHasPowerHal_1_3 = false; } else { } else { ALOGI("Loaded Power HAL 1.3 service"); ALOGI("Loaded Power HAL 1.3 service"); } } } else { ALOGW("No Power HAL found, disabling PowerAdvisor"); } } } if (powerHal == nullptr) { if (powerHal == nullptr) { return nullptr; return nullptr; } } Loading @@ -162,12 +158,9 @@ public: } } private: private: static bool sHasPowerHal_1_3; const sp<V1_3::IPower> mPowerHal = nullptr; const sp<V1_3::IPower> mPowerHal = nullptr; }; }; bool HidlPowerHalWrapper::sHasPowerHal_1_3 = true; class AidlPowerHalWrapper : public PowerAdvisor::HalWrapper { class AidlPowerHalWrapper : public PowerAdvisor::HalWrapper { public: public: AidlPowerHalWrapper(sp<IPower> powerHal) : mPowerHal(std::move(powerHal)) { AidlPowerHalWrapper(sp<IPower> powerHal) : mPowerHal(std::move(powerHal)) { Loading Loading @@ -226,7 +219,13 @@ private: PowerAdvisor::HalWrapper* PowerAdvisor::getPowerHal() { PowerAdvisor::HalWrapper* PowerAdvisor::getPowerHal() { static std::unique_ptr<HalWrapper> sHalWrapper = nullptr; static std::unique_ptr<HalWrapper> sHalWrapper = nullptr; static bool sHasHal = true; if (!sHasHal) { return nullptr; } // If we used to have a HAL, but it stopped responding, attempt to reconnect if (mReconnectPowerHal) { if (mReconnectPowerHal) { sHalWrapper = nullptr; sHalWrapper = nullptr; mReconnectPowerHal = false; mReconnectPowerHal = false; Loading @@ -244,6 +243,12 @@ PowerAdvisor::HalWrapper* PowerAdvisor::getPowerHal() { sHalWrapper = HidlPowerHalWrapper::connect(); sHalWrapper = HidlPowerHalWrapper::connect(); } } // If we make it to this point and still don't have a HAL, it's unlikely we // will, so stop trying if (sHalWrapper == nullptr) { sHasHal = false; } return sHalWrapper.get(); return sHalWrapper.get(); } } Loading Loading
services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp +23 −18 Original line number Original line Diff line number Diff line Loading @@ -124,24 +124,20 @@ public: static std::unique_ptr<HalWrapper> connect() { static std::unique_ptr<HalWrapper> connect() { // Power HAL 1.3 is not guaranteed to be available, thus we need to query // Power HAL 1.3 is not guaranteed to be available, thus we need to query // Power HAL 1.0 first and try to cast it to Power HAL 1.3. // Power HAL 1.0 first and try to cast it to Power HAL 1.3. // Power HAL 1.0 is always available, thus if we fail to query it, it means // Power HAL is not available temporarily and we should retry later. However, // if Power HAL 1.0 is available and we can't cast it to Power HAL 1.3, // it means Power HAL 1.3 is not available at all, so we should stop trying. sp<V1_3::IPower> powerHal = nullptr; sp<V1_3::IPower> powerHal = nullptr; if (sHasPowerHal_1_3) { sp<V1_0::IPower> powerHal_1_0 = V1_0::IPower::getService(); sp<V1_0::IPower> powerHal_1_0 = V1_0::IPower::getService(); if (powerHal_1_0 != nullptr) { if (powerHal_1_0 != nullptr) { // Try to cast to Power HAL 1.3 // Try to cast to Power HAL 1.3 powerHal = V1_3::IPower::castFrom(powerHal_1_0); powerHal = V1_3::IPower::castFrom(powerHal_1_0); if (powerHal == nullptr) { if (powerHal == nullptr) { ALOGW("No Power HAL 1.3 service in system"); ALOGW("No Power HAL 1.3 service in system, disabling PowerAdvisor"); sHasPowerHal_1_3 = false; } else { } else { ALOGI("Loaded Power HAL 1.3 service"); ALOGI("Loaded Power HAL 1.3 service"); } } } else { ALOGW("No Power HAL found, disabling PowerAdvisor"); } } } if (powerHal == nullptr) { if (powerHal == nullptr) { return nullptr; return nullptr; } } Loading @@ -162,12 +158,9 @@ public: } } private: private: static bool sHasPowerHal_1_3; const sp<V1_3::IPower> mPowerHal = nullptr; const sp<V1_3::IPower> mPowerHal = nullptr; }; }; bool HidlPowerHalWrapper::sHasPowerHal_1_3 = true; class AidlPowerHalWrapper : public PowerAdvisor::HalWrapper { class AidlPowerHalWrapper : public PowerAdvisor::HalWrapper { public: public: AidlPowerHalWrapper(sp<IPower> powerHal) : mPowerHal(std::move(powerHal)) { AidlPowerHalWrapper(sp<IPower> powerHal) : mPowerHal(std::move(powerHal)) { Loading Loading @@ -226,7 +219,13 @@ private: PowerAdvisor::HalWrapper* PowerAdvisor::getPowerHal() { PowerAdvisor::HalWrapper* PowerAdvisor::getPowerHal() { static std::unique_ptr<HalWrapper> sHalWrapper = nullptr; static std::unique_ptr<HalWrapper> sHalWrapper = nullptr; static bool sHasHal = true; if (!sHasHal) { return nullptr; } // If we used to have a HAL, but it stopped responding, attempt to reconnect if (mReconnectPowerHal) { if (mReconnectPowerHal) { sHalWrapper = nullptr; sHalWrapper = nullptr; mReconnectPowerHal = false; mReconnectPowerHal = false; Loading @@ -244,6 +243,12 @@ PowerAdvisor::HalWrapper* PowerAdvisor::getPowerHal() { sHalWrapper = HidlPowerHalWrapper::connect(); sHalWrapper = HidlPowerHalWrapper::connect(); } } // If we make it to this point and still don't have a HAL, it's unlikely we // will, so stop trying if (sHalWrapper == nullptr) { sHasHal = false; } return sHalWrapper.get(); return sHalWrapper.get(); } } Loading