1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifndef _DALVIK_HPROF_HPROF 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define _DALVIK_HPROF_HPROF 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "Dalvik.h" 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define HPROF_ID_SIZE (sizeof (u4)) 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define UNIQUE_ERROR() \ 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project -((((uintptr_t)__func__) << 16 | __LINE__) & (0x7fffffff)) 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define HPROF_TIME 0 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define HPROF_NULL_STACK_TRACE 0 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define HPROF_NULL_THREAD 0 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef u4 hprof_id; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef hprof_id hprof_string_id; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef hprof_id hprof_object_id; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef hprof_id hprof_class_object_id; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if WITH_HPROF_STACK 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef hprof_id hprof_stack_frame_id; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef enum hprof_basic_type { 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_object = 2, 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_boolean = 4, 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_char = 5, 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_float = 6, 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_double = 7, 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_byte = 8, 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_short = 9, 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_int = 10, 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_basic_long = 11, 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} hprof_basic_type; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef enum hprof_tag_t { 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_STRING = 0x01, 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_LOAD_CLASS = 0x02, 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_UNLOAD_CLASS = 0x03, 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_STACK_FRAME = 0x04, 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_STACK_TRACE = 0x05, 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_ALLOC_SITES = 0x06, 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_HEAP_SUMMARY = 0x07, 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_START_THREAD = 0x0A, 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_END_THREAD = 0x0B, 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_HEAP_DUMP = 0x0C, 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_HEAP_DUMP_SEGMENT = 0x1C, 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_HEAP_DUMP_END = 0x2C, 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_CPU_SAMPLES = 0x0D, 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_TAG_CONTROL_SETTINGS = 0x0E, 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} hprof_tag_t; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Values for the first byte of 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HEAP_DUMP and HEAP_DUMP_SEGMENT 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * records: 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef enum hprof_heap_tag_t { 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* standard */ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_UNKNOWN = 0xFF, 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_JNI_GLOBAL = 0x01, 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_JNI_LOCAL = 0x02, 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_JAVA_FRAME = 0x03, 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_NATIVE_STACK = 0x04, 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_STICKY_CLASS = 0x05, 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_THREAD_BLOCK = 0x06, 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_MONITOR_USED = 0x07, 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_THREAD_OBJECT = 0x08, 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_CLASS_DUMP = 0x20, 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_INSTANCE_DUMP = 0x21, 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_OBJECT_ARRAY_DUMP = 0x22, 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_PRIMITIVE_ARRAY_DUMP = 0x23, 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Android */ 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_HEAP_DUMP_INFO = 0xfe, 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_INTERNED_STRING = 0x89, 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_FINALIZING = 0x8a, 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_DEBUGGER = 0x8b, 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_REFERENCE_CLEANUP = 0x8c, 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_VM_INTERNAL = 0x8d, 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_ROOT_JNI_MONITOR = 0x8e, 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_UNREACHABLE = 0x90, 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_PRIMITIVE_ARRAY_NODATA_DUMP = 0xc3, 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} hprof_heap_tag_t; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Represents a top-level hprof record, whose serialized 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * format is: 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * u1 TAG: denoting the type of the record 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * u4 TIME: number of microseconds since the time stamp in the header 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * u4 LENGTH: number of bytes that follow this u4 field 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and belong to this record 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * [u1]* BODY: as many bytes as specified in the above u4 field 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef struct hprof_record_t { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project unsigned char *body; 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u4 time; 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u4 length; 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project size_t allocLen; 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u1 tag; 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bool dirty; 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} hprof_record_t; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef enum { 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_HEAP_DEFAULT = 0, 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_HEAP_ZYGOTE = 'Z', 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HPROF_HEAP_APP = 'A' 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} HprofHeapId; 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef struct hprof_context_t { 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* curRec *must* be first so that we 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * can cast from a context to a record. 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_record_t curRec; 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char *fileName; 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FILE *fp; 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u4 gcThreadSerialNumber; 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u1 gcScanState; 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project HprofHeapId currentHeap; // which heap we're currently emitting 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project u4 stackTraceSerialNumber; 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project size_t objectsInSegment; 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} hprof_context_t; 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HprofString.c functions 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecthprof_string_id hprofLookupStringId(const char *str); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofDumpStrings(hprof_context_t *ctx); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofStartup_String(void); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofShutdown_String(void); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HprofClass.c functions 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecthprof_class_object_id hprofLookupClassId(const ClassObject *clazz); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofDumpClasses(hprof_context_t *ctx); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofStartup_Class(void); 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofShutdown_Class(void); 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HprofHeap.c functions 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofStartHeapDump(hprof_context_t *ctx); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofFinishHeapDump(hprof_context_t *ctx); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofSetGcScanState(hprof_context_t *ctx, 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprof_heap_tag_t state, u4 threadSerialNumber); 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofMarkRootObject(hprof_context_t *ctx, 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const Object *obj, jobject jniObj); 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofDumpHeapObject(hprof_context_t *ctx, const Object *obj); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HprofOutput.c functions 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid hprofContextInit(hprof_context_t *ctx, char *fileName, FILE *fp, 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bool writeHeader); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofFlushRecord(hprof_record_t *rec, FILE *fp); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofFlushCurrentRecord(hprof_context_t *ctx); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofStartNewRecord(hprof_context_t *ctx, u1 tag, u4 time); 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU1ToRecord(hprof_record_t *rec, u1 value); 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU1ListToRecord(hprof_record_t *rec, 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u1 *values, size_t numValues); 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddUtf8StringToRecord(hprof_record_t *rec, const char *str); 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU2ToRecord(hprof_record_t *rec, u2 value); 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU2ListToRecord(hprof_record_t *rec, 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u2 *values, size_t numValues); 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU4ToRecord(hprof_record_t *rec, u4 value); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU4ListToRecord(hprof_record_t *rec, 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u4 *values, size_t numValues); 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU8ToRecord(hprof_record_t *rec, u8 value); 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofAddU8ListToRecord(hprof_record_t *rec, 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project const u8 *values, size_t numValues); 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define hprofAddIdToRecord(rec, id) hprofAddU4ToRecord((rec), (u4)(id)) 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define hprofAddIdListToRecord(rec, values, numValues) \ 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hprofAddU4ListToRecord((rec), (const u4 *)(values), (numValues)) 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if WITH_HPROF_STACK 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HprofStack.c functions 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid hprofFillInStackTrace(void *objectPtr); 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofDumpStacks(hprof_context_t *ctx); 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofStartup_Stack(void); 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofShutdown_Stack(void); 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HprofStackFrame.c functions 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofDumpStackFrames(hprof_context_t *ctx); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofStartup_StackFrame(void); 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint hprofShutdown_StackFrame(void); 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Hprof.c functions 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecthprof_context_t *hprofStartup(const char *outputFileName); 2388c880b9e903504fa9c61d9964ba2379f0e060af5Andy McFaddenbool hprofShutdown(hprof_context_t *ctx); 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Heap.c functions 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The contents of the hprof directory have no knowledge of 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the heap implementation; these functions require heap knowledge, 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * so they are implemented in Heap.c. 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2478c880b9e903504fa9c61d9964ba2379f0e060af5Andy McFaddenint hprofDumpHeap(const char* fileName); 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dvmHeapSetHprofGcScanState(hprof_heap_tag_t state, u4 threadSerialNumber); 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif // _DALVIK_HPROF_HPROF 251