From 21211ea5e54f396e1b6d239a0a470829df5c6d4b Mon Sep 17 00:00:00 2001 From: electimon Date: Thu, 10 Aug 2023 09:15:20 +0800 Subject: [PATCH 1/3] powermanager: Introduce PowerExt supported boosting * This patchset allows for custom boost hints to be piped to the Pixel version of the AIDL power HAL extension. Signed-off-by: betaxab Signed-off-by: electimon Change-Id: I6b687a651832481fe32cd6e1a2578236fe0be5b6 --- include/powermanager/PowerHalController.h | 5 +++ include/powermanager/PowerHalLoader.h | 6 +++- include/powermanager/PowerHalWrapper.h | 14 ++++++++ services/powermanager/Android.bp | 1 + services/powermanager/PowerHalController.cpp | 24 +++++++++++-- services/powermanager/PowerHalLoader.cpp | 16 +++++++-- services/powermanager/PowerHalWrapper.cpp | 38 ++++++++++++++++++++ 7 files changed, 98 insertions(+), 6 deletions(-) diff --git a/include/powermanager/PowerHalController.h b/include/powermanager/PowerHalController.h index 71a36d09e5..6c42788f36 100644 --- a/include/powermanager/PowerHalController.h +++ b/include/powermanager/PowerHalController.h @@ -23,6 +23,9 @@ #include #include #include +#include + +using ::google::hardware::power::extension::pixel::IPowerExt; namespace android { @@ -55,6 +58,8 @@ public: void init(); + virtual HalResult isPowerExtAvailable() override; + virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; virtual HalResult> createHintSession( diff --git a/include/powermanager/PowerHalLoader.h b/include/powermanager/PowerHalLoader.h index ed6f6f35f5..d839559f60 100644 --- a/include/powermanager/PowerHalLoader.h +++ b/include/powermanager/PowerHalLoader.h @@ -20,6 +20,9 @@ #include #include #include +#include + +using ::google::hardware::power::extension::pixel::IPowerExt; namespace android { @@ -29,12 +32,13 @@ namespace power { class PowerHalLoader { public: static void unloadAll(); - static sp loadAidl(); + static std::pair, sp> loadAidlAndExt(); static sp loadHidlV1_0(); static sp loadHidlV1_1(); private: static std::mutex gHalMutex; + static sp gHalAidlExt GUARDED_BY(gHalMutex); static sp gHalAidl GUARDED_BY(gHalMutex); static sp gHalHidlV1_0 GUARDED_BY(gHalMutex); static sp gHalHidlV1_1 GUARDED_BY(gHalMutex); diff --git a/include/powermanager/PowerHalWrapper.h b/include/powermanager/PowerHalWrapper.h index dfb0ff59a0..dbdc59591c 100644 --- a/include/powermanager/PowerHalWrapper.h +++ b/include/powermanager/PowerHalWrapper.h @@ -23,6 +23,9 @@ #include #include #include +#include + +using ::google::hardware::power::extension::pixel::IPowerExt; namespace android { @@ -117,6 +120,8 @@ class HalWrapper { public: virtual ~HalWrapper() = default; + virtual HalResult isPowerExtAvailable() = 0; + virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) = 0; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) = 0; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) = 0; virtual HalResult> createHintSession( @@ -131,6 +136,8 @@ public: EmptyHalWrapper() = default; ~EmptyHalWrapper() = default; + virtual HalResult isPowerExtAvailable() override; + virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; virtual HalResult> createHintSession( @@ -146,6 +153,8 @@ public: : mHandleV1_0(std::move(Hal)) {} virtual ~HidlHalWrapperV1_0() = default; + virtual HalResult isPowerExtAvailable() override; + virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; virtual HalResult> createHintSession( @@ -182,8 +191,12 @@ private: class AidlHalWrapper : public HalWrapper { public: explicit AidlHalWrapper(sp handle) : mHandle(std::move(handle)) {} + explicit AidlHalWrapper(sp handle, sp handleExt) + : mHandle(std::move(handle)), mHandleExt(std::move(handleExt)) {} virtual ~AidlHalWrapper() = default; + virtual HalResult isPowerExtAvailable() override; + virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; virtual HalResult> createHintSession( @@ -196,6 +209,7 @@ private: std::mutex mBoostMutex; std::mutex mModeMutex; sp mHandle; + sp mHandleExt; // Android framework only sends boost upto DISPLAY_UPDATE_IMMINENT. // Need to increase the array size if more boost supported. std::array, diff --git a/services/powermanager/Android.bp b/services/powermanager/Android.bp index 6fbba3f568..4819b7c72c 100644 --- a/services/powermanager/Android.bp +++ b/services/powermanager/Android.bp @@ -39,6 +39,7 @@ cc_library_shared { "android.hardware.power@1.0", "android.hardware.power@1.1", "android.hardware.power-V3-cpp", + "pixel-power-ext-V1-cpp" ], cflags: [ diff --git a/services/powermanager/PowerHalController.cpp b/services/powermanager/PowerHalController.cpp index 8c225d5d02..c1c371d539 100644 --- a/services/powermanager/PowerHalController.cpp +++ b/services/powermanager/PowerHalController.cpp @@ -33,9 +33,15 @@ namespace power { // ------------------------------------------------------------------------------------------------- std::unique_ptr HalConnector::connect() { - sp halAidl = PowerHalLoader::loadAidl(); - if (halAidl) { - return std::make_unique(halAidl); + std::pair, sp> halAidlAndExt = PowerHalLoader::loadAidlAndExt(); + sp powerHal = halAidlAndExt.first; + sp powerExtHal = halAidlAndExt.second; + // Check validity of aidl power hal as well as the extension hal + if (powerHal && powerExtHal) { + return std::make_unique(powerHal, powerExtHal); + } + if (powerHal) { + return std::make_unique(powerHal); } sp halHidlV1_0 = PowerHalLoader::loadHidlV1_0(); sp halHidlV1_1 = PowerHalLoader::loadHidlV1_1(); @@ -86,6 +92,18 @@ HalResult PowerHalController::processHalResult(HalResult result, const cha return result; } +HalResult PowerHalController::isPowerExtAvailable() { + std::shared_ptr handle = initHal(); + auto result = handle->isPowerExtAvailable(); + return processHalResult(result, "isPowerExtAvailable"); +} + +HalResult PowerHalController::setExtBoost(const ::std::string& boost, int32_t durationMs) { + std::shared_ptr handle = initHal(); + auto result = handle->setExtBoost(boost, durationMs); + return processHalResult(result, "setExtBoost"); +} + HalResult PowerHalController::setBoost(Boost boost, int32_t durationMs) { std::shared_ptr handle = initHal(); auto result = handle->setBoost(boost, durationMs); diff --git a/services/powermanager/PowerHalLoader.cpp b/services/powermanager/PowerHalLoader.cpp index 1f1b43a607..d963547453 100644 --- a/services/powermanager/PowerHalLoader.cpp +++ b/services/powermanager/PowerHalLoader.cpp @@ -52,22 +52,34 @@ sp loadHal(bool& exists, sp& hal, F& loadFn, const char* halName) { // ------------------------------------------------------------------------------------------------- std::mutex PowerHalLoader::gHalMutex; +sp PowerHalLoader::gHalAidlExt = nullptr; sp PowerHalLoader::gHalAidl = nullptr; sp PowerHalLoader::gHalHidlV1_0 = nullptr; sp PowerHalLoader::gHalHidlV1_1 = nullptr; void PowerHalLoader::unloadAll() { std::lock_guard lock(gHalMutex); + gHalAidlExt = nullptr; gHalAidl = nullptr; gHalHidlV1_0 = nullptr; gHalHidlV1_1 = nullptr; } -sp PowerHalLoader::loadAidl() { +std::pair, sp> PowerHalLoader::loadAidlAndExt() { std::lock_guard lock(gHalMutex); static bool gHalExists = true; static auto loadFn = []() { return waitForVintfService(); }; - return loadHal(gHalExists, gHalAidl, loadFn, "AIDL"); + + sp pwBinder = loadHal(gHalExists, gHalAidl, loadFn, "AIDL"); + sp pwExtHal = nullptr; + if (gHalExists) { + sp pwExtBinder; + IPower::asBinder(pwBinder)->getExtension(&pwExtBinder); + gHalAidlExt = interface_cast(pwExtBinder); + pwExtHal = gHalAidlExt; + } + + return std::make_pair(pwBinder, pwExtHal); } sp PowerHalLoader::loadHidlV1_0() { diff --git a/services/powermanager/PowerHalWrapper.cpp b/services/powermanager/PowerHalWrapper.cpp index d74bd23a8d..5d8ea71d9a 100644 --- a/services/powermanager/PowerHalWrapper.cpp +++ b/services/powermanager/PowerHalWrapper.cpp @@ -80,6 +80,17 @@ HalResult HalResult::fromReturn(hardware::Return& ret) { } // ------------------------------------------------------------------------------------------------- +HalResult EmptyHalWrapper::isPowerExtAvailable() { + ALOGV("Skipped isPowerExtAvailable because Power HAL not available"); + return HalResult::unsupported(); +}; + +HalResult EmptyHalWrapper::setExtBoost(const ::std::string& boost, int32_t durationMs) { + ALOGV("Skipped setExtBoost %s with duration %dms because Power HAL not available", + boost.c_str(), durationMs); + return HalResult::unsupported(); +}; + HalResult EmptyHalWrapper::setBoost(Boost boost, int32_t durationMs) { ALOGV("Skipped setBoost %s with duration %dms because Power HAL not available", toString(boost).c_str(), durationMs); @@ -106,6 +117,16 @@ HalResult EmptyHalWrapper::getHintSessionPreferredRate() { // ------------------------------------------------------------------------------------------------- +HalResult HidlHalWrapperV1_0::isPowerExtAvailable() { + ALOGV("Skipped isPowerExtAvailable because Power HAL AIDL not available"); + return HalResult::unsupported(); +}; + +HalResult HidlHalWrapperV1_0::setExtBoost(const ::std::string& boost, int32_t durationMs) { + ALOGV("Skipped setExtBoost %s duration %dms because Power HAL AIDL not available", boost.c_str(), durationMs); + return HalResult::unsupported(); +} + HalResult HidlHalWrapperV1_0::setBoost(Boost boost, int32_t durationMs) { if (boost == Boost::INTERACTION) { return sendPowerHint(V1_0::PowerHint::INTERACTION, durationMs); @@ -173,6 +194,23 @@ HalResult HidlHalWrapperV1_1::sendPowerHint(V1_0::PowerHint hintId, uint32 // ------------------------------------------------------------------------------------------------- +HalResult AidlHalWrapper::isPowerExtAvailable() { + if (mHandleExt) { + return HalResult::ok(true); + } + return HalResult::unsupported(); +}; + +HalResult AidlHalWrapper::setExtBoost(const ::std::string& boost, int32_t durationMs) { + std::unique_lock lock(mBoostMutex); + if (mHandleExt) { + return toHalResult(mHandleExt->setBoost(boost, durationMs)); + } + ALOGV("Skipped setExtBoost %s duration %dms because Power HAL AIDL not available", + boost.c_str(), durationMs); + return HalResult::unsupported(); +} + HalResult AidlHalWrapper::setBoost(Boost boost, int32_t durationMs) { std::unique_lock lock(mBoostMutex); size_t idx = static_cast(boost); -- GitLab From 8788fddaca215b203df4d30556403e519ac961ec Mon Sep 17 00:00:00 2001 From: electimon Date: Sat, 12 Aug 2023 14:02:40 +0800 Subject: [PATCH 2/3] powermanager: Implement isExtBoostSupported Change-Id: Ifca767ecda54b36b432b9b74ccb05a477b7a42b9 Signed-off-by: electimon --- include/powermanager/PowerHalController.h | 1 + include/powermanager/PowerHalWrapper.h | 4 ++++ services/powermanager/Android.bp | 5 ++++- services/powermanager/PowerHalController.cpp | 6 ++++++ services/powermanager/PowerHalWrapper.cpp | 21 ++++++++++++++++++++ 5 files changed, 36 insertions(+), 1 deletion(-) diff --git a/include/powermanager/PowerHalController.h b/include/powermanager/PowerHalController.h index 6c42788f36..7a3cb0a65e 100644 --- a/include/powermanager/PowerHalController.h +++ b/include/powermanager/PowerHalController.h @@ -59,6 +59,7 @@ public: void init(); virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtBoostSupported(const ::std::string& boost) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; diff --git a/include/powermanager/PowerHalWrapper.h b/include/powermanager/PowerHalWrapper.h index dbdc59591c..f6633949d8 100644 --- a/include/powermanager/PowerHalWrapper.h +++ b/include/powermanager/PowerHalWrapper.h @@ -121,6 +121,7 @@ public: virtual ~HalWrapper() = default; virtual HalResult isPowerExtAvailable() = 0; + virtual HalResult isExtBoostSupported(const ::std::string& boost) = 0; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) = 0; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) = 0; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) = 0; @@ -137,6 +138,7 @@ public: ~EmptyHalWrapper() = default; virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtBoostSupported(const ::std::string& boost) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; @@ -154,6 +156,7 @@ public: virtual ~HidlHalWrapperV1_0() = default; virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtBoostSupported(const ::std::string& boost) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; @@ -196,6 +199,7 @@ public: virtual ~AidlHalWrapper() = default; virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtBoostSupported(const ::std::string& boost) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; diff --git a/services/powermanager/Android.bp b/services/powermanager/Android.bp index 4819b7c72c..34e9e84306 100644 --- a/services/powermanager/Android.bp +++ b/services/powermanager/Android.bp @@ -39,7 +39,10 @@ cc_library_shared { "android.hardware.power@1.0", "android.hardware.power@1.1", "android.hardware.power-V3-cpp", - "pixel-power-ext-V1-cpp" + ], + + static_libs: [ + "//hardware/google/interfaces:pixel-power-ext-V1-cpp" ], cflags: [ diff --git a/services/powermanager/PowerHalController.cpp b/services/powermanager/PowerHalController.cpp index c1c371d539..b618bf97a5 100644 --- a/services/powermanager/PowerHalController.cpp +++ b/services/powermanager/PowerHalController.cpp @@ -98,6 +98,12 @@ HalResult PowerHalController::isPowerExtAvailable() { return processHalResult(result, "isPowerExtAvailable"); } +HalResult PowerHalController::isExtBoostSupported(const ::std::string& boost) { + std::shared_ptr handle = initHal(); + auto result = handle->isExtBoostSupported(boost); + return processHalResult(result, "isPowerExtAvailable"); +} + HalResult PowerHalController::setExtBoost(const ::std::string& boost, int32_t durationMs) { std::shared_ptr handle = initHal(); auto result = handle->setExtBoost(boost, durationMs); diff --git a/services/powermanager/PowerHalWrapper.cpp b/services/powermanager/PowerHalWrapper.cpp index 5d8ea71d9a..268b49a54b 100644 --- a/services/powermanager/PowerHalWrapper.cpp +++ b/services/powermanager/PowerHalWrapper.cpp @@ -85,6 +85,12 @@ HalResult EmptyHalWrapper::isPowerExtAvailable() { return HalResult::unsupported(); }; +HalResult EmptyHalWrapper::isExtBoostSupported(const ::std::string& boost) { + ALOGV("Skipped isExtBoostSupported with %s because Power HAL not available", + boost.c_str()); + return HalResult::unsupported(); +}; + HalResult EmptyHalWrapper::setExtBoost(const ::std::string& boost, int32_t durationMs) { ALOGV("Skipped setExtBoost %s with duration %dms because Power HAL not available", boost.c_str(), durationMs); @@ -122,6 +128,12 @@ HalResult HidlHalWrapperV1_0::isPowerExtAvailable() { return HalResult::unsupported(); }; +HalResult HidlHalWrapperV1_0::isExtBoostSupported(const ::std::string& boost) { + ALOGV("Skipped isExtBoostSupported with %s because Power HAL not available", + boost.c_str()); + return HalResult::unsupported(); +}; + HalResult HidlHalWrapperV1_0::setExtBoost(const ::std::string& boost, int32_t durationMs) { ALOGV("Skipped setExtBoost %s duration %dms because Power HAL AIDL not available", boost.c_str(), durationMs); return HalResult::unsupported(); @@ -201,6 +213,15 @@ HalResult AidlHalWrapper::isPowerExtAvailable() { return HalResult::unsupported(); }; +HalResult AidlHalWrapper::isExtBoostSupported(const ::std::string& boost) { + if (mHandleExt) { + bool supported = false; + auto result = mHandleExt->isBoostSupported(boost, &supported); + return HalResult::fromStatus(result, supported); + } + return HalResult::unsupported(); +}; + HalResult AidlHalWrapper::setExtBoost(const ::std::string& boost, int32_t durationMs) { std::unique_lock lock(mBoostMutex); if (mHandleExt) { -- GitLab From 92b5e688fea0e4ea5b1c288ec7b9637dc059b3e9 Mon Sep 17 00:00:00 2001 From: electimon Date: Thu, 17 Aug 2023 19:25:43 +0800 Subject: [PATCH 3/3] powermanager: Implement setExtMode APIs Change-Id: Ifa16507bd8306b133bb6159a630b02eb12ebaece Signed-off-by: electimon --- include/powermanager/PowerHalController.h | 2 + include/powermanager/PowerHalWrapper.h | 8 ++++ services/powermanager/PowerHalController.cpp | 12 ++++++ services/powermanager/PowerHalWrapper.cpp | 42 ++++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/include/powermanager/PowerHalController.h b/include/powermanager/PowerHalController.h index 7a3cb0a65e..c53ce15212 100644 --- a/include/powermanager/PowerHalController.h +++ b/include/powermanager/PowerHalController.h @@ -59,7 +59,9 @@ public: void init(); virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtModeSupported(const ::std::string& mode) override; virtual HalResult isExtBoostSupported(const ::std::string& boost) override; + virtual HalResult setExtMode(const ::std::string& mode, bool enabled) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; diff --git a/include/powermanager/PowerHalWrapper.h b/include/powermanager/PowerHalWrapper.h index f6633949d8..2ed82b511a 100644 --- a/include/powermanager/PowerHalWrapper.h +++ b/include/powermanager/PowerHalWrapper.h @@ -121,7 +121,9 @@ public: virtual ~HalWrapper() = default; virtual HalResult isPowerExtAvailable() = 0; + virtual HalResult isExtModeSupported(const ::std::string& mode) = 0; virtual HalResult isExtBoostSupported(const ::std::string& boost) = 0; + virtual HalResult setExtMode(const ::std::string& mode, bool enabled) = 0; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) = 0; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) = 0; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) = 0; @@ -138,7 +140,9 @@ public: ~EmptyHalWrapper() = default; virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtModeSupported(const ::std::string& mode) override; virtual HalResult isExtBoostSupported(const ::std::string& boost) override; + virtual HalResult setExtMode(const ::std::string& mode, bool enabled) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; @@ -156,7 +160,9 @@ public: virtual ~HidlHalWrapperV1_0() = default; virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtModeSupported(const ::std::string& mode) override; virtual HalResult isExtBoostSupported(const ::std::string& boost) override; + virtual HalResult setExtMode(const ::std::string& mode, bool enabled) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; @@ -199,7 +205,9 @@ public: virtual ~AidlHalWrapper() = default; virtual HalResult isPowerExtAvailable() override; + virtual HalResult isExtModeSupported(const ::std::string& mode) override; virtual HalResult isExtBoostSupported(const ::std::string& boost) override; + virtual HalResult setExtMode(const ::std::string& mode, bool enabled) override; virtual HalResult setExtBoost(const ::std::string& boost, int32_t durationMs) override; virtual HalResult setBoost(hardware::power::Boost boost, int32_t durationMs) override; virtual HalResult setMode(hardware::power::Mode mode, bool enabled) override; diff --git a/services/powermanager/PowerHalController.cpp b/services/powermanager/PowerHalController.cpp index b618bf97a5..e321f8202d 100644 --- a/services/powermanager/PowerHalController.cpp +++ b/services/powermanager/PowerHalController.cpp @@ -98,12 +98,24 @@ HalResult PowerHalController::isPowerExtAvailable() { return processHalResult(result, "isPowerExtAvailable"); } +HalResult PowerHalController::isExtModeSupported(const ::std::string& mode) { + std::shared_ptr handle = initHal(); + auto result = handle->isExtModeSupported(mode); + return processHalResult(result, "isExtModeSupported"); +} + HalResult PowerHalController::isExtBoostSupported(const ::std::string& boost) { std::shared_ptr handle = initHal(); auto result = handle->isExtBoostSupported(boost); return processHalResult(result, "isPowerExtAvailable"); } +HalResult PowerHalController::setExtMode(const ::std::string& mode, bool enabled) { + std::shared_ptr handle = initHal(); + auto result = handle->setExtMode(mode, enabled); + return processHalResult(result, "setExtMode"); +} + HalResult PowerHalController::setExtBoost(const ::std::string& boost, int32_t durationMs) { std::shared_ptr handle = initHal(); auto result = handle->setExtBoost(boost, durationMs); diff --git a/services/powermanager/PowerHalWrapper.cpp b/services/powermanager/PowerHalWrapper.cpp index 268b49a54b..897cf55f94 100644 --- a/services/powermanager/PowerHalWrapper.cpp +++ b/services/powermanager/PowerHalWrapper.cpp @@ -85,12 +85,24 @@ HalResult EmptyHalWrapper::isPowerExtAvailable() { return HalResult::unsupported(); }; +HalResult EmptyHalWrapper::isExtModeSupported(const ::std::string& mode) { + ALOGV("Skipped isExtModeSupported with %s because Power HAL not available", + mode.c_str()); + return HalResult::unsupported(); +}; + HalResult EmptyHalWrapper::isExtBoostSupported(const ::std::string& boost) { ALOGV("Skipped isExtBoostSupported with %s because Power HAL not available", boost.c_str()); return HalResult::unsupported(); }; +HalResult EmptyHalWrapper::setExtMode(const ::std::string& mode, bool enabled) { + ALOGV("Skipped setExtMode %s to %s because Power HAL not available", mode.c_str(), + enabled ? "true" : "false"); + return HalResult::unsupported(); +}; + HalResult EmptyHalWrapper::setExtBoost(const ::std::string& boost, int32_t durationMs) { ALOGV("Skipped setExtBoost %s with duration %dms because Power HAL not available", boost.c_str(), durationMs); @@ -128,12 +140,24 @@ HalResult HidlHalWrapperV1_0::isPowerExtAvailable() { return HalResult::unsupported(); }; +HalResult HidlHalWrapperV1_0::isExtModeSupported(const ::std::string& mode) { + ALOGV("Skipped isExtModeSupported with %s because Power HAL not available", + mode.c_str()); + return HalResult::unsupported(); +}; + HalResult HidlHalWrapperV1_0::isExtBoostSupported(const ::std::string& boost) { ALOGV("Skipped isExtBoostSupported with %s because Power HAL not available", boost.c_str()); return HalResult::unsupported(); }; +HalResult HidlHalWrapperV1_0::setExtMode(const ::std::string& mode, bool enabled) { + ALOGV("Skipped setExtMode %s to %s because Power HAL AIDL not available", mode.c_str(), + enabled ? "true" : "false"); + return HalResult::unsupported(); +} + HalResult HidlHalWrapperV1_0::setExtBoost(const ::std::string& boost, int32_t durationMs) { ALOGV("Skipped setExtBoost %s duration %dms because Power HAL AIDL not available", boost.c_str(), durationMs); return HalResult::unsupported(); @@ -213,6 +237,15 @@ HalResult AidlHalWrapper::isPowerExtAvailable() { return HalResult::unsupported(); }; +HalResult AidlHalWrapper::isExtModeSupported(const ::std::string& mode) { + if (mHandleExt) { + bool supported = false; + auto result = mHandleExt->isModeSupported(mode, &supported); + return HalResult::fromStatus(result, supported); + } + return HalResult::unsupported(); +}; + HalResult AidlHalWrapper::isExtBoostSupported(const ::std::string& boost) { if (mHandleExt) { bool supported = false; @@ -222,6 +255,15 @@ HalResult AidlHalWrapper::isExtBoostSupported(const ::std::string& boost) return HalResult::unsupported(); }; +HalResult AidlHalWrapper::setExtMode(const ::std::string& mode, bool enabled) { + std::unique_lock lock(mModeMutex); + if (mHandleExt) { + return toHalResult(mHandleExt->setMode(mode, enabled)); + } + ALOGV("Skipped setExtMode %s to %d because Power HAL AIDL not available", mode.c_str(), enabled); + return HalResult::unsupported(); +} + HalResult AidlHalWrapper::setExtBoost(const ::std::string& boost, int32_t durationMs) { std::unique_lock lock(mBoostMutex); if (mHandleExt) { -- GitLab