add more debug info to SQL section in bugreport
after this CL, adb bugreport will the following info (under SQL section
of each app's meminfo dump)
SQL
heap: 344 memoryUsed: 344
pageCacheOverflo: 67 largestMemAlloc: 50
DATABASES
Pagesize Dbsize Lookaside Dbname
1024 7 24 googlesettings.db
1024 26 110 talk.db
1024 11 0 (attached) transient_talk_db
1024 11 32 subscribedfeeds.db
1024 20 27 gservices.db
Change-Id: Iabd13be9793d9794137c60a045b84fa632f13498
diff --git a/core/jni/android_database_SQLiteDebug.cpp b/core/jni/android_database_SQLiteDebug.cpp
index 916df35..873b2a1 100644
--- a/core/jni/android_database_SQLiteDebug.cpp
+++ b/core/jni/android_database_SQLiteDebug.cpp
@@ -29,36 +29,28 @@
// From mem_mspace.c in libsqlite
extern "C" mspace sqlite3_get_mspace();
-// From sqlite.c, hacked in for Android
-extern "C" void sqlite3_get_pager_stats(sqlite3_int64 * totalBytesOut,
- sqlite3_int64 * referencedBytesOut,
- sqlite3_int64 * dbBytesOut,
- int * numPagersOut);
-
namespace android {
-static jfieldID gTotalBytesField;
-static jfieldID gReferencedBytesField;
-static jfieldID gDbBytesField;
-static jfieldID gNumPagersField;
+static jfieldID gMemoryUsedField;
+static jfieldID gPageCacheOverfloField;
+static jfieldID gLargestMemAllocField;
#define USE_MSPACE 0
static void getPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
{
- sqlite3_int64 totalBytes;
- sqlite3_int64 referencedBytes;
- sqlite3_int64 dbBytes;
- int numPagers;
+ int memoryUsed;
+ int pageCacheOverflo;
+ int largestMemAlloc;
+ int unused;
- sqlite3_get_pager_stats(&totalBytes, &referencedBytes, &dbBytes,
- &numPagers);
-
- env->SetLongField(statsObj, gTotalBytesField, totalBytes);
- env->SetLongField(statsObj, gReferencedBytesField, referencedBytes);
- env->SetLongField(statsObj, gDbBytesField, dbBytes);
- env->SetIntField(statsObj, gNumPagersField, numPagers);
+ sqlite3_status(SQLITE_STATUS_MEMORY_USED, &memoryUsed, &unused, 0);
+ sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &unused, &largestMemAlloc, 0);
+ sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflo, &unused, 0);
+ env->SetIntField(statsObj, gMemoryUsedField, memoryUsed);
+ env->SetIntField(statsObj, gPageCacheOverfloField, pageCacheOverflo);
+ env->SetIntField(statsObj, gLargestMemAllocField, largestMemAlloc);
}
static jlong getHeapSize(JNIEnv *env, jobject clazz)
@@ -213,27 +205,21 @@
return -1;
}
- gTotalBytesField = env->GetFieldID(clazz, "totalBytes", "J");
- if (gTotalBytesField == NULL) {
- LOGE("Can't find totalBytes");
+ gMemoryUsedField = env->GetFieldID(clazz, "memoryUsed", "I");
+ if (gMemoryUsedField == NULL) {
+ LOGE("Can't find memoryUsed");
return -1;
}
- gReferencedBytesField = env->GetFieldID(clazz, "referencedBytes", "J");
- if (gReferencedBytesField == NULL) {
- LOGE("Can't find referencedBytes");
+ gLargestMemAllocField = env->GetFieldID(clazz, "largestMemAlloc", "I");
+ if (gLargestMemAllocField == NULL) {
+ LOGE("Can't find largestMemAlloc");
return -1;
}
- gDbBytesField = env->GetFieldID(clazz, "databaseBytes", "J");
- if (gDbBytesField == NULL) {
- LOGE("Can't find databaseBytes");
- return -1;
- }
-
- gNumPagersField = env->GetFieldID(clazz, "numPagers", "I");
- if (gNumPagersField == NULL) {
- LOGE("Can't find numPagers");
+ gPageCacheOverfloField = env->GetFieldID(clazz, "pageCacheOverflo", "I");
+ if (gPageCacheOverfloField == NULL) {
+ LOGE("Can't find pageCacheOverflo");
return -1;
}