Loading services/core/java/com/android/server/am/ActivityManagerService.java +27 −0 Original line number Diff line number Diff line Loading @@ -9209,6 +9209,10 @@ public class ActivityManagerService extends IActivityManager.Stub mAppRestrictionController.dump(pw, ""); } void dumpAppRestrictionController(ProtoOutputStream proto, int uid) { mAppRestrictionController.dumpAsProto(proto, uid); } /** * Wrapper function to print out debug data filtered by specified arguments. */ Loading Loading @@ -9321,6 +9325,29 @@ public class ActivityManagerService extends IActivityManager.Stub mProcessList.writeProcessesToProtoLSP(proto, dumpPackage); } } } else if ("app-restrictions".equals(cmd)) { int uid = Process.INVALID_UID; boolean error = false; for (int i = 0; i < args.length; i++) { if ("--uid".equals(args[i])) { if (i + 1 < args.length) { try { uid = Integer.parseInt(args[i + 1]); } catch (NumberFormatException e) { error = true; } } else { error = true; } break; } } if (error) { pw.println("Invalid --uid argument"); pw.println("Use -h for help."); } else { dumpAppRestrictionController(proto, uid); } } else { // default option, dump everything, output is ActivityManagerServiceProto synchronized (this) { Loading services/core/java/com/android/server/am/AppBatteryTracker.java +68 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.content.Context; import android.content.pm.ServiceInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.os.AppBatteryStatsProto; import android.os.BatteryConsumer; import android.os.BatteryConsumer.Dimensions; import android.os.BatteryStatsInternal; Loading @@ -62,6 +63,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.R; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -676,6 +678,63 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> super.dump(pw, prefix); } @Override void dumpAsProto(ProtoOutputStream proto, int uid) { synchronized (mLock) { final SparseArray<ImmutableBatteryUsage> uidConsumers = mUidBatteryUsageInWindow; if (uid != android.os.Process.INVALID_UID) { final BatteryUsage usage = uidConsumers.get(uid); if (usage != null) { dumpUidStats(proto, uid, usage); } } else { for (int i = 0, size = uidConsumers.size(); i < size; i++) { final int aUid = uidConsumers.keyAt(i); final BatteryUsage usage = uidConsumers.valueAt(i); dumpUidStats(proto, aUid, usage); } } } } private void dumpUidStats(ProtoOutputStream proto, int uid, BatteryUsage usage) { if (usage.mUsage == null) { return; } final double foregroundUsage = usage.getUsagePowerMah(PROCESS_STATE_FOREGROUND); final double backgroundUsage = usage.getUsagePowerMah(PROCESS_STATE_BACKGROUND); final double fgsUsage = usage.getUsagePowerMah(PROCESS_STATE_FOREGROUND_SERVICE); if (foregroundUsage == 0 && backgroundUsage == 0 && fgsUsage == 0) { return; } final long token = proto.start(AppBatteryStatsProto.UID_STATS); proto.write(AppBatteryStatsProto.UidStats.UID, uid); dumpProcessStateStats(proto, AppBatteryStatsProto.UidStats.ProcessStateStats.FOREGROUND, foregroundUsage); dumpProcessStateStats(proto, AppBatteryStatsProto.UidStats.ProcessStateStats.BACKGROUND, backgroundUsage); dumpProcessStateStats(proto, AppBatteryStatsProto.UidStats.ProcessStateStats.FOREGROUND_SERVICE, fgsUsage); proto.end(token); } private void dumpProcessStateStats(ProtoOutputStream proto, int processState, double powerMah) { if (powerMah == 0) { return; } final long token = proto.start(AppBatteryStatsProto.UidStats.PROCESS_STATE_STATS); proto.write(AppBatteryStatsProto.UidStats.ProcessStateStats.PROCESS_STATE, processState); proto.write(AppBatteryStatsProto.UidStats.ProcessStateStats.POWER_MAH, powerMah); proto.end(token); } static class BatteryUsage { static final int BATTERY_USAGE_INDEX_UNSPECIFIED = PROCESS_STATE_UNSPECIFIED; static final int BATTERY_USAGE_INDEX_FOREGROUND = PROCESS_STATE_FOREGROUND; Loading Loading @@ -795,6 +854,15 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> return formatBatteryUsage(mUsage); } double getUsagePowerMah(@BatteryConsumer.ProcessState int processState) { switch (processState) { case PROCESS_STATE_FOREGROUND: return mUsage[1]; case PROCESS_STATE_BACKGROUND: return mUsage[2]; case PROCESS_STATE_FOREGROUND_SERVICE: return mUsage[3]; } return 0; } boolean isValid() { for (int i = 0; i < mUsage.length; i++) { if (mUsage[i] < 0.0d) { Loading services/core/java/com/android/server/am/AppRestrictionController.java +7 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseArrayMap; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -1369,6 +1370,12 @@ public final class AppRestrictionController { } } void dumpAsProto(ProtoOutputStream proto, int uid) { for (int i = 0, size = mAppStateTrackers.size(); i < size; i++) { mAppStateTrackers.get(i).dumpAsProto(proto, uid); } } private void applyRestrictionLevel(String pkgName, int uid, @RestrictionLevel int level, int curBucket, boolean allowUpdateBucket, int reason, int subReason) { int curLevel; Loading services/core/java/com/android/server/am/BaseAppStateTracker.java +4 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.os.BatteryStatsInternal; import android.os.Handler; import android.permission.PermissionManager; import android.util.Slog; import android.util.proto.ProtoOutputStream; import com.android.server.DeviceIdleInternal; import com.android.server.LocalServices; Loading Loading @@ -250,6 +251,9 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { mInjector.getPolicy().dump(pw, " " + prefix); } void dumpAsProto(ProtoOutputStream proto, int uid) { } static class Injector<T extends BaseAppStatePolicy> { T mAppStatePolicy; Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +27 −0 Original line number Diff line number Diff line Loading @@ -9209,6 +9209,10 @@ public class ActivityManagerService extends IActivityManager.Stub mAppRestrictionController.dump(pw, ""); } void dumpAppRestrictionController(ProtoOutputStream proto, int uid) { mAppRestrictionController.dumpAsProto(proto, uid); } /** * Wrapper function to print out debug data filtered by specified arguments. */ Loading Loading @@ -9321,6 +9325,29 @@ public class ActivityManagerService extends IActivityManager.Stub mProcessList.writeProcessesToProtoLSP(proto, dumpPackage); } } } else if ("app-restrictions".equals(cmd)) { int uid = Process.INVALID_UID; boolean error = false; for (int i = 0; i < args.length; i++) { if ("--uid".equals(args[i])) { if (i + 1 < args.length) { try { uid = Integer.parseInt(args[i + 1]); } catch (NumberFormatException e) { error = true; } } else { error = true; } break; } } if (error) { pw.println("Invalid --uid argument"); pw.println("Use -h for help."); } else { dumpAppRestrictionController(proto, uid); } } else { // default option, dump everything, output is ActivityManagerServiceProto synchronized (this) { Loading
services/core/java/com/android/server/am/AppBatteryTracker.java +68 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.content.Context; import android.content.pm.ServiceInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.os.AppBatteryStatsProto; import android.os.BatteryConsumer; import android.os.BatteryConsumer.Dimensions; import android.os.BatteryStatsInternal; Loading @@ -62,6 +63,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.R; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -676,6 +678,63 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> super.dump(pw, prefix); } @Override void dumpAsProto(ProtoOutputStream proto, int uid) { synchronized (mLock) { final SparseArray<ImmutableBatteryUsage> uidConsumers = mUidBatteryUsageInWindow; if (uid != android.os.Process.INVALID_UID) { final BatteryUsage usage = uidConsumers.get(uid); if (usage != null) { dumpUidStats(proto, uid, usage); } } else { for (int i = 0, size = uidConsumers.size(); i < size; i++) { final int aUid = uidConsumers.keyAt(i); final BatteryUsage usage = uidConsumers.valueAt(i); dumpUidStats(proto, aUid, usage); } } } } private void dumpUidStats(ProtoOutputStream proto, int uid, BatteryUsage usage) { if (usage.mUsage == null) { return; } final double foregroundUsage = usage.getUsagePowerMah(PROCESS_STATE_FOREGROUND); final double backgroundUsage = usage.getUsagePowerMah(PROCESS_STATE_BACKGROUND); final double fgsUsage = usage.getUsagePowerMah(PROCESS_STATE_FOREGROUND_SERVICE); if (foregroundUsage == 0 && backgroundUsage == 0 && fgsUsage == 0) { return; } final long token = proto.start(AppBatteryStatsProto.UID_STATS); proto.write(AppBatteryStatsProto.UidStats.UID, uid); dumpProcessStateStats(proto, AppBatteryStatsProto.UidStats.ProcessStateStats.FOREGROUND, foregroundUsage); dumpProcessStateStats(proto, AppBatteryStatsProto.UidStats.ProcessStateStats.BACKGROUND, backgroundUsage); dumpProcessStateStats(proto, AppBatteryStatsProto.UidStats.ProcessStateStats.FOREGROUND_SERVICE, fgsUsage); proto.end(token); } private void dumpProcessStateStats(ProtoOutputStream proto, int processState, double powerMah) { if (powerMah == 0) { return; } final long token = proto.start(AppBatteryStatsProto.UidStats.PROCESS_STATE_STATS); proto.write(AppBatteryStatsProto.UidStats.ProcessStateStats.PROCESS_STATE, processState); proto.write(AppBatteryStatsProto.UidStats.ProcessStateStats.POWER_MAH, powerMah); proto.end(token); } static class BatteryUsage { static final int BATTERY_USAGE_INDEX_UNSPECIFIED = PROCESS_STATE_UNSPECIFIED; static final int BATTERY_USAGE_INDEX_FOREGROUND = PROCESS_STATE_FOREGROUND; Loading Loading @@ -795,6 +854,15 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> return formatBatteryUsage(mUsage); } double getUsagePowerMah(@BatteryConsumer.ProcessState int processState) { switch (processState) { case PROCESS_STATE_FOREGROUND: return mUsage[1]; case PROCESS_STATE_BACKGROUND: return mUsage[2]; case PROCESS_STATE_FOREGROUND_SERVICE: return mUsage[3]; } return 0; } boolean isValid() { for (int i = 0; i < mUsage.length; i++) { if (mUsage[i] < 0.0d) { Loading
services/core/java/com/android/server/am/AppRestrictionController.java +7 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseArrayMap; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -1369,6 +1370,12 @@ public final class AppRestrictionController { } } void dumpAsProto(ProtoOutputStream proto, int uid) { for (int i = 0, size = mAppStateTrackers.size(); i < size; i++) { mAppStateTrackers.get(i).dumpAsProto(proto, uid); } } private void applyRestrictionLevel(String pkgName, int uid, @RestrictionLevel int level, int curBucket, boolean allowUpdateBucket, int reason, int subReason) { int curLevel; Loading
services/core/java/com/android/server/am/BaseAppStateTracker.java +4 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.os.BatteryStatsInternal; import android.os.Handler; import android.permission.PermissionManager; import android.util.Slog; import android.util.proto.ProtoOutputStream; import com.android.server.DeviceIdleInternal; import com.android.server.LocalServices; Loading Loading @@ -250,6 +251,9 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { mInjector.getPolicy().dump(pw, " " + prefix); } void dumpAsProto(ProtoOutputStream proto, int uid) { } static class Injector<T extends BaseAppStatePolicy> { T mAppStatePolicy; Loading