From 2c0361986b9b7786bd1e230be5674130def9a64f Mon Sep 17 00:00:00 2001 From: Richard Uhler Date: Wed, 14 Sep 2016 09:48:31 +0100 Subject: [PATCH] Add count of WebView instances to meminfo Switch to using more efficient countInstancesOfClasses method for counting WebView and other kinds of instances. Test: Launch Gmail, view a message, verify some WebView objects are reported in dumpsys meminfo. Bug: 31016396 Change-Id: Ib0146ee2931877399da07f854d50c2ab52092b6b --- core/java/android/app/ActivityThread.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 18677dda3b88b..e7569cef12adc 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -108,6 +108,7 @@ import android.renderscript.RenderScriptCacheDir; import android.system.Os; import android.system.OsConstants; import android.system.ErrnoException; +import android.webkit.WebView; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IVoiceInteractor; @@ -1041,10 +1042,21 @@ public final class ActivityThread { long dalvikMax = runtime.totalMemory() / 1024; long dalvikFree = runtime.freeMemory() / 1024; long dalvikAllocated = dalvikMax - dalvikFree; + + Class[] classesToCount = new Class[] { + ContextImpl.class, + Activity.class, + WebView.class, + OpenSSLSocketImpl.class + }; + long[] instanceCounts = VMDebug.countInstancesOfClasses(classesToCount, true); + long appContextInstanceCount = instanceCounts[0]; + long activityInstanceCount = instanceCounts[1]; + long webviewInstanceCount = instanceCounts[2]; + long openSslSocketCount = instanceCounts[3]; + long viewInstanceCount = ViewDebug.getViewInstanceCount(); long viewRootInstanceCount = ViewDebug.getViewRootImplCount(); - long appContextInstanceCount = Debug.countInstancesOfClass(ContextImpl.class); - long activityInstanceCount = Debug.countInstancesOfClass(Activity.class); int globalAssetCount = AssetManager.getGlobalAssetCount(); int globalAssetManagerCount = AssetManager.getGlobalAssetManagerCount(); int binderLocalObjectCount = Debug.getBinderLocalObjectCount(); @@ -1052,7 +1064,6 @@ public final class ActivityThread { int binderDeathObjectCount = Debug.getBinderDeathObjectCount(); long parcelSize = Parcel.getGlobalAllocSize(); long parcelCount = Parcel.getGlobalAllocCount(); - long openSslSocketCount = Debug.countInstancesOfClass(OpenSSLSocketImpl.class); SQLiteDebug.PagerStats stats = SQLiteDebug.getDatabaseInfo(); dumpMemInfoTable(pw, memInfo, checkin, dumpFullInfo, dumpDalvik, dumpSummaryOnly, @@ -1115,6 +1126,7 @@ public final class ActivityThread { "Parcel count:", parcelCount); printRow(pw, TWO_COUNT_COLUMNS, "Death Recipients:", binderDeathObjectCount, "OpenSSL Sockets:", openSslSocketCount); + printRow(pw, ONE_COUNT_COLUMN, "WebViews:", webviewInstanceCount); // SQLite mem info pw.println(" ");