android_database_SQLiteDebug.cpp revision 2a293b61cb0efbf24994d74ed980f58b820bb35a
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 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <JNIHelp.h> 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <jni.h> 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/misc.h> 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <string.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <unistd.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <cutils/mspace.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sqlite3.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Noristatic jfieldID gMemoryUsedField; 322a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brownstatic jfieldID gPageCacheOverflowField; 33c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Noristatic jfieldID gLargestMemAllocField; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define USE_MSPACE 0 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void getPagerStats(JNIEnv *env, jobject clazz, jobject statsObj) 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 40c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori int memoryUsed; 412a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown int pageCacheOverflow; 42c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori int largestMemAlloc; 43c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori int unused; 44c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori 45c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori sqlite3_status(SQLITE_STATUS_MEMORY_USED, &memoryUsed, &unused, 0); 46c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &unused, &largestMemAlloc, 0); 472a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflow, &unused, 0); 48c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori env->SetIntField(statsObj, gMemoryUsedField, memoryUsed); 492a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown env->SetIntField(statsObj, gPageCacheOverflowField, pageCacheOverflow); 50c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori env->SetIntField(statsObj, gLargestMemAllocField, largestMemAlloc); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * JNI registration. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMethods[] = 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "getPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V", 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void*) getPagerStats }, 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_database_SQLiteDebug(JNIEnv *env) 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass clazz; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clazz = env->FindClass("android/database/sqlite/SQLiteDebug$PagerStats"); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clazz == NULL) { 693762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("Can't find android/database/sqlite/SQLiteDebug$PagerStats"); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 73c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori gMemoryUsedField = env->GetFieldID(clazz, "memoryUsed", "I"); 74c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori if (gMemoryUsedField == NULL) { 753762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("Can't find memoryUsed"); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 79c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori gLargestMemAllocField = env->GetFieldID(clazz, "largestMemAlloc", "I"); 80c3849200fa60b22ea583ba2a6f902d6a632a5e7eVasu Nori if (gLargestMemAllocField == NULL) { 813762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("Can't find largestMemAlloc"); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 852a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown gPageCacheOverflowField = env->GetFieldID(clazz, "pageCacheOverflow", "I"); 862a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown if (gPageCacheOverflowField == NULL) { 872a293b61cb0efbf24994d74ed980f58b820bb35aJeff Brown ALOGE("Can't find pageCacheOverflow"); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return jniRegisterNativeMethods(env, "android/database/sqlite/SQLiteDebug", 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gMethods, NELEM(gMethods)); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} // namespace android 96