package edu.tufts.eaftan.hprofparser.handler;
import edu.tufts.eaftan.hprofparser.parser.datastructures.AllocSite;
import edu.tufts.eaftan.hprofparser.parser.datastructures.CPUSample;
import edu.tufts.eaftan.hprofparser.parser.datastructures.Constant;
import edu.tufts.eaftan.hprofparser.parser.datastructures.InstanceField;
import edu.tufts.eaftan.hprofparser.parser.datastructures.Static;
import edu.tufts.eaftan.hprofparser.parser.datastructures.Value;
/**
* Primary interface to be used with the hprof parser. The parser takes an implementation of
* this interface and calls the matching callback method on each record encountered.
* Implementations of this interface can do things like printing the record or building a graph.
*
* <p>You may assume that all references passed into the handler methods are non-null.
*
* <p>Generally you want to subclass {@code NullRecordHandler} rather than implement this interface
* directly.
*/
public interface RecordHandler {
public abstract void header(String format, int idSize, long time);
public abstract void stringInUTF8(long id, String data);
public abstract void loadClass(int classSerialNum, long classObjId, int stackTraceSerialNum,
long classNameStringId);
public abstract void unloadClass(int classSerialNum);
public abstract void stackFrame(long stackFrameId,
long methodNameStringId,
long methodSigStringId,
long sourceFileNameStringId,
int classSerialNum,
int location);
public abstract void stackTrace(int stackTraceSerialNum, int threadSerialNum, int numFrames,
long[] stackFrameIds);
public abstract void allocSites(short bitMaskFlags,
float cutoffRatio,
int totalLiveBytes,
int totalLiveInstances,
long totalBytesAllocated,
long totalInstancesAllocated,
AllocSite[] sites);
public abstract void heapSummary(int totalLiveBytes, int totalLiveInstances,
long totalBytesAllocated, long totalInstancesAllocated);
public abstract void startThread(int threadSerialNum,
long threadObjectId,
int stackTraceSerialNum,
long threadNameStringId,
long threadGroupNameId,
long threadParentGroupNameId);
public abstract void endThread(int threadSerialNum);
public abstract void heapDump();
public abstract void heapDumpEnd();
public abstract void heapDumpSegment();
public abstract void cpuSamples(int totalNumOfSamples, CPUSample[] samples);
public abstract void controlSettings(int bitMaskFlags, short stackTraceDepth);
public abstract void rootUnknown(long objId);
public abstract void rootJNIGlobal(long objId, long JNIGlobalRefId);
public abstract void rootJNILocal(long objId, int threadSerialNum, int frameNum);
public abstract void rootJavaFrame(long objId, int threadSerialNum, int frameNum);
public abstract void rootNativeStack(long objId, int threadSerialNum);
public abstract void rootStickyClass(long objId);
public abstract void rootThreadBlock(long objId, int threadSerialNum);
public abstract void rootMonitorUsed(long objId);
public abstract void rootThreadObj(long objId, int threadSerialNum, int stackTraceSerialNum);
public abstract void classDump(long classObjId,
int stackTraceSerialNum,
long superClassObjId,
long classLoaderObjId,
long signersObjId,
long protectionDomainObjId,
long reserved1,
long reserved2,
int instanceSize,
Constant[] constants,
Static[] statics,
InstanceField[] instanceFields);
public abstract void instanceDump(long objId, int stackTraceSerialNum, long classObjId,
Value<?>[] instanceFieldValues);
public abstract void objArrayDump(long objId, int stackTraceSerialNum, long elemClassObjId,
long[] elems);
public abstract void primArrayDump(long objId, int stackTraceSerialNum, byte elemType,
Value<?>[] elems);
public abstract void finished();
}