summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2012-01-19 17:06:44 -0800
committerJeff Brown <jeffbrown@google.com>2012-01-19 18:13:18 -0800
commit254fba8960b018a29c5fe422b8a0fd9eeedbf3e4 (patch)
tree818b8904d425dd00deff3c4ee461d5bc9d0a5243
parent48a4789686412390f9efd3bad0bfcaa3efbf9bfc (diff)
downloadframeworks_base-254fba8960b018a29c5fe422b8a0fd9eeedbf3e4.zip
frameworks_base-254fba8960b018a29c5fe422b8a0fd9eeedbf3e4.tar.gz
frameworks_base-254fba8960b018a29c5fe422b8a0fd9eeedbf3e4.tar.bz2
Clean up SQLiteDebug natives.
In particular, ensure that the database is initialized. Change-Id: Ifa69a9dfa9d008af79beadbd1a25e90d0d29e66c
-rw-r--r--core/java/android/database/sqlite/SQLiteDebug.java12
-rw-r--r--core/jni/android_database_SQLiteDebug.cpp74
2 files changed, 39 insertions, 47 deletions
diff --git a/core/java/android/database/sqlite/SQLiteDebug.java b/core/java/android/database/sqlite/SQLiteDebug.java
index 3ef9b49..95350ba 100644
--- a/core/java/android/database/sqlite/SQLiteDebug.java
+++ b/core/java/android/database/sqlite/SQLiteDebug.java
@@ -29,6 +29,8 @@ import android.util.Printer;
* {@hide}
*/
public final class SQLiteDebug {
+ private static native void nativeGetPagerStats(PagerStats stats);
+
/**
* Controls the printing of informational SQL log messages.
*/
@@ -73,7 +75,7 @@ public final class SQLiteDebug {
/**
* Contains statistics about the active pagers in the current process.
*
- * @see #getPagerStats(PagerStats)
+ * @see #nativeGetPagerStats(PagerStats)
*/
public static class PagerStats {
/** the current amount of memory checked out by sqlite using sqlite3_malloc().
@@ -136,7 +138,8 @@ public final class SQLiteDebug {
*/
public static PagerStats getDatabaseInfo() {
PagerStats stats = new PagerStats();
- getPagerStats(stats);
+ SQLiteGlobal.initializeOnce();
+ nativeGetPagerStats(stats);
stats.dbStats = SQLiteDatabase.getDbStats();
return stats;
}
@@ -156,9 +159,4 @@ public final class SQLiteDebug {
SQLiteDatabase.dumpAll(printer, verbose);
}
-
- /**
- * Gathers statistics about all pagers in the current process.
- */
- public static native void getPagerStats(PagerStats stats);
}
diff --git a/core/jni/android_database_SQLiteDebug.cpp b/core/jni/android_database_SQLiteDebug.cpp
index 8d4e7f9..c1e7305 100644
--- a/core/jni/android_database_SQLiteDebug.cpp
+++ b/core/jni/android_database_SQLiteDebug.cpp
@@ -14,28 +14,29 @@
* limitations under the License.
*/
-#include <JNIHelp.h>
+#define LOG_TAG "SQLiteDebug"
+
#include <jni.h>
-#include <utils/misc.h>
+#include <JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <cutils/mspace.h>
#include <utils/Log.h>
#include <sqlite3.h>
namespace android {
-static jfieldID gMemoryUsedField;
-static jfieldID gPageCacheOverflowField;
-static jfieldID gLargestMemAllocField;
-
+static struct {
+ jfieldID memoryUsed;
+ jfieldID pageCacheOverflow;
+ jfieldID largestMemAlloc;
+} gSQLiteDebugPagerStatsClassInfo;
-#define USE_MSPACE 0
-
-static void getPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
+static void nativeGetPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
{
int memoryUsed;
int pageCacheOverflow;
@@ -45,9 +46,10 @@ static void getPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
sqlite3_status(SQLITE_STATUS_MEMORY_USED, &memoryUsed, &unused, 0);
sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &unused, &largestMemAlloc, 0);
sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflow, &unused, 0);
- env->SetIntField(statsObj, gMemoryUsedField, memoryUsed);
- env->SetIntField(statsObj, gPageCacheOverflowField, pageCacheOverflow);
- env->SetIntField(statsObj, gLargestMemAllocField, largestMemAlloc);
+ env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.memoryUsed, memoryUsed);
+ env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow,
+ pageCacheOverflow);
+ env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, largestMemAlloc);
}
/*
@@ -56,39 +58,31 @@ static void getPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
static JNINativeMethod gMethods[] =
{
- { "getPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V",
- (void*) getPagerStats },
+ { "nativeGetPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V",
+ (void*) nativeGetPagerStats },
};
+#define FIND_CLASS(var, className) \
+ var = env->FindClass(className); \
+ LOG_FATAL_IF(! var, "Unable to find class " className);
+
+#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
+ var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
+ LOG_FATAL_IF(! var, "Unable to find field " fieldName);
+
int register_android_database_SQLiteDebug(JNIEnv *env)
{
jclass clazz;
+ FIND_CLASS(clazz, "android/database/sqlite/SQLiteDebug$PagerStats");
+
+ GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.memoryUsed, clazz,
+ "memoryUsed", "I");
+ GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, clazz,
+ "largestMemAlloc", "I");
+ GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow, clazz,
+ "pageCacheOverflow", "I");
- clazz = env->FindClass("android/database/sqlite/SQLiteDebug$PagerStats");
- if (clazz == NULL) {
- ALOGE("Can't find android/database/sqlite/SQLiteDebug$PagerStats");
- return -1;
- }
-
- gMemoryUsedField = env->GetFieldID(clazz, "memoryUsed", "I");
- if (gMemoryUsedField == NULL) {
- ALOGE("Can't find memoryUsed");
- return -1;
- }
-
- gLargestMemAllocField = env->GetFieldID(clazz, "largestMemAlloc", "I");
- if (gLargestMemAllocField == NULL) {
- ALOGE("Can't find largestMemAlloc");
- return -1;
- }
-
- gPageCacheOverflowField = env->GetFieldID(clazz, "pageCacheOverflow", "I");
- if (gPageCacheOverflowField == NULL) {
- ALOGE("Can't find pageCacheOverflow");
- return -1;
- }
-
- return jniRegisterNativeMethods(env, "android/database/sqlite/SQLiteDebug",
+ return AndroidRuntime::registerNativeMethods(env, "android/database/sqlite/SQLiteDebug",
gMethods, NELEM(gMethods));
}