19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown#define LOG_TAG "SQLiteDebug" 18254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <jni.h> 20254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown#include <JNIHelp.h> 21254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown#include <android_runtime/AndroidRuntime.h> 22254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <string.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <unistd.h> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sqlite3.h> 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe#include "core_jni_helpers.h" 32987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brownstatic struct { 36254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown jfieldID memoryUsed; 37254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown jfieldID pageCacheOverflow; 38254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown jfieldID largestMemAlloc; 39254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown} gSQLiteDebugPagerStatsClassInfo; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brownstatic void nativeGetPagerStats(JNIEnv *env, jobject clazz, jobject statsObj) 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 43c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori int memoryUsed; 442a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown int pageCacheOverflow; 45c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori int largestMemAlloc; 46c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori int unused; 47c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori 48c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori sqlite3_status(SQLITE_STATUS_MEMORY_USED, &memoryUsed, &unused, 0); 49c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &unused, &largestMemAlloc, 0); 502a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflow, &unused, 0); 51254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.memoryUsed, memoryUsed); 52254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow, 53254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown pageCacheOverflow); 54254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, largestMemAlloc); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * JNI registration. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6176f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gMethods[] = 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 63254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown { "nativeGetPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V", 64254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown (void*) nativeGetPagerStats }, 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_database_SQLiteDebug(JNIEnv *env) 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 69987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe jclass clazz = FindClassOrDie(env, "android/database/sqlite/SQLiteDebug$PagerStats"); 70254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown 71987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gSQLiteDebugPagerStatsClassInfo.memoryUsed = GetFieldIDOrDie(env, clazz, "memoryUsed", "I"); 72987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gSQLiteDebugPagerStatsClassInfo.largestMemAlloc = GetFieldIDOrDie(env, clazz, 73254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown "largestMemAlloc", "I"); 74987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow = GetFieldIDOrDie(env, clazz, 75254fba8960b018a29c5fe422b8a0fd9eeedbf3e4Jeff Brown "pageCacheOverflow", "I"); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 77987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe return RegisterMethodsOrDie(env, "android/database/sqlite/SQLiteDebug", 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gMethods, NELEM(gMethods)); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} // namespace android 82