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: Ic9613ff414a8a1f53c71906427f5317b8d1f9566 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:
@@ -287,7 +287,10 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
byte[] getTrackerInfoForStatsd(int uid) {
|
byte[] getTrackerInfoForStatsd(int uid) {
|
||||||
final ImmutableBatteryUsage temp = mUidBatteryUsageInWindow.get(uid);
|
final ImmutableBatteryUsage temp;
|
||||||
|
synchronized (mLock) {
|
||||||
|
temp = mUidBatteryUsageInWindow.get(uid);
|
||||||
|
}
|
||||||
if (temp == null) {
|
if (temp == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ import static com.android.server.am.BaseAppStateTracker.ONE_DAY;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.app.ActivityManagerInternal.BindServiceEventListener;
|
import android.app.ActivityManagerInternal.BindServiceEventListener;
|
||||||
import android.content.Context;
|
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.AppBindServiceEventsTracker.AppBindServiceEventsPolicy;
|
||||||
import com.android.server.am.AppRestrictionController.TrackerType;
|
import com.android.server.am.AppRestrictionController.TrackerType;
|
||||||
@@ -81,6 +84,22 @@ final class AppBindServiceEventsTracker extends BaseAppStateTimeSlotEventsTracke
|
|||||||
return new SimpleAppStateTimeslotEvents(other);
|
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
|
@Override
|
||||||
void dump(PrintWriter pw, String prefix) {
|
void dump(PrintWriter pw, String prefix) {
|
||||||
pw.print(prefix);
|
pw.print(prefix);
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ import static com.android.server.am.BaseAppStateTracker.ONE_DAY;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.app.ActivityManagerInternal.BroadcastEventListener;
|
import android.app.ActivityManagerInternal.BroadcastEventListener;
|
||||||
import android.content.Context;
|
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.AppBroadcastEventsTracker.AppBroadcastEventsPolicy;
|
||||||
import com.android.server.am.AppRestrictionController.TrackerType;
|
import com.android.server.am.AppRestrictionController.TrackerType;
|
||||||
@@ -80,6 +83,21 @@ final class AppBroadcastEventsTracker extends BaseAppStateTimeSlotEventsTracker
|
|||||||
return new SimpleAppStateTimeslotEvents(other);
|
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
|
@Override
|
||||||
void dump(PrintWriter pw, String prefix) {
|
void dump(PrintWriter pw, String prefix) {
|
||||||
pw.print(prefix);
|
pw.print(prefix);
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import android.app.IProcessObserver;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ServiceInfo.ForegroundServiceType;
|
import android.content.pm.ServiceInfo.ForegroundServiceType;
|
||||||
|
import android.os.AppBackgroundRestrictionsInfo;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.PowerExemptionManager.ReasonCode;
|
import android.os.PowerExemptionManager.ReasonCode;
|
||||||
@@ -49,6 +50,7 @@ import android.util.Slog;
|
|||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import android.util.SparseBooleanArray;
|
import android.util.SparseBooleanArray;
|
||||||
import android.util.TimeUtils;
|
import android.util.TimeUtils;
|
||||||
|
import android.util.proto.ProtoOutputStream;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
@@ -516,6 +518,12 @@ final class AppFGSTracker extends BaseAppStateDurationsTracker<AppFGSPolicy, Pac
|
|||||||
foregroundServiceTypeToIndex(FOREGROUND_SERVICE_TYPE_NONE));
|
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) {
|
boolean hasForegroundServices(String packageName, int uid) {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
final PackageDurations pkg = mPkgEvents.get(uid, packageName);
|
final PackageDurations pkg = mPkgEvents.get(uid, packageName);
|
||||||
@@ -561,6 +569,21 @@ final class AppFGSTracker extends BaseAppStateDurationsTracker<AppFGSPolicy, Pac
|
|||||||
return false;
|
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
|
@Override
|
||||||
void dump(PrintWriter pw, String prefix) {
|
void dump(PrintWriter pw, String prefix) {
|
||||||
pw.print(prefix);
|
pw.print(prefix);
|
||||||
|
|||||||
@@ -2435,6 +2435,21 @@ public final class AppRestrictionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void postLongRunningFgsIfNecessary(String packageName, int uid) {
|
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;
|
PendingIntent pendingIntent;
|
||||||
if (!mBgController.mConstantsObserver.mBgPromptFgsWithNotiOnLongRunning
|
if (!mBgController.mConstantsObserver.mBgPromptFgsWithNotiOnLongRunning
|
||||||
&& mBgController.hasForegroundServiceNotifications(packageName, uid)) {
|
&& mBgController.hasForegroundServiceNotifications(packageName, uid)) {
|
||||||
|
|||||||
@@ -133,6 +133,15 @@ abstract class BaseAppStateTimeSlotEventsTracker
|
|||||||
mTmpPkgs.clear();
|
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() {
|
private void trimEvents() {
|
||||||
final long now = SystemClock.elapsedRealtime();
|
final long now = SystemClock.elapsedRealtime();
|
||||||
trim(Math.max(0, now - mInjector.getPolicy().getMaxTrackingDuration()));
|
trim(Math.max(0, now - mInjector.getPolicy().getMaxTrackingDuration()));
|
||||||
|
|||||||
Reference in New Issue
Block a user