Merge "Add other tracker info in the bg restriction metrics" into tm-dev am: 839f3298ad

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

Change-Id: I0612f8319e68c41b1eb9294ffae8c46ba3998333
Ignore-AOSP-First: this is an automerge
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jing Ji
2022-04-25 17:22:49 +00:00
committed by Automerger Merge Worker
6 changed files with 88 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
@@ -561,6 +569,21 @@ final class AppFGSTracker extends BaseAppStateDurationsTracker<AppFGSPolicy, Pac
return false;
}
@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);

View File

@@ -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)) {

View File

@@ -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()));