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

Commit b2ee539a authored by Daniel Jacob Chittoor's avatar Daniel Jacob Chittoor
Browse files

Merge branch '852devices-t-powerext' into 'v1-t'

powermanager: Introduce PowerExt supported boosting

See merge request !6
parents 1a5e7de6 92b5e688
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@
#include <android/hardware/power/IPowerHintSession.h>
#include <android/hardware/power/Mode.h>
#include <powermanager/PowerHalWrapper.h>
#include <google/hardware/power/extension/pixel/IPowerExt.h>

using ::google::hardware::power::extension::pixel::IPowerExt;

namespace android {

@@ -55,6 +58,11 @@ public:

    void init();

    virtual HalResult<bool> isPowerExtAvailable() override;
    virtual HalResult<bool> isExtModeSupported(const ::std::string& mode) override;
    virtual HalResult<bool> isExtBoostSupported(const ::std::string& boost) override;
    virtual HalResult<void> setExtMode(const ::std::string& mode, bool enabled) override;
    virtual HalResult<void> setExtBoost(const ::std::string& boost, int32_t durationMs) override;
    virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
    virtual HalResult<void> setMode(hardware::power::Mode mode, bool enabled) override;
    virtual HalResult<sp<hardware::power::IPowerHintSession>> createHintSession(
+5 −1
Original line number Diff line number Diff line
@@ -20,6 +20,9 @@
#include <android-base/thread_annotations.h>
#include <android/hardware/power/1.1/IPower.h>
#include <android/hardware/power/IPower.h>
#include <google/hardware/power/extension/pixel/IPowerExt.h>

using ::google::hardware::power::extension::pixel::IPowerExt;

namespace android {

@@ -29,12 +32,13 @@ namespace power {
class PowerHalLoader {
public:
    static void unloadAll();
    static sp<hardware::power::IPower> loadAidl();
    static std::pair<sp<hardware::power::IPower>, sp<IPowerExt>> loadAidlAndExt();
    static sp<hardware::power::V1_0::IPower> loadHidlV1_0();
    static sp<hardware::power::V1_1::IPower> loadHidlV1_1();

private:
    static std::mutex gHalMutex;
    static sp<IPowerExt> gHalAidlExt GUARDED_BY(gHalMutex);
    static sp<hardware::power::IPower> gHalAidl GUARDED_BY(gHalMutex);
    static sp<hardware::power::V1_0::IPower> gHalHidlV1_0 GUARDED_BY(gHalMutex);
    static sp<hardware::power::V1_1::IPower> gHalHidlV1_1 GUARDED_BY(gHalMutex);
+26 −0
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@
#include <android/hardware/power/IPower.h>
#include <android/hardware/power/IPowerHintSession.h>
#include <android/hardware/power/Mode.h>
#include <google/hardware/power/extension/pixel/IPowerExt.h>

using ::google::hardware::power::extension::pixel::IPowerExt;

namespace android {

@@ -117,6 +120,11 @@ class HalWrapper {
public:
    virtual ~HalWrapper() = default;

    virtual HalResult<bool> isPowerExtAvailable() = 0;
    virtual HalResult<bool> isExtModeSupported(const ::std::string& mode) = 0;
    virtual HalResult<bool> isExtBoostSupported(const ::std::string& boost) = 0;
    virtual HalResult<void> setExtMode(const ::std::string& mode, bool enabled) = 0;
    virtual HalResult<void> setExtBoost(const ::std::string& boost, int32_t durationMs) = 0;
    virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) = 0;
    virtual HalResult<void> setMode(hardware::power::Mode mode, bool enabled) = 0;
    virtual HalResult<sp<hardware::power::IPowerHintSession>> createHintSession(
@@ -131,6 +139,11 @@ public:
    EmptyHalWrapper() = default;
    ~EmptyHalWrapper() = default;

    virtual HalResult<bool> isPowerExtAvailable() override;
    virtual HalResult<bool> isExtModeSupported(const ::std::string& mode) override;
    virtual HalResult<bool> isExtBoostSupported(const ::std::string& boost) override;
    virtual HalResult<void> setExtMode(const ::std::string& mode, bool enabled) override;
    virtual HalResult<void> setExtBoost(const ::std::string& boost, int32_t durationMs) override;
    virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
    virtual HalResult<void> setMode(hardware::power::Mode mode, bool enabled) override;
    virtual HalResult<sp<hardware::power::IPowerHintSession>> createHintSession(
@@ -146,6 +159,11 @@ public:
          : mHandleV1_0(std::move(Hal)) {}
    virtual ~HidlHalWrapperV1_0() = default;

    virtual HalResult<bool> isPowerExtAvailable() override;
    virtual HalResult<bool> isExtModeSupported(const ::std::string& mode) override;
    virtual HalResult<bool> isExtBoostSupported(const ::std::string& boost) override;
    virtual HalResult<void> setExtMode(const ::std::string& mode, bool enabled) override;
    virtual HalResult<void> setExtBoost(const ::std::string& boost, int32_t durationMs) override;
    virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
    virtual HalResult<void> setMode(hardware::power::Mode mode, bool enabled) override;
    virtual HalResult<sp<hardware::power::IPowerHintSession>> createHintSession(
@@ -182,8 +200,15 @@ private:
class AidlHalWrapper : public HalWrapper {
public:
    explicit AidlHalWrapper(sp<hardware::power::IPower> handle) : mHandle(std::move(handle)) {}
    explicit AidlHalWrapper(sp<hardware::power::IPower> handle, sp<IPowerExt> handleExt)
        : mHandle(std::move(handle)), mHandleExt(std::move(handleExt)) {}
    virtual ~AidlHalWrapper() = default;

    virtual HalResult<bool> isPowerExtAvailable() override;
    virtual HalResult<bool> isExtModeSupported(const ::std::string& mode) override;
    virtual HalResult<bool> isExtBoostSupported(const ::std::string& boost) override;
    virtual HalResult<void> setExtMode(const ::std::string& mode, bool enabled) override;
    virtual HalResult<void> setExtBoost(const ::std::string& boost, int32_t durationMs) override;
    virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
    virtual HalResult<void> setMode(hardware::power::Mode mode, bool enabled) override;
    virtual HalResult<sp<hardware::power::IPowerHintSession>> createHintSession(
@@ -196,6 +221,7 @@ private:
    std::mutex mBoostMutex;
    std::mutex mModeMutex;
    sp<hardware::power::IPower> mHandle;
    sp<IPowerExt> mHandleExt;
    // Android framework only sends boost upto DISPLAY_UPDATE_IMMINENT.
    // Need to increase the array size if more boost supported.
    std::array<std::atomic<HalSupport>,
+4 −0
Original line number Diff line number Diff line
@@ -41,6 +41,10 @@ cc_library_shared {
        "android.hardware.power-V3-cpp",
    ], 

    static_libs: [
        "//hardware/google/interfaces:pixel-power-ext-V1-cpp"
    ],

    cflags: [
        "-Wall",
        "-Werror",
+39 −3
Original line number Diff line number Diff line
@@ -33,9 +33,15 @@ namespace power {
// -------------------------------------------------------------------------------------------------

std::unique_ptr<HalWrapper> HalConnector::connect() {
    sp<IPower> halAidl = PowerHalLoader::loadAidl();
    if (halAidl) {
        return std::make_unique<AidlHalWrapper>(halAidl);
    std::pair<sp<IPower>, sp<IPowerExt>> halAidlAndExt = PowerHalLoader::loadAidlAndExt();
    sp<IPower> powerHal = halAidlAndExt.first;
    sp<IPowerExt> powerExtHal = halAidlAndExt.second;
    // Check validity of aidl power hal as well as the extension hal
    if (powerHal && powerExtHal) {
        return std::make_unique<AidlHalWrapper>(powerHal, powerExtHal);
    }
    if (powerHal) {
        return std::make_unique<AidlHalWrapper>(powerHal);
    }
    sp<V1_0::IPower> halHidlV1_0 = PowerHalLoader::loadHidlV1_0();
    sp<V1_1::IPower> halHidlV1_1 = PowerHalLoader::loadHidlV1_1();
@@ -86,6 +92,36 @@ HalResult<T> PowerHalController::processHalResult(HalResult<T> result, const cha
    return result;
}

HalResult<bool> PowerHalController::isPowerExtAvailable() {
    std::shared_ptr<HalWrapper> handle = initHal();
    auto result = handle->isPowerExtAvailable();
    return processHalResult(result, "isPowerExtAvailable");
}

HalResult<bool> PowerHalController::isExtModeSupported(const ::std::string& mode) {
    std::shared_ptr<HalWrapper> handle = initHal();
    auto result = handle->isExtModeSupported(mode);
    return processHalResult(result, "isExtModeSupported");
}

HalResult<bool> PowerHalController::isExtBoostSupported(const ::std::string& boost) {
    std::shared_ptr<HalWrapper> handle = initHal();
    auto result = handle->isExtBoostSupported(boost);
    return processHalResult(result, "isPowerExtAvailable");
}

HalResult<void> PowerHalController::setExtMode(const ::std::string& mode, bool enabled) {
    std::shared_ptr<HalWrapper> handle = initHal();
    auto result = handle->setExtMode(mode, enabled);
    return processHalResult(result, "setExtMode");
}

HalResult<void> PowerHalController::setExtBoost(const ::std::string& boost, int32_t durationMs) {
    std::shared_ptr<HalWrapper> handle = initHal();
    auto result = handle->setExtBoost(boost, durationMs);
    return processHalResult(result, "setExtBoost");
}

HalResult<void> PowerHalController::setBoost(Boost boost, int32_t durationMs) {
    std::shared_ptr<HalWrapper> handle = initHal();
    auto result = handle->setBoost(boost, durationMs);
Loading