[DO NOT MERGE] Add Atom logging for ADPF Telemetry am: 52256be77e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20751827

Change-Id: Ibddf69a9b93c135fb5d786f2404af1198fc140c7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Andy Yu
2022-12-19 18:38:52 +00:00
committed by Automerger Merge Worker

View File

@@ -16,9 +16,11 @@
package com.android.server.power.hint;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.IUidObserver;
import android.app.StatsManager;
import android.content.Context;
import android.os.Binder;
import android.os.IBinder;
@@ -26,13 +28,17 @@ import android.os.IHintManager;
import android.os.IHintSession;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.SparseArray;
import android.util.StatsEvent;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.Preconditions;
import com.android.server.FgThread;
import com.android.server.LocalServices;
@@ -52,7 +58,7 @@ public final class HintManagerService extends SystemService {
private static final boolean DEBUG = false;
@VisibleForTesting final long mHintSessionPreferredRate;
// Multi-levle map storing all active AppHintSessions.
// Multi-level map storing all active AppHintSessions.
// First level is keyed by the UID of the client process creating the session.
// Second level is keyed by an IBinder passed from client process. This is used to observe
// when the process exits. The client generally uses the same IBinder object across multiple
@@ -69,6 +75,11 @@ public final class HintManagerService extends SystemService {
private final ActivityManagerInternal mAmInternal;
private final Context mContext;
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";
@VisibleForTesting final IHintManager.Stub mService = new BinderService();
public HintManagerService(Context context) {
@@ -78,6 +89,7 @@ public final class HintManagerService extends SystemService {
@VisibleForTesting
HintManagerService(Context context, Injector injector) {
super(context);
mContext = context;
mActiveSessions = new ArrayMap<>();
mNativeWrapper = injector.createNativeWrapper();
mNativeWrapper.halInit();
@@ -108,6 +120,9 @@ public final class HintManagerService extends SystemService {
if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
systemReady();
}
if (phase == SystemService.PHASE_BOOT_COMPLETED) {
registerStatsCallbacks();
}
}
private void systemReady() {
@@ -122,6 +137,30 @@ public final class HintManagerService extends SystemService {
}
private void registerStatsCallbacks() {
final StatsManager statsManager = mContext.getSystemService(StatsManager.class);
statsManager.setPullAtomCallback(
FrameworkStatsLog.ADPF_SYSTEM_COMPONENT_INFO,
null, // use default PullAtomMetadata values
BackgroundThread.getExecutor(),
this::onPullAtom);
}
private int onPullAtom(int atomTag, @NonNull List<StatsEvent> data) {
if (atomTag == FrameworkStatsLog.ADPF_SYSTEM_COMPONENT_INFO) {
final boolean isSurfaceFlingerUsingCpuHint =
SystemProperties.getBoolean(PROPERTY_SF_ENABLE_CPU_HINT, false);
final boolean isHwuiHintManagerEnabled =
SystemProperties.getBoolean(PROPERTY_HWUI_ENABLE_HINT_MANAGER, false);
data.add(FrameworkStatsLog.buildStatsEvent(
FrameworkStatsLog.ADPF_SYSTEM_COMPONENT_INFO,
isSurfaceFlingerUsingCpuHint,
isHwuiHintManagerEnabled));
}
return android.app.StatsManager.PULL_SUCCESS;
}
/**
* Wrapper around the static-native methods from native.
*
@@ -326,6 +365,7 @@ public final class HintManagerService extends SystemService {
AppHintSession hs = new AppHintSession(callingUid, callingTgid, tids, token,
halSessionPtr, durationNanos);
logPerformanceHintSessionAtom(callingUid, halSessionPtr, durationNanos, tids);
synchronized (mLock) {
ArrayMap<IBinder, ArraySet<AppHintSession>> tokenMap =
mActiveSessions.get(callingUid);
@@ -374,6 +414,12 @@ public final class HintManagerService extends SystemService {
}
}
}
private void logPerformanceHintSessionAtom(int uid, long sessionId,
long targetDuration, int[] tids) {
FrameworkStatsLog.write(FrameworkStatsLog.PERFORMANCE_HINT_SESSION_REPORTED, uid,
sessionId, targetDuration, tids.length);
}
}
@VisibleForTesting