hprof.h revision 4378
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/*
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab *
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * Redistribution and use in source and binary forms, with or without
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * modification, are permitted provided that the following conditions
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * are met:
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab *
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * - Redistributions of source code must retain the above copyright
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * notice, this list of conditions and the following disclaimer.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab *
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * - Redistributions in binary form must reproduce the above copyright
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * notice, this list of conditions and the following disclaimer in the
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * documentation and/or other materials provided with the distribution.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab *
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * - Neither the name of Oracle nor the names of its
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * contributors may be used to endorse or promote products derived
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * from this software without specific prior written permission.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab *
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/*
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * This source code is provided to illustrate the usage of a given feature
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * or technique and has been deliberately simplified. Additional steps
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * required for a production-quality application, such as security checks,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * input validation and proper error handling, might not be present in
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * this sample code.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Primary hprof #include file, should be included by most if not
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * all hprof source files. Gives access to the global data structure
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * and all global macros, and everything declared in the #include
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * files of each of the source files.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#ifndef HPROF_H
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define HPROF_H
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Standard C functions used throughout. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <stdio.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <stdlib.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <ctype.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <string.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <stddef.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <stdarg.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <limits.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <time.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <errno.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* General JVM/Java functions, types and macros. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include <sys/types.h>
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "jni.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "jvmti.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "classfile_constants.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#ifndef SKIP_NPT
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "npt.h" /* To get NptEnv for doing character conversions */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#endif
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Macros to extract the upper and lower 32 bits of a jlong */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define jlong_high(a) ((jint)((a)>>32))
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define jlong_low(a) ((jint)(a))
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define jlong_to_jint(a) ((jint)(a))
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define jint_to_jlong(a) ((jlong)(a))
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define jlong_add(a, b) ((a) + (b))
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* The type used to contain a generic 32bit "serial number". */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef unsigned SerialNumber;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* How the options get to OnLoad: */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define AGENTNAME "hprof"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define XRUN "-Xrun" AGENTNAME
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define AGENTLIB "-agentlib:" AGENTNAME
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Name of prelude file, found at runtime relative to java binary location */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define PRELUDE_FILE "jvm.hprof.txt"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* File I/O buffer size to be used with any file i/o operation */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#define FILE_IO_BUFFER_SIZE (1024*64)
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Machine dependent functions. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_md.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Table index types */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef unsigned TableIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex ClassIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex FrameIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex IoNameIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex MonitorIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex ObjectIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex LoaderIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex RefIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex SiteIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex StringIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex TlsIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef TableIndex TraceIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Index for method tables in classes */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef int MethodIndex;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* The different kinds of class status bits. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abenum ClassStatus {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab CLASS_PREPARED = 0x00000001,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab CLASS_LOADED = 0x00000002,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab CLASS_UNLOADED = 0x00000004,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab CLASS_SPECIAL = 0x00000008,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab CLASS_IN_LOAD_LIST = 0x00000010,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab CLASS_SYSTEM = 0x00000020,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab CLASS_DUMPED = 0x00000040
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab};
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef jint ClassStatus;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* The different kind of objects we track with heap=dump */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef unsigned char ObjectKind;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abenum {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab OBJECT_NORMAL = 1,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab OBJECT_CLASS = 2,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab OBJECT_SYSTEM = 3,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab OBJECT_HPROF = 4,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab OBJECT_LOADER = 5
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab};
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Used by site_write() when writing out the heap=sites data. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abenum {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SITE_DUMP_INCREMENTAL = 0x01,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SITE_SORT_BY_ALLOC = 0x02,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SITE_FORCE_GC = 0x04
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab};
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Used to hold information about a field, and potentially a value too. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef struct FieldInfo {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab ClassIndex cnum;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab StringIndex name_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab StringIndex sig_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned short modifiers;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned char primType;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned char primSize;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab} FieldInfo;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Used to hold information about a constant pool entry value for a class. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef struct ConstantPoolValue {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned constant_pool_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab StringIndex sig_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jvalue value;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab} ConstantPoolValue;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* All machine independent functions */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_error.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_util.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_blocks.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_stack.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_init.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_table.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_string.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_class.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_tracker.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_frame.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_monitor.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_trace.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_site.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_event.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_reference.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_object.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_loader.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_tls.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_check.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_io.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_listener.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_cpu.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#include "hprof_tag.h"
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* Global data structure */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abstruct LineTable;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abtypedef struct {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jvmtiEnv *jvmti; /* JVMTI env for this session */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab JavaVM *jvm; /* JavaVM* for this session */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#ifndef SKIP_NPT
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab NptEnv *npt; /* NptEnv* for this session, see npt.h */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#endif
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint cachedJvmtiVersion; /* JVMTI version number */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char *header; /* "JAVA PROFILE 1.0.[12]" */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean segmented; /* JNI_TRUE if 1.0.2 */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong maxHeapSegment;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong maxMemory;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Option settings */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char * options; /* option string copy */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char * utf8_output_filename;/* file=filename */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int net_port; /* net=hostname:port */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char * net_hostname; /* net=hostname:port */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char output_format; /* format=a|b */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int max_trace_depth; /* depth=max_trace_depth */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int prof_trace_depth; /* max_trace_depth or 2 (old) */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int sample_interval; /* interval=sample_interval (ms) */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab double cutoff_point; /* cutoff=cutoff_point */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean cpu_sampling; /* cpu=samples|y */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean cpu_timing; /* cpu=times */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean old_timing_format; /* cpu=old (old) output format */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean heap_dump; /* heap=dump|all */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean alloc_sites; /* heap=sites|all */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean thread_in_traces; /* thread=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean lineno_in_traces; /* lineno=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean dump_on_exit; /* doe=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean micro_state_accounting; /* msa=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean force_output; /* force=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean monitor_tracing; /* monitor=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean gc_okay; /* gc_okay=y|n (Not used) */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned logflags; /* logflags=bitmask */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab #define DEBUGFLAG_UNPREPARED_CLASSES 0x001
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab unsigned debugflags; /* debugflags=bitmask */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean coredump; /* coredump=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean errorexit; /* errorexit=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean pause; /* pause=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean debug; /* debug=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean verbose; /* verbose=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean primfields; /* primfields=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean primarrays; /* primarrays=y|n */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint experiment; /* X=NUMBER */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int fd; /* file or socket (net=addr). */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean socket; /* True if fd is a socket (net=addr). */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean bci; /* True if any kind of BCI being done */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean obj_watch; /* True if bci and watching allocs */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int bci_counter; /* Class BCI counter */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int heap_fd;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char *output_filename; /* file=filename */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char *heapfilename;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int check_fd;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char *checkfilename;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab volatile jboolean dump_in_process; /* Dump in process */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab volatile jboolean jvm_initializing; /* VMInit happening */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab volatile jboolean jvm_initialized; /* VMInit happened */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab volatile jboolean jvm_shut_down; /* VMDeath happened */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean vm_death_callback_active; /* VMDeath happening */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Stack of objects freed during GC */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab Stack * object_free_stack;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID object_free_lock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Lock for debug_malloc() */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID debug_malloc_lock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Count of classes that JVMTI thinks are active */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint class_count;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Used to track callbacks for VM_DEATH */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID callbackBlock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID callbackLock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint active_callbacks;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Running totals on all bytes allocated */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong total_alloced_bytes;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong total_alloced_instances;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint total_live_bytes;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint total_live_instances;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Running total on all time spent in GC (very rough estimate) */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong gc_start_time;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong time_in_gc;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Global Data access Lock */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID data_access_lock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Global Dump lock */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID dump_lock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Milli-second clock when hprof onload started */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong micro_sec_ticks;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Thread class (for starting agent threads) */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab ClassIndex thread_cnum;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Agent threads started information */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean listener_loop_running;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID listener_loop_lock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean cpu_loop_running;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID cpu_loop_lock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID cpu_sample_lock; /* cpu=samples loop */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint gc_finish; /* Count of GC finish events */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean gc_finish_active; /* True if thread active */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean gc_finish_stop_request; /* True if we want it to stop */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jrawMonitorID gc_finish_lock;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean pause_cpu_sampling; /* temp pause in cpu sampling */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Output buffer, position, size, and position in dump if reading */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char * write_buffer;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int write_buffer_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int write_buffer_size;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char * heap_buffer;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int heap_buffer_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int heap_buffer_size;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong heap_last_tag_position;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jlong heap_write_count;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab char * check_buffer;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int check_buffer_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int check_buffer_size;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Serial number counters for tables (see hprof_table.c), classes,
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab * tls (thread local storage), and traces.
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber table_serial_number_start;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber class_serial_number_start;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber thread_serial_number_start;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber trace_serial_number_start;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber object_serial_number_start;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber frame_serial_number_start;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber gref_serial_number_start;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber table_serial_number_counter;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber class_serial_number_counter;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber thread_serial_number_counter;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber trace_serial_number_counter;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber object_serial_number_counter;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber frame_serial_number_counter;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber gref_serial_number_counter;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* The methodID for the Object <init> method. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jmethodID object_init_method;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Keeping track of the tracker class and it's methods */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab volatile jint tracking_engaged; /* !=0 means it's on */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab ClassIndex tracker_cnum;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab int tracker_method_count;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct {
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab StringIndex name; /* String index for name */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab StringIndex sig; /* String index for signature */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jmethodID method; /* Method ID */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab } tracker_methods[12]; /* MAX 12 Tracker class methods */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Index to some common items */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab LoaderIndex system_loader;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SerialNumber unknown_thread_serial_num;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab TraceIndex system_trace_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SiteIndex system_object_site_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jint system_class_size;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab TraceIndex hprof_trace_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab SiteIndex hprof_site_index;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Tables for strings, classes, sites, etc. */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * string_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * ioname_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * class_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * site_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * object_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * reference_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * frame_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * trace_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * monitor_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * tls_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab struct LookupTable * loader_table;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Handles to java_crw_demo library */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab void * java_crw_demo_library;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab void * java_crw_demo_function;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab void * java_crw_demo_classname_function;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab /* Indication that the agent has been loaded */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab jboolean isLoaded;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab} GlobalData;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab/* This should be the only 'extern' in the library (not exported). */
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87abextern GlobalData * gdata;
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab#endif
c6c9aed4d309e3d11be652b85e3bf8bb72f20c87ab