summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jing Ji <jji@google.com> 2022-04-25 17:50:19 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-04-25 17:50:19 +0000
commitf650f5de075d02cd95fd20eb895f066bec3ac085 (patch)
tree69169788ae6acdc9efc181df3901ad064c2258e9
parent5d2ae3652bf48102b62ef811983ad23124768edd (diff)
parent51aaecb909ae578d6e7634a3ce90fcf1339b663c (diff)
Merge "Add other tracker info in the bg restriction metrics" into tm-dev am: 839f3298ad am: 51aaecb909
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17924962 Change-Id: I3c48b5867f6e9b97c2647526c6dbc01acf92ebe1 Ignore-AOSP-First: this is an automerge Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/core/java/com/android/server/am/AppBatteryTracker.java5
-rw-r--r--services/core/java/com/android/server/am/AppBindServiceEventsTracker.java19
-rw-r--r--services/core/java/com/android/server/am/AppBroadcastEventsTracker.java18
-rw-r--r--services/core/java/com/android/server/am/AppFGSTracker.java23
-rw-r--r--services/core/java/com/android/server/am/AppRestrictionController.java15
-rw-r--r--services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java9
6 files changed, 88 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/AppBatteryTracker.java b/services/core/java/com/android/server/am/AppBatteryTracker.java
index 9ce2751432e5..9894a52b58e1 100644
--- a/services/core/java/com/android/server/am/AppBatteryTracker.java
+++ b/services/core/java/com/android/server/am/AppBatteryTracker.java
@@ -287,7 +287,10 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
*/
@Override
byte[] getTrackerInfoForStatsd(int uid) {
- final ImmutableBatteryUsage temp = mUidBatteryUsageInWindow.get(uid);
+ final ImmutableBatteryUsage temp;
+ synchronized (mLock) {
+ temp = mUidBatteryUsageInWindow.get(uid);
+ }
if (temp == null) {
return null;
}
diff --git a/services/core/java/com/android/server/am/AppBindServiceEventsTracker.java b/services/core/java/com/android/server/am/AppBindServiceEventsTracker.java
index 9bed077785f5..f9443226b692 100644
--- a/services/core/java/com/android/server/am/AppBindServiceEventsTracker.java
+++ b/services/core/java/com/android/server/am/AppBindServiceEventsTracker.java
@@ -24,6 +24,9 @@ import static com.android.server.am.BaseAppStateTracker.ONE_DAY;
import android.annotation.NonNull;
import android.app.ActivityManagerInternal.BindServiceEventListener;
import android.content.Context;
+import android.os.AppBackgroundRestrictionsInfo;
+import android.os.SystemClock;
+import android.util.proto.ProtoOutputStream;
import com.android.server.am.AppBindServiceEventsTracker.AppBindServiceEventsPolicy;
import com.android.server.am.AppRestrictionController.TrackerType;
@@ -82,6 +85,22 @@ final class AppBindServiceEventsTracker extends BaseAppStateTimeSlotEventsTracke
}
@Override
+ byte[] getTrackerInfoForStatsd(int uid) {
+ final long now = SystemClock.elapsedRealtime();
+ final int numOfBindRequests = getTotalEventsLocked(uid, now);
+ if (numOfBindRequests == 0) {
+ // Not interested.
+ return null;
+ }
+ final ProtoOutputStream proto = new ProtoOutputStream();
+ proto.write(
+ AppBackgroundRestrictionsInfo.BindServiceEventsTrackerInfo.BIND_SERVICE_REQUESTS,
+ numOfBindRequests);
+ proto.flush();
+ return proto.getBytes();
+ }
+
+ @Override
void dump(PrintWriter pw, String prefix) {
pw.print(prefix);
pw.println("APP BIND SERVICE EVENT TRACKER:");
diff --git a/services/core/java/com/android/server/am/AppBroadcastEventsTracker.java b/services/core/java/com/android/server/am/AppBroadcastEventsTracker.java
index a9155a115389..b509008f31df 100644
--- a/services/core/java/com/android/server/am/AppBroadcastEventsTracker.java
+++ b/services/core/java/com/android/server/am/AppBroadcastEventsTracker.java
@@ -24,6 +24,9 @@ import static com.android.server.am.BaseAppStateTracker.ONE_DAY;
import android.annotation.NonNull;
import android.app.ActivityManagerInternal.BroadcastEventListener;
import android.content.Context;
+import android.os.AppBackgroundRestrictionsInfo;
+import android.os.SystemClock;
+import android.util.proto.ProtoOutputStream;
import com.android.server.am.AppBroadcastEventsTracker.AppBroadcastEventsPolicy;
import com.android.server.am.AppRestrictionController.TrackerType;
@@ -81,6 +84,21 @@ final class AppBroadcastEventsTracker extends BaseAppStateTimeSlotEventsTracker
}
@Override
+ byte[] getTrackerInfoForStatsd(int uid) {
+ final long now = SystemClock.elapsedRealtime();
+ final int numOfBroadcasts = getTotalEventsLocked(uid, now);
+ if (numOfBroadcasts == 0) {
+ // Not interested.
+ return null;
+ }
+ final ProtoOutputStream proto = new ProtoOutputStream();
+ proto.write(AppBackgroundRestrictionsInfo.BroadcastEventsTrackerInfo.BROADCASTS_SENT,
+ numOfBroadcasts);
+ proto.flush();
+ return proto.getBytes();
+ }
+
+ @Override
void dump(PrintWriter pw, String prefix) {
pw.print(prefix);
pw.println("APP BROADCAST EVENT TRACKER:");
diff --git a/services/core/java/com/android/server/am/AppFGSTracker.java b/services/core/java/com/android/server/am/AppFGSTracker.java
index ddd27647c970..50515cd923d1 100644
--- a/services/core/java/com/android/server/am/AppFGSTracker.java
+++ b/services/core/java/com/android/server/am/AppFGSTracker.java
@@ -35,6 +35,7 @@ import android.app.IProcessObserver;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ServiceInfo.ForegroundServiceType;
+import android.os.AppBackgroundRestrictionsInfo;
import android.os.Handler;
import android.os.Message;
import android.os.PowerExemptionManager.ReasonCode;
@@ -49,6 +50,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.TimeUtils;
+import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -516,6 +518,12 @@ final class AppFGSTracker extends BaseAppStateDurationsTracker<AppFGSPolicy, Pac
foregroundServiceTypeToIndex(FOREGROUND_SERVICE_TYPE_NONE));
}
+ @Override
+ long getTotalDurations(int uid, long now) {
+ return getTotalDurations(uid, now,
+ foregroundServiceTypeToIndex(FOREGROUND_SERVICE_TYPE_NONE));
+ }
+
boolean hasForegroundServices(String packageName, int uid) {
synchronized (mLock) {
final PackageDurations pkg = mPkgEvents.get(uid, packageName);
@@ -562,6 +570,21 @@ final class AppFGSTracker extends BaseAppStateDurationsTracker<AppFGSPolicy, Pac
}
@Override
+ byte[] getTrackerInfoForStatsd(int uid) {
+ final long fgsDurations = getTotalDurations(uid, SystemClock.elapsedRealtime());
+ if (fgsDurations == 0L) {
+ // Not interested
+ return null;
+ }
+ final ProtoOutputStream proto = new ProtoOutputStream();
+ proto.write(AppBackgroundRestrictionsInfo.FgsTrackerInfo.FGS_NOTIFICATION_VISIBLE,
+ hasForegroundServiceNotifications(uid));
+ proto.write(AppBackgroundRestrictionsInfo.FgsTrackerInfo.FGS_DURATION, fgsDurations);
+ proto.flush();
+ return proto.getBytes();
+ }
+
+ @Override
void dump(PrintWriter pw, String prefix) {
pw.print(prefix);
pw.println("APP FOREGROUND SERVICE TRACKER:");
diff --git a/services/core/java/com/android/server/am/AppRestrictionController.java b/services/core/java/com/android/server/am/AppRestrictionController.java
index 7b763b7d5f9f..0c1ab8178b38 100644
--- a/services/core/java/com/android/server/am/AppRestrictionController.java
+++ b/services/core/java/com/android/server/am/AppRestrictionController.java
@@ -2435,6 +2435,21 @@ public final class AppRestrictionController {
}
void postLongRunningFgsIfNecessary(String packageName, int uid) {
+ // Log the event in statsd.
+ FrameworkStatsLog.write(FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO,
+ uid,
+ mBgController.getRestrictionLevel(uid),
+ AppBackgroundRestrictionsInfo.THRESHOLD_UNKNOWN,
+ AppBackgroundRestrictionsInfo.FGS_TRACKER,
+ mInjector.getAppFGSTracker().getTrackerInfoForStatsd(uid),
+ null, // BatteryTrackerInfo
+ null, // BroadcastEventsTrackerInfo
+ null, // BindServiceEventsTrackerInfo
+ getExemptionReasonForStatsd(
+ mBgController.getBackgroundRestrictionExemptionReason(uid)),
+ AppBackgroundRestrictionsInfo.UNKNOWN, // OptimizationLevel
+ AppBackgroundRestrictionsInfo.SDK_UNKNOWN, // TargetSdk
+ ActivityManager.isLowRamDeviceStatic());
PendingIntent pendingIntent;
if (!mBgController.mConstantsObserver.mBgPromptFgsWithNotiOnLongRunning
&& mBgController.hasForegroundServiceNotifications(packageName, uid)) {
diff --git a/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java b/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java
index a12d7deeeb05..ff78355121d5 100644
--- a/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java
+++ b/services/core/java/com/android/server/am/BaseAppStateTimeSlotEventsTracker.java
@@ -133,6 +133,15 @@ abstract class BaseAppStateTimeSlotEventsTracker
mTmpPkgs.clear();
}
+ @GuardedBy("mLock")
+ int getTotalEventsLocked(int uid, long now) {
+ final U events = getUidEventsLocked(uid);
+ if (events == null) {
+ return 0;
+ }
+ return events.getTotalEvents(now, SimpleAppStateTimeslotEvents.DEFAULT_INDEX);
+ }
+
private void trimEvents() {
final long now = SystemClock.elapsedRealtime();
trim(Math.max(0, now - mInjector.getPolicy().getMaxTrackingDuration()));