summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andy Yu <chingtangyu@google.com> 2024-06-12 23:18:23 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-06-12 23:18:23 +0000
commitd7d42ee6cceca8bb9f3cffc8b5eff0a070e2d4fc (patch)
treea3928a08dd8d6abc2e874e7925391a14bb2fe819
parent4566439228fb619812d9961453edf0a8a279c873 (diff)
parentd63795f0a5c0496ccbb090868f73b81ddcc9f361 (diff)
Merge "Add atom logging for ADPF sessionTag" into main
-rw-r--r--services/core/java/com/android/server/power/hint/HintManagerService.java48
-rw-r--r--services/core/java/com/android/server/power/hint/TEST_MAPPING8
-rw-r--r--services/core/java/com/android/server/power/hint/flags.aconfig7
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"
+}