summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 6fa13eb0058b..6931f17dd1be 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 da083aff62ff..457c703b6332 100644
--- a/services/core/java/com/android/server/am/AppRestrictionController.java
+++ b/services/core/java/com/android/server/am/AppRestrictionController.java
@@ -2398,6 +2398,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 b8aee13ccdd7..d72ae2d391e3 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()));