Add reporting of Parcel memory/count.

Also fix issue #18340771: Dumpsys Procstats missing a newline

Change-Id: I0c612187a3fb4d7eeafbf97d373efdef732c477e
This commit is contained in:
Dianne Hackborn
2014-11-11 12:22:36 -08:00
parent 41a8043b30
commit fabb70b2ef
4 changed files with 28 additions and 4 deletions

View File

@@ -60,6 +60,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
import android.os.Process;
@@ -965,6 +966,8 @@ public final class ActivityThread {
int binderLocalObjectCount = Debug.getBinderLocalObjectCount();
int binderProxyObjectCount = Debug.getBinderProxyObjectCount();
int binderDeathObjectCount = Debug.getBinderDeathObjectCount();
long parcelSize = Parcel.getGlobalAllocSize();
long parcelCount = Parcel.getGlobalAllocCount();
long openSslSocketCount = Debug.countInstancesOfClass(OpenSSLSocketImpl.class);
SQLiteDebug.PagerStats stats = SQLiteDebug.getDatabaseInfo();
@@ -1023,9 +1026,10 @@ public final class ActivityThread {
printRow(pw, TWO_COUNT_COLUMNS, "Local Binders:", binderLocalObjectCount,
"Proxy Binders:", binderProxyObjectCount);
printRow(pw, ONE_COUNT_COLUMN, "Death Recipients:", binderDeathObjectCount);
printRow(pw, ONE_COUNT_COLUMN, "OpenSSL Sockets:", openSslSocketCount);
printRow(pw, TWO_COUNT_COLUMNS, "Parcel memory:", parcelSize/1024,
"Parcel count:", parcelCount);
printRow(pw, TWO_COUNT_COLUMNS, "Death Recipients:", binderDeathObjectCount,
"OpenSSL Sockets:", openSslSocketCount);
// SQLite mem info
pw.println(" ");
@@ -1948,7 +1952,7 @@ public final class ActivityThread {
if (dumpFullInfo) {
printRow(pw, HEAP_FULL_COLUMN, "", "Pss", "Pss", "Shared", "Private",
"Shared", "Private", "Swapped", "Heap", "Heap", "Heap");
printRow(pw, HEAP_FULL_COLUMN, "", "Total", "Clean", "Dirty", "",
printRow(pw, HEAP_FULL_COLUMN, "", "Total", "Clean", "Dirty", "Dirty",
"Clean", "Clean", "Dirty", "Size", "Alloc", "Free");
printRow(pw, HEAP_FULL_COLUMN, "", "------", "------", "------", "------",
"------", "------", "------", "------", "------", "------");

View File

@@ -340,6 +340,12 @@ public final class Parcel {
}
}
/** @hide */
public static native long getGlobalAllocSize();
/** @hide */
public static native long getGlobalAllocCount();
/**
* Returns the total amount of data contained in the parcel.
*/

View File

@@ -2746,6 +2746,7 @@ public final class ProcessStats implements Parcelable {
pw.print("total");
dumpAdjTimesCheckin(pw, ",", mMemFactorDurations, mMemFactor,
mStartTime, now);
pw.println();
if (mSysMemUsageTable != null) {
pw.print("sysmemusage");
for (int i=0; i<mSysMemUsageTableSize; i++) {

View File

@@ -688,6 +688,16 @@ static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jlong
"Binder invocation to an incorrect interface");
}
static jlong android_os_Parcel_getGlobalAllocSize(JNIEnv* env, jclass clazz)
{
return Parcel::getGlobalAllocSize();
}
static jlong android_os_Parcel_getGlobalAllocCount(JNIEnv* env, jclass clazz)
{
return Parcel::getGlobalAllocCount();
}
// ----------------------------------------------------------------------------
static const JNINativeMethod gParcelMethods[] = {
@@ -737,6 +747,9 @@ static const JNINativeMethod gParcelMethods[] = {
{"nativeHasFileDescriptors", "(J)Z", (void*)android_os_Parcel_hasFileDescriptors},
{"nativeWriteInterfaceToken", "(JLjava/lang/String;)V", (void*)android_os_Parcel_writeInterfaceToken},
{"nativeEnforceInterface", "(JLjava/lang/String;)V", (void*)android_os_Parcel_enforceInterface},
{"getGlobalAllocSize", "()J", (void*)android_os_Parcel_getGlobalAllocSize},
{"getGlobalAllocCount", "()J", (void*)android_os_Parcel_getGlobalAllocCount},
};
const char* const kParcelPathName = "android/os/Parcel";