diff --git a/services/core/java/com/android/server/am/AppBatteryTracker.java b/services/core/java/com/android/server/am/AppBatteryTracker.java index 9ce2751432e59..9894a52b58e10 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 */ @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 9bed077785f50..f9443226b6927 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; @@ -81,6 +84,22 @@ final class AppBindServiceEventsTracker extends BaseAppStateTimeSlotEventsTracke return new SimpleAppStateTimeslotEvents(other); } + @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); diff --git a/services/core/java/com/android/server/am/AppBroadcastEventsTracker.java b/services/core/java/com/android/server/am/AppBroadcastEventsTracker.java index a9155a1153894..b509008f31df5 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; @@ -80,6 +83,21 @@ final class AppBroadcastEventsTracker extends BaseAppStateTimeSlotEventsTracker return new SimpleAppStateTimeslotEvents(other); } + @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); diff --git a/services/core/java/com/android/server/am/AppFGSTracker.java b/services/core/java/com/android/server/am/AppFGSTracker.java index ddd27647c9701..50515cd923d1f 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