From c9090f283a6551d771a33d048200a8a148b73919 Mon Sep 17 00:00:00 2001 From: Rhed Jao Date: Wed, 12 Oct 2022 19:05:54 +0800 Subject: [PATCH] Dump snapshot statistics in the bugreport Also remove the corked function which is not used anymore in the SnapshotStatistics. Bug: 247671650 Test: adb shell dumpsys package Change-Id: I11806d279171cfdce1c80bc310ab317b255a16df --- .../com/android/server/pm/DumpHelper.java | 9 ++++- .../server/pm/PackageManagerService.java | 2 +- .../android/server/pm/SnapshotStatistics.java | 38 +++---------------- 3 files changed, 15 insertions(+), 34 deletions(-) diff --git a/services/core/java/com/android/server/pm/DumpHelper.java b/services/core/java/com/android/server/pm/DumpHelper.java index d2a5e3233a8b1..3385a09e49db0 100644 --- a/services/core/java/com/android/server/pm/DumpHelper.java +++ b/services/core/java/com/android/server/pm/DumpHelper.java @@ -26,6 +26,7 @@ import android.content.ComponentName; import android.content.pm.FeatureInfo; import android.content.pm.PackageManager; import android.os.Binder; +import android.os.SystemClock; import android.os.UserHandle; import android.os.incremental.PerUidReadTimeouts; import android.service.pm.PackageServiceDumpProto; @@ -60,6 +61,7 @@ final class DumpHelper { private final ArrayMap mAvailableFeatures; private final ArraySet mProtectedBroadcasts; private final PerUidReadTimeouts[] mPerUidReadTimeouts; + private final SnapshotStatistics mSnapshotStatistics; DumpHelper( PermissionManagerServiceInternal permissionManager, @@ -70,7 +72,8 @@ final class DumpHelper { ChangedPackagesTracker changedPackagesTracker, ArrayMap availableFeatures, ArraySet protectedBroadcasts, - PerUidReadTimeouts[] perUidReadTimeouts) { + PerUidReadTimeouts[] perUidReadTimeouts, + SnapshotStatistics snapshotStatistics) { mPermissionManager = permissionManager; mStorageEventHelper = storageEventHelper; mDomainVerificationManager = domainVerificationManager; @@ -81,6 +84,7 @@ final class DumpHelper { mAvailableFeatures = availableFeatures; mProtectedBroadcasts = protectedBroadcasts; mPerUidReadTimeouts = perUidReadTimeouts; + mSnapshotStatistics = snapshotStatistics; } @NeverCompile // Avoid size overhead of debugging code. @@ -585,6 +589,9 @@ final class DumpHelper { if (dumpState.onTitlePrinted()) { pw.println(); } + pw.println("Snapshot statistics:"); + mSnapshotStatistics.dump(pw, " " /* indent */, SystemClock.currentTimeMicro(), + snapshot.getUsed(), dumpState.isBrief()); } if (!checkin diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d939ca61fa085..8fed153825dbb 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6031,7 +6031,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService new DumpHelper(mPermissionManager, mStorageEventHelper, mDomainVerificationManager, mInstallerService, mRequiredVerifierPackages, knownPackages, mChangedPackagesTracker, availableFeatures, protectedBroadcasts, - getPerUidReadTimeouts(snapshot) + getPerUidReadTimeouts(snapshot), mSnapshotStatistics ).doDump(snapshot, fd, pw, args); } } diff --git a/services/core/java/com/android/server/pm/SnapshotStatistics.java b/services/core/java/com/android/server/pm/SnapshotStatistics.java index 95f80de04b820..2cfc8946ad025 100644 --- a/services/core/java/com/android/server/pm/SnapshotStatistics.java +++ b/services/core/java/com/android/server/pm/SnapshotStatistics.java @@ -239,11 +239,6 @@ public class SnapshotStatistics { */ public int mTotalUsed = 0; - /** - * The total number of times a snapshot was bypassed because corking was in effect. - */ - public int mTotalCorked = 0; - /** * The total number of builds that count as big, which means they took longer than * SNAPSHOT_BIG_BUILD_TIME_NS. @@ -297,13 +292,6 @@ public class SnapshotStatistics { } } - /** - * Record a cork. - */ - private void corked() { - mTotalCorked++; - } - private Stats(long now) { mStartTimeUs = now; mTimes = new int[mTimeBins.count()]; @@ -321,7 +309,6 @@ public class SnapshotStatistics { mUsed = Arrays.copyOf(orig.mUsed, orig.mUsed.length); mTotalBuilds = orig.mTotalBuilds; mTotalUsed = orig.mTotalUsed; - mTotalCorked = orig.mTotalCorked; mBigBuilds = orig.mBigBuilds; mShortLived = orig.mShortLived; mTotalTimeUs = orig.mTotalTimeUs; @@ -379,7 +366,6 @@ public class SnapshotStatistics { * Dump the summary statistics record. Choose the header or the data. * number of builds * number of uses - * number of corks * number of big builds * number of short lifetimes * cumulative build time, in seconds @@ -388,13 +374,13 @@ public class SnapshotStatistics { private void dumpStats(PrintWriter pw, String indent, long now, boolean header) { dumpPrefix(pw, indent, now, header, "Summary stats"); if (header) { - pw.format(Locale.US, " %10s %10s %10s %10s %10s %10s %10s", - "TotBlds", "TotUsed", "TotCork", "BigBlds", "ShortLvd", + pw.format(Locale.US, " %10s %10s %10s %10s %10s %10s", + "TotBlds", "TotUsed", "BigBlds", "ShortLvd", "TotTime", "MaxTime"); } else { pw.format(Locale.US, - " %10d %10d %10d %10d %10d %10d %10d", - mTotalBuilds, mTotalUsed, mTotalCorked, mBigBuilds, mShortLived, + " %10d %10d %10d %10d %10d %10d", + mTotalBuilds, mTotalUsed, mBigBuilds, mShortLived, mTotalTimeUs / 1000, mMaxBuildTimeUs / 1000); } pw.println(); @@ -558,16 +544,6 @@ public class SnapshotStatistics { } } - /** - * Record a corked snapshot request. - */ - public final void corked() { - synchronized (mLock) { - mShort[0].corked(); - mLong[0].corked(); - } - } - /** * Roll a stats array. Shift the elements up an index and create a new element at * index zero. The old element zero is completed with the specified time. @@ -624,8 +600,7 @@ public class SnapshotStatistics { * Dump the statistics. The format is compatible with the PackageManager dumpsys * output. */ - public void dump(PrintWriter pw, String indent, long now, int unrecorded, - int corkLevel, boolean brief) { + public void dump(PrintWriter pw, String indent, long now, int unrecorded, boolean brief) { // Grab the raw statistics under lock, but print them outside of the lock. Stats[] l; Stats[] s; @@ -635,8 +610,7 @@ public class SnapshotStatistics { s = Arrays.copyOf(mShort, mShort.length); s[0] = new Stats(s[0]); } - pw.format(Locale.US, "%s Unrecorded-hits: %d Cork-level: %d", indent, - unrecorded, corkLevel); + pw.format(Locale.US, "%s Unrecorded-hits: %d", indent, unrecorded); pw.println(); dump(pw, indent, now, l, s, "stats"); if (brief) {