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