19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 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 Projectimport android.util.Log; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Debug; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Loads a class, runs the garbage collector, and prints showmap output. 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Usage: dalvikvm LoadClass [class name] 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LoadClass { 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void main(String[] args) { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.loadLibrary("android_runtime"); 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (registerNatives() < 0) { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("Error registering natives."); 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Debug.startAllocCounting(); 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (args.length > 0) { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 389d2d6e14b0932b6a74e01f393d5efed61458941bBob Lee long start = System.currentTimeMillis(); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Class.forName(args[0]); 409d2d6e14b0932b6a74e01f393d5efed61458941bBob Lee long elapsed = System.currentTimeMillis() - start; 419d2d6e14b0932b6a74e01f393d5efed61458941bBob Lee Log.i("LoadClass", "Loaded " + args[0] + " in " + elapsed 429d2d6e14b0932b6a74e01f393d5efed61458941bBob Lee + "ms."); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (ClassNotFoundException e) { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w("LoadClass", e); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.gc(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int allocCount = Debug.getGlobalAllocCount(); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int allocSize = Debug.getGlobalAllocSize(); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int freedCount = Debug.getGlobalFreedCount(); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int freedSize = Debug.getGlobalFreedSize(); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long nativeHeapSize = Debug.getNativeHeapSize(); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Debug.stopAllocCounting(); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder response = new StringBuilder("DECAFBAD"); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] pages = new int[6]; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo(); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Debug.getMemoryInfo(memoryInfo); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(memoryInfo.nativeSharedDirty); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(memoryInfo.dalvikSharedDirty); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(memoryInfo.otherSharedDirty); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(memoryInfo.nativePrivateDirty); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(memoryInfo.dalvikPrivateDirty); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(memoryInfo.otherPrivateDirty); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(allocCount); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(allocSize); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(freedCount); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(freedSize); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project response.append(',').append(nativeHeapSize); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.out.println(response.toString()); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Registers native functions. See AndroidRuntime.cpp. 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static native int registerNatives(); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 85