diff --git a/power-libperfmgr/Power.cpp b/power-libperfmgr/Power.cpp index 53cf3bd..ee2ee4a 100644 --- a/power-libperfmgr/Power.cpp +++ b/power-libperfmgr/Power.cpp @@ -47,6 +47,13 @@ constexpr char kPowerHalStateProp[] = "vendor.powerhal.state"; constexpr char kPowerHalAudioProp[] = "vendor.powerhal.audio"; constexpr char kPowerHalRenderingProp[] = "vendor.powerhal.rendering"; +static const std::vector kAlwaysAllowedModes = { + Mode::DOUBLE_TAP_TO_WAKE, + Mode::INTERACTIVE, + Mode::DEVICE_IDLE, + Mode::DISPLAY_INACTIVE, +}; + Power::Power() : mInteractionHandler(nullptr), mSustainedPerfModeOn(false), @@ -79,6 +86,10 @@ Power::Power() static void endAllHints() { std::shared_ptr hm = HintManager::GetInstance(); for (auto hint : hm->GetHints()) { + if (std::any_of(kAlwaysAllowedModes.begin(), kAlwaysAllowedModes.end(), + [hint](auto mode) { return hint == toString(mode); })) { + continue; + } hm->EndHint(hint); } } @@ -132,7 +143,8 @@ ndk::ScopedAStatus Power::setMode(Mode type, bool enabled) { case Mode::AUDIO_STREAMING_LOW_LATENCY: [[fallthrough]]; default: - if (mBatterySaverOn || mSustainedPerfModeOn) { + if ((mBatterySaverOn || mSustainedPerfModeOn) && std::find(kAlwaysAllowedModes.begin(), + kAlwaysAllowedModes.end(), type) == kAlwaysAllowedModes.end()) { break; } if (enabled) {