From be068a80617d7fa0874d92fb7aeacf95603fa386 Mon Sep 17 00:00:00 2001 From: Matt Buckley Date: Thu, 18 Jul 2024 20:16:00 +0530 Subject: [PATCH] sm6375-common: power-libperfmgr: Ignore system hint sessions for universal boost Currently PowerHAL does not distinguish between system processes and apps when deciding whether to apply universal boost. This patch distinguishes system sessions and app sessions and ignores system ones, making the disabling of universal boost dependent on the presence of app hint sessions. Bug: b/230511824 Test: manual Change-Id: I08dea29b3a45f2ba69ed99a9f188fa83ba143423 --- power-libperfmgr/PowerHintSession.cpp | 9 +++++++++ power-libperfmgr/PowerHintSession.h | 2 ++ power-libperfmgr/PowerSessionManager.cpp | 6 +++--- power-libperfmgr/PowerSessionManager.h | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/power-libperfmgr/PowerHintSession.cpp b/power-libperfmgr/PowerHintSession.cpp index deb5ebd..c562b06 100644 --- a/power-libperfmgr/PowerHintSession.cpp +++ b/power-libperfmgr/PowerHintSession.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -183,7 +184,15 @@ std::string PowerHintSession::getIdString() const { return idstr; } +bool PowerHintSession::isAppSession() { + // Check if uid is in range reserved for applications + return mDescriptor->uid >= AID_APP_START; +} + void PowerHintSession::updateUniveralBoostMode() { + if (!isAppSession()) { + return; + } if (ATRACE_ENABLED()) { const std::string tag = StringPrintf("%s:updateUniveralBoostMode()", getIdString().c_str()); ATRACE_BEGIN(tag.c_str()); diff --git a/power-libperfmgr/PowerHintSession.h b/power-libperfmgr/PowerHintSession.h index bd5882c..4b28457 100644 --- a/power-libperfmgr/PowerHintSession.h +++ b/power-libperfmgr/PowerHintSession.h @@ -87,6 +87,8 @@ class PowerHintSession : public BnPowerHintSession { const std::vector &actualDurations) override; bool isActive(); bool isStale(); + // Is this hint session for a user application + bool isAppSession(); const std::vector &getTidList() const; int restoreUclamp(); diff --git a/power-libperfmgr/PowerSessionManager.cpp b/power-libperfmgr/PowerSessionManager.cpp index 7877a6a..be03e44 100644 --- a/power-libperfmgr/PowerSessionManager.cpp +++ b/power-libperfmgr/PowerSessionManager.cpp @@ -91,12 +91,12 @@ void PowerSessionManager::removePowerSession(PowerHintSession *session) { mSessions.erase(session); } -std::optional PowerSessionManager::isAnySessionActive() { +std::optional PowerSessionManager::isAnyAppSessionActive() { std::lock_guard guard(mLock); bool active = false; for (PowerHintSession *s : mSessions) { // session active and not stale is actually active. - if (s->isActive() && !s->isStale()) { + if (s->isActive() && !s->isStale() && s->isAppSession()) { active = true; break; } @@ -111,7 +111,7 @@ std::optional PowerSessionManager::isAnySessionActive() { } void PowerSessionManager::handleMessage(const Message &) { - auto active = isAnySessionActive(); + auto active = isAnyAppSessionActive(); if (!active.has_value()) { return; } diff --git a/power-libperfmgr/PowerSessionManager.h b/power-libperfmgr/PowerSessionManager.h index 0b68a0b..9d3a7de 100644 --- a/power-libperfmgr/PowerSessionManager.h +++ b/power-libperfmgr/PowerSessionManager.h @@ -59,7 +59,7 @@ class PowerSessionManager : public MessageHandler { } private: - std::optional isAnySessionActive(); + std::optional isAnyAppSessionActive(); void disableSystemTopAppBoost(); void enableSystemTopAppBoost(); const std::string kDisableBoostHintName;