diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index a040aae251795..9496b5316764a 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -538,7 +538,7 @@ public abstract class WallpaperService extends Service { out.print(prefix); out.print("mType="); out.print(mType); out.print(" mWindowFlags="); out.print(mWindowFlags); out.print(" mCurWindowFlags="); out.println(mCurWindowFlags); - out.print(" mWindowPrivateFlags="); out.print(mWindowPrivateFlags); + out.print(prefix); out.print("mWindowPrivateFlags="); out.print(mWindowPrivateFlags); out.print(" mCurWindowPrivateFlags="); out.println(mCurWindowPrivateFlags); out.print(prefix); out.print("mVisibleInsets="); out.print(mVisibleInsets.toShortString()); diff --git a/core/java/com/android/internal/app/ProcessStats.java b/core/java/com/android/internal/app/ProcessStats.java index 1b254866d2acb..70fb51072acf5 100644 --- a/core/java/com/android/internal/app/ProcessStats.java +++ b/core/java/com/android/internal/app/ProcessStats.java @@ -1079,7 +1079,9 @@ public final class ProcessStats implements Parcelable { ProcessDataCollection totals = new ProcessDataCollection(screenStates, memStates, procStates); computeProcessData(proc, totals, now); - if (totals.totalTime != 0 || totals.numPss != 0) { + double percentage = (double) totals.totalTime / (double) totalTime * 100; + // We don't print percentages < .01, so just drop those. + if (percentage >= 0.005 || totals.numPss != 0) { if (prefix != null) { pw.print(prefix); } @@ -2470,7 +2472,7 @@ public final class ProcessStats implements Parcelable { totalMem.totalTime, totalPss, totalMem.sysMemSamples); totalPss = printMemoryCategory(pw, " ", "Free ", totalMem.sysMemFreeWeight, totalMem.totalTime, totalPss, totalMem.sysMemSamples); - totalPss = printMemoryCategory(pw, " ", "Z-Ram ", totalMem.sysMemZRamWeight, + totalPss = printMemoryCategory(pw, " ", "Z-Ram ", totalMem.sysMemZRamWeight, totalMem.totalTime, totalPss, totalMem.sysMemSamples); pw.print(" TOTAL : "); printSizeValue(pw, totalPss); diff --git a/services/core/java/com/android/server/IntentResolver.java b/services/core/java/com/android/server/IntentResolver.java index 387eabc85d6b8..cea1ebe2f72ba 100644 --- a/services/core/java/com/android/server/IntentResolver.java +++ b/services/core/java/com/android/server/IntentResolver.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import android.net.Uri; @@ -31,6 +30,7 @@ import android.util.FastImmutableArraySet; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; +import android.util.MutableInt; import android.util.PrintWriterPrinter; import android.util.Slog; import android.util.LogPrinter; @@ -213,36 +213,65 @@ public abstract class IntentResolver { } boolean dumpMap(PrintWriter out, String titlePrefix, String title, - String prefix, Map map, String packageName, - boolean printFilter) { - String eprefix = prefix + " "; - String fprefix = prefix + " "; + String prefix, ArrayMap map, String packageName, + boolean printFilter, boolean collapseDuplicates) { + final String eprefix = prefix + " "; + final String fprefix = prefix + " "; + final ArrayMap found = new ArrayMap<>(); boolean printedSomething = false; Printer printer = null; - for (Map.Entry e : map.entrySet()) { - F[] a = e.getValue(); + for (int mapi=0; mapi { } public boolean dump(PrintWriter out, String title, String prefix, String packageName, - boolean printFilter) { + boolean printFilter, boolean collapseDuplicates) { String innerPrefix = prefix + " "; String sepPrefix = "\n" + prefix; String curPrefix = title + "\n" + prefix; if (dumpMap(out, curPrefix, "Full MIME Types:", innerPrefix, - mTypeToFilter, packageName, printFilter)) { + mTypeToFilter, packageName, printFilter, collapseDuplicates)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Base MIME Types:", innerPrefix, - mBaseTypeToFilter, packageName, printFilter)) { + mBaseTypeToFilter, packageName, printFilter, collapseDuplicates)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Wild MIME Types:", innerPrefix, - mWildTypeToFilter, packageName, printFilter)) { + mWildTypeToFilter, packageName, printFilter, collapseDuplicates)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Schemes:", innerPrefix, - mSchemeToFilter, packageName, printFilter)) { + mSchemeToFilter, packageName, printFilter, collapseDuplicates)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Non-Data Actions:", innerPrefix, - mActionToFilter, packageName, printFilter)) { + mActionToFilter, packageName, printFilter, collapseDuplicates)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "MIME Typed Actions:", innerPrefix, - mTypedActionToFilter, packageName, printFilter)) { + mTypedActionToFilter, packageName, printFilter, collapseDuplicates)) { curPrefix = sepPrefix; } return curPrefix == sepPrefix; @@ -479,6 +508,14 @@ public abstract class IntentResolver { out.print(prefix); out.println(filter); } + protected Object filterToLabel(F filter) { + return "IntentFilter"; + } + + protected void dumpFilterLabel(PrintWriter out, String prefix, Object label, int count) { + out.print(prefix); out.print(label); out.print(": "); out.println(count); + } + private final void addFilter(ArrayMap map, String name, F filter) { F[] array = map.get(name); if (array == null) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 779e1329a15d2..7e17043b233b1 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -13232,7 +13232,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (mReceiverResolver.dump(pw, needSep ? "\n Receiver Resolver Table:" : " Receiver Resolver Table:", - " ", dumpPackage, false)) { + " ", dumpPackage, false, false)) { needSep = true; printedAnything = true; } diff --git a/services/core/java/com/android/server/am/ProcessStatsService.java b/services/core/java/com/android/server/am/ProcessStatsService.java index bffb5419a70e0..d05910b6addf1 100644 --- a/services/core/java/com/android/server/am/ProcessStatsService.java +++ b/services/core/java/com/android/server/am/ProcessStatsService.java @@ -582,9 +582,10 @@ public final class ProcessStatsService extends IProcessStats.Stub { pw.println("Process stats (procstats) dump options:"); pw.println(" [--checkin|-c|--csv] [--csv-screen] [--csv-proc] [--csv-mem]"); pw.println(" [--details] [--full-details] [--current] [--hours N] [--last N]"); - pw.println(" [--active] [--commit] [--reset] [--clear] [--write] [-h] []"); + pw.println(" [--max N] --active] [--commit] [--reset] [--clear] [--write] [-h]"); + pw.println(" []"); pw.println(" --checkin: perform a checkin: print and delete old committed states."); - pw.println(" --c: print only state in checkin format."); + pw.println(" -c: print only state in checkin format."); pw.println(" --csv: output data suitable for putting in a spreadsheet."); pw.println(" --csv-screen: on, off."); pw.println(" --csv-mem: norm, mod, low, crit."); @@ -595,6 +596,7 @@ public final class ProcessStatsService extends IProcessStats.Stub { pw.println(" --current: only dump current state."); pw.println(" --hours: aggregate over about N last hours."); pw.println(" --last: only show the last committed stats at index N (starting at 1)."); + pw.println(" --max: for -a, max num of historical batches to print."); pw.println(" --active: only show currently active processes/services."); pw.println(" --commit: commit current stats to disk and reset to start new stats."); pw.println(" --reset: reset current stats, without committing."); @@ -636,6 +638,7 @@ public final class ProcessStatsService extends IProcessStats.Stub { boolean dumpAll = false; int aggregateHours = 0; int lastIndex = 0; + int maxNum = 2; boolean activeOnly = false; String reqPackage = null; boolean csvSepScreenStats = false; @@ -734,6 +737,20 @@ public final class ProcessStatsService extends IProcessStats.Stub { dumpHelp(pw); return; } + } else if ("--max".equals(arg)) { + i++; + if (i >= args.length) { + pw.println("Error: argument required for --max"); + dumpHelp(pw); + return; + } + try { + maxNum = Integer.parseInt(args[i]); + } catch (NumberFormatException e) { + pw.println("Error: --max argument not an int -- " + args[i]); + dumpHelp(pw); + return; + } } else if ("--active".equals(arg)) { activeOnly = true; currentOnly = true; @@ -892,7 +909,11 @@ public final class ProcessStatsService extends IProcessStats.Stub { try { ArrayList files = getCommittedFiles(0, false, !isCheckin); if (files != null) { - for (int i=0; i 1) { + out.print(" ("); out.print(count); out.print(" filters)"); + } + out.println(); + } + // List filterEnabled(List resolveInfoList) { // final Iterator i = resolveInfoList.iterator(); // final List retList = Lists.newArrayList(); @@ -7578,6 +7595,23 @@ public class PackageManagerService extends IPackageManager.Stub { out.println(Integer.toHexString(System.identityHashCode(filter))); } + @Override + protected Object filterToLabel(PackageParser.ServiceIntentInfo filter) { + return filter.service; + } + + protected void dumpFilterLabel(PrintWriter out, String prefix, Object label, int count) { + PackageParser.Service service = (PackageParser.Service)label; + out.print(prefix); out.print( + Integer.toHexString(System.identityHashCode(service))); + out.print(' '); + service.printComponentShortName(out); + if (count > 1) { + out.print(" ("); out.print(count); out.print(" filters)"); + } + out.println(); + } + // List filterEnabled(List resolveInfoList) { // final Iterator i = resolveInfoList.iterator(); // final List retList = Lists.newArrayList(); @@ -7785,6 +7819,23 @@ public class PackageManagerService extends IPackageManager.Stub { out.println(Integer.toHexString(System.identityHashCode(filter))); } + @Override + protected Object filterToLabel(PackageParser.ProviderIntentInfo filter) { + return filter.provider; + } + + protected void dumpFilterLabel(PrintWriter out, String prefix, Object label, int count) { + PackageParser.Provider provider = (PackageParser.Provider)label; + out.print(prefix); out.print( + Integer.toHexString(System.identityHashCode(provider))); + out.print(' '); + provider.printComponentShortName(out); + if (count > 1) { + out.print(" ("); out.print(count); out.print(" filters)"); + } + out.println(); + } + private final ArrayMap mProviders = new ArrayMap(); private int mFlags; @@ -12555,22 +12606,22 @@ public class PackageManagerService extends IPackageManager.Stub { if (!checkin && dumpState.isDumping(DumpState.DUMP_RESOLVERS)) { if (mActivities.dump(pw, dumpState.getTitlePrinted() ? "\nActivity Resolver Table:" : "Activity Resolver Table:", " ", packageName, - dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) { + dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS), true)) { dumpState.setTitlePrinted(true); } if (mReceivers.dump(pw, dumpState.getTitlePrinted() ? "\nReceiver Resolver Table:" : "Receiver Resolver Table:", " ", packageName, - dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) { + dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS), true)) { dumpState.setTitlePrinted(true); } if (mServices.dump(pw, dumpState.getTitlePrinted() ? "\nService Resolver Table:" : "Service Resolver Table:", " ", packageName, - dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) { + dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS), true)) { dumpState.setTitlePrinted(true); } if (mProviders.dump(pw, dumpState.getTitlePrinted() ? "\nProvider Resolver Table:" : "Provider Resolver Table:", " ", packageName, - dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) { + dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS), true)) { dumpState.setTitlePrinted(true); } } @@ -12583,7 +12634,7 @@ public class PackageManagerService extends IPackageManager.Stub { dumpState.getTitlePrinted() ? "\nPreferred Activities User " + user + ":" : "Preferred Activities User " + user + ":", " ", - packageName, true)) { + packageName, true, false)) { dumpState.setTitlePrinted(true); } } @@ -12676,8 +12727,8 @@ public class PackageManagerService extends IPackageManager.Stub { mSettings.dumpPackagesLPr(pw, packageName, dumpState, checkin); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) { - mSettings.dumpSharedUsersLPr(pw, packageName, dumpState); + if (dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) { + mSettings.dumpSharedUsersLPr(pw, packageName, dumpState, checkin); } if (!checkin && dumpState.isDumping(DumpState.DUMP_INSTALLS) && packageName == null) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index f0506a68daa3c..393ebd6916b75 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -3608,31 +3608,36 @@ final class Settings { } } - void dumpSharedUsersLPr(PrintWriter pw, String packageName, DumpState dumpState) { + void dumpSharedUsersLPr(PrintWriter pw, String packageName, DumpState dumpState, + boolean checkin) { boolean printedSomething = false; for (SharedUserSetting su : mSharedUsers.values()) { if (packageName != null && su != dumpState.getSharedUser()) { continue; } - if (!printedSomething) { - if (dumpState.onTitlePrinted()) - pw.println(); - pw.println("Shared users:"); - printedSomething = true; - } - pw.print(" SharedUser ["); - pw.print(su.name); - pw.print("] ("); - pw.print(Integer.toHexString(System.identityHashCode(su))); - pw.println("):"); - pw.print(" userId="); - pw.print(su.userId); - pw.print(" gids="); - pw.println(PackageManagerService.arrayToString(su.gids)); - pw.println(" grantedPermissions:"); - for (String s : su.grantedPermissions) { - pw.print(" "); - pw.println(s); + if (!checkin) { + if (!printedSomething) { + if (dumpState.onTitlePrinted()) + pw.println(); + pw.println("Shared users:"); + printedSomething = true; + } + pw.print(" SharedUser ["); + pw.print(su.name); + pw.print("] ("); + pw.print(Integer.toHexString(System.identityHashCode(su))); + pw.println("):"); + pw.print(" userId="); + pw.print(su.userId); + pw.print(" gids="); + pw.println(PackageManagerService.arrayToString(su.gids)); + pw.println(" grantedPermissions:"); + for (String s : su.grantedPermissions) { + pw.print(" "); + pw.println(s); + } + } else { + pw.print("suid,"); pw.print(su.userId); pw.print(","); pw.println(su.name); } } }