diff options
| author | 2024-06-12 23:18:23 +0000 | |
|---|---|---|
| committer | 2024-06-12 23:18:23 +0000 | |
| commit | d7d42ee6cceca8bb9f3cffc8b5eff0a070e2d4fc (patch) | |
| tree | a3928a08dd8d6abc2e874e7925391a14bb2fe819 | |
| parent | 4566439228fb619812d9961453edf0a8a279c873 (diff) | |
| parent | d63795f0a5c0496ccbb090868f73b81ddcc9f361 (diff) | |
Merge "Add atom logging for ADPF sessionTag" into main
3 files changed, 57 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/power/hint/HintManagerService.java b/services/core/java/com/android/server/power/hint/HintManagerService.java index df502eb08be2..06595acfd012 100644 --- a/services/core/java/com/android/server/power/hint/HintManagerService.java +++ b/services/core/java/com/android/server/power/hint/HintManagerService.java @@ -19,6 +19,7 @@ package com.android.server.power.hint; import static android.os.Flags.adpfUseFmqChannel; import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; +import static com.android.server.power.hint.Flags.adpfSessionTag; import static com.android.server.power.hint.Flags.powerhintThreadCleanup; import android.annotation.NonNull; @@ -28,6 +29,8 @@ import android.app.ActivityManagerInternal; import android.app.StatsManager; import android.app.UidObserver; import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.hardware.power.ChannelConfig; import android.hardware.power.IPower; import android.hardware.power.SessionConfig; @@ -130,6 +133,7 @@ public final class HintManagerService extends SystemService { private final IPower mPowerHal; private int mPowerHalVersion; + private final PackageManager mPackageManager; private static final String PROPERTY_SF_ENABLE_CPU_HINT = "debug.sf.enable_adpf_cpu_hint"; private static final String PROPERTY_HWUI_ENABLE_HINT_MANAGER = "debug.hwui.use_hint_manager"; @@ -151,6 +155,11 @@ public final class HintManagerService extends SystemService { mCleanUpHandler = null; mNonIsolatedTids = null; } + if (adpfSessionTag()) { + mPackageManager = mContext.getPackageManager(); + } else { + mPackageManager = null; + } mActiveSessions = new ArrayMap<>(); mChannelMap = new ArrayMap<>(); mNativeWrapper = injector.createNativeWrapper(); @@ -819,6 +828,25 @@ public final class HintManagerService extends SystemService { throw new SecurityException(errMsg); } + if (adpfSessionTag() && tag == SessionTag.APP) { + // If the category of the app is a game, + // we change the session tag to SessionTag.GAME + // as it was not previously classified + switch (getUidApplicationCategory(callingUid)) { + case ApplicationInfo.CATEGORY_GAME: + tag = SessionTag.GAME; + break; + case ApplicationInfo.CATEGORY_UNDEFINED: + // We use CATEGORY_UNDEFINED to filter the case when + // PackageManager.NameNotFoundException is caught, + // which should not happen. + tag = SessionTag.APP; + break; + default: + tag = SessionTag.APP; + } + } + Long halSessionPtr = null; if (mConfigCreationSupport.get()) { try { @@ -857,7 +885,10 @@ public final class HintManagerService extends SystemService { } } - logPerformanceHintSessionAtom(callingUid, halSessionPtr, durationNanos, tids); + final long sessionId = config != null ? config.id : halSessionPtr; + logPerformanceHintSessionAtom( + callingUid, sessionId, durationNanos, tids, tag); + synchronized (mLock) { AppHintSession hs = new AppHintSession(callingUid, callingTgid, tids, token, halSessionPtr, durationNanos); @@ -944,9 +975,20 @@ public final class HintManagerService extends SystemService { } private void logPerformanceHintSessionAtom(int uid, long sessionId, - long targetDuration, int[] tids) { + long targetDuration, int[] tids, @SessionTag int sessionTag) { FrameworkStatsLog.write(FrameworkStatsLog.PERFORMANCE_HINT_SESSION_REPORTED, uid, - sessionId, targetDuration, tids.length); + sessionId, targetDuration, tids.length, sessionTag); + } + + private int getUidApplicationCategory(int uid) { + try { + final String packageName = mPackageManager.getNameForUid(uid); + final ApplicationInfo applicationInfo = + mPackageManager.getApplicationInfo(packageName, PackageManager.MATCH_ALL); + return applicationInfo.category; + } catch (PackageManager.NameNotFoundException e) { + return ApplicationInfo.CATEGORY_UNDEFINED; + } } } diff --git a/services/core/java/com/android/server/power/hint/TEST_MAPPING b/services/core/java/com/android/server/power/hint/TEST_MAPPING index ce6277d2f490..34c25c6eb360 100644 --- a/services/core/java/com/android/server/power/hint/TEST_MAPPING +++ b/services/core/java/com/android/server/power/hint/TEST_MAPPING @@ -10,16 +10,18 @@ "exclude-annotation": "androidx.test.filters.FlakyTest" } ] - }, + } + ], + "postsubmit": [ { "name": "CtsStatsdAtomHostTestCases", "options": [ {"exclude-annotation": "androidx.test.filters.FlakyTest"}, {"exclude-annotation": "org.junit.Ignore"}, - {"include-filter": "android.cts.statsdatom.powermanager"} + {"include-filter": "android.cts.statsdatom.performancehintmanager"} ], "file_patterns": [ - "(/|^)ThermalManagerService.java" + "(/|^)HintManagerService.java" ] } ] diff --git a/services/core/java/com/android/server/power/hint/flags.aconfig b/services/core/java/com/android/server/power/hint/flags.aconfig index 099774420d23..55afa05f66fe 100644 --- a/services/core/java/com/android/server/power/hint/flags.aconfig +++ b/services/core/java/com/android/server/power/hint/flags.aconfig @@ -7,3 +7,10 @@ flag { description: "Feature flag for auto PowerHintSession dead thread cleanup" bug: "296160319" } + +flag { + name: "adpf_session_tag" + namespace: "game" + description: "Feature flag for adding session tag to hint session atom" + bug: "345011125" +} |