diff options
| author | 2022-04-25 17:50:19 +0000 | |
|---|---|---|
| committer | 2022-04-25 17:50:19 +0000 | |
| commit | f650f5de075d02cd95fd20eb895f066bec3ac085 (patch) | |
| tree | 69169788ae6acdc9efc181df3901ad064c2258e9 | |
| parent | 5d2ae3652bf48102b62ef811983ad23124768edd (diff) | |
| parent | 51aaecb909ae578d6e7634a3ce90fcf1339b663c (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>
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())); |