| java.lang.Object org.netbeans.lib.profiler.instrumentation.ClassManager org.netbeans.lib.profiler.instrumentation.RecursiveMethodInstrumentor
All known Subclasses: org.netbeans.lib.profiler.instrumentation.RecursiveMethodInstrumentor2, org.netbeans.lib.profiler.instrumentation.RecursiveMethodInstrumentor1, org.netbeans.lib.profiler.instrumentation.RecursiveMethodInstrumentor3,
RecursiveMethodInstrumentor | abstract public class RecursiveMethodInstrumentor extends ClassManager (Code) | | Base class for two "recursive" method scanners, implementing the "eager" and "lazy" transitive call subgraph revelation and
instrumentation schemes. This class contains functionality used by both scaners.
author: Tomas Hurka author: Misha Dmitriev author: Adrian Mos |
Method Summary | |
protected void | addToSubclassList(DynamicClassInfo clazz, DynamicClassInfo addedClassInfo) | final protected int | at(int index) | protected Object[] | createInstrumentedMethodPack() | protected Object[] | createInstrumentedMethodPack(DynamicClassInfo clazz) Create a single-class packet of instrumented methods or classes in response to a class load event. | abstract protected void | findAndMarkOverridingMethodsReachable(DynamicClassInfo superClass, DynamicClassInfo subClass) | abstract Object[] | getInitialMethodsToInstrument(String[] loadedClasses, int[] loadedClassLoaderIds, byte[][] cachedClassFileBytes, RootMethods rootMethods) This method is called when some class containing an instrumentation root method is loaded by the VM (either has just
been loaded, or the JFluid server, upon the user's command to initiate instrumentation, has detected that it has been
loaded some time in the past). | abstract public Object[] | getMethodsToInstrumentUponClassLoad(String className, int classLoaderId, boolean threadInCallGraph) | abstract public Object[] | getMethodsToInstrumentUponMethodInvocation(String className, int classLoaderId, String methodName, String methodSignature) Methods below return method bytecodes to instrument upon specific events reported by the JFluid server. | abstract public Object[] | getMethodsToInstrumentUponReflectInvoke(String className, int classLoaderId, String methodName, String methodSignature) | protected void | initInstrMethodData() Called every time before a new round of instrumentation, caused by class load, method invoke, etc. | final protected long | intAt(int tbl, int entry) | protected static boolean | isEmptyMethod(byte[] code) | protected static boolean | isGetterSetterMethod(byte[] code) | protected boolean | isLeafMethod(byte[] code) | protected void | markAllMethodsMarker(DynamicClassInfo clazz) | protected void | markAllMethodsRoot(DynamicClassInfo clazz) | protected void | markClassAndMethodForInstrumentation(DynamicClassInfo clazz, int methodIdx) | protected boolean | markMethod(DynamicClassInfo clazz, int rootMethod) | protected boolean | markMethodMarker(DynamicClassInfo clazz, String rootMethodName, String rootMethodSignature) | protected boolean | markMethodRoot(DynamicClassInfo clazz, String rootMethodName, String rootMethodSignature) | protected boolean | matchesWildcard(String wildcard, String loadedClassName) | abstract protected void | processInvoke(DynamicClassInfo clazz, boolean virtualCall, int index) | protected static boolean | rootClassNameIsReal(String rootClassName) | protected boolean | scanBytecode(DynamicClassInfo clazz, byte[] code) This method is used either to normally process the bytecodes of a method, in which case clazz != null and the return
result is ignored. | protected void | scanMethod(DynamicClassInfo clazz, int index) | final protected int | shortAt(int index) | abstract protected boolean | tryInstrumentSpawnedThreads(DynamicClassInfo clazz) |
codeBytes | protected byte[] codeBytes(Code) | | |
dontInstrumentEmptyMethods | protected boolean dontInstrumentEmptyMethods(Code) | | |
dontScanGetterSetterMethods | protected boolean dontScanGetterSetterMethods(Code) | | |
instrumentClinit | protected boolean instrumentClinit(Code) | | |
instrumentSpawnedThreads | protected boolean instrumentSpawnedThreads(Code) | | |
markerInjectionType | protected int markerInjectionType(Code) | | |
nInstrClasses | protected int nInstrClasses(Code) | | |
nInstrMethods | protected int nInstrMethods(Code) | | |
normalInjectionType | protected int normalInjectionType(Code) | | |
offset | protected int offset(Code) | | |
reflectInvokeInstrumented | protected boolean reflectInvokeInstrumented(Code) | | |
rootInjectionType | protected int rootInjectionType(Code) | | |
at | final protected int at(int index)(Code) | | |
createInstrumentedMethodPack | protected Object[] createInstrumentedMethodPack()(Code) | | Create a multi-class packet of instrumented methods or classes
|
createInstrumentedMethodPack | protected Object[] createInstrumentedMethodPack(DynamicClassInfo clazz)(Code) | | Create a single-class packet of instrumented methods or classes in response to a class load event.
|
getInitialMethodsToInstrument | abstract Object[] getInitialMethodsToInstrument(String[] loadedClasses, int[] loadedClassLoaderIds, byte[][] cachedClassFileBytes, RootMethods rootMethods)(Code) | | This method is called when some class containing an instrumentation root method is loaded by the VM (either has just
been loaded, or the JFluid server, upon the user's command to initiate instrumentation, has detected that it has been
loaded some time in the past). The JFluid server then sends a RootClassLoadedCommand to the tool. This command contains
the information on all classes currently loaded by the VM - see the details in this method's header.
This method should initialize instrumentation-related data structures, register given classes as loaded, and return
the initial set of methods to instrument in the format given by createInstrumentedMethodPack().
|
getMethodsToInstrumentUponClassLoad | abstract public Object[] getMethodsToInstrumentUponClassLoad(String className, int classLoaderId, boolean threadInCallGraph)(Code) | | |
getMethodsToInstrumentUponMethodInvocation | abstract public Object[] getMethodsToInstrumentUponMethodInvocation(String className, int classLoaderId, String methodName, String methodSignature)(Code) | | Methods below return method bytecodes to instrument upon specific events reported by the JFluid server.
|
getMethodsToInstrumentUponReflectInvoke | abstract public Object[] getMethodsToInstrumentUponReflectInvoke(String className, int classLoaderId, String methodName, String methodSignature)(Code) | | |
initInstrMethodData | protected void initInstrMethodData()(Code) | | Called every time before a new round of instrumentation, caused by class load, method invoke, etc.
|
intAt | final protected long intAt(int tbl, int entry)(Code) | | Given the table at the specified index, return the specified entry
|
isEmptyMethod | protected static boolean isEmptyMethod(byte[] code)(Code) | | |
isGetterSetterMethod | protected static boolean isGetterSetterMethod(byte[] code)(Code) | | |
isLeafMethod | protected boolean isLeafMethod(byte[] code)(Code) | | |
markClassAndMethodForInstrumentation | protected void markClassAndMethodForInstrumentation(DynamicClassInfo clazz, int methodIdx)(Code) | | |
matchesWildcard | protected boolean matchesWildcard(String wildcard, String loadedClassName)(Code) | | |
processInvoke | abstract protected void processInvoke(DynamicClassInfo clazz, boolean virtualCall, int index)(Code) | | |
rootClassNameIsReal | protected static boolean rootClassNameIsReal(String rootClassName)(Code) | | |
scanBytecode | protected boolean scanBytecode(DynamicClassInfo clazz, byte[] code)(Code) | | This method is used either to normally process the bytecodes of a method, in which case clazz != null and the return
result is ignored. If clazz == null, then returns false upon encountering the first invoke bytecode, and true if there
are no invokes, i.e. it's a leaf method.
|
shortAt | final protected int shortAt(int index)(Code) | | |
tryInstrumentSpawnedThreads | abstract protected boolean tryInstrumentSpawnedThreads(DynamicClassInfo clazz)(Code) | | |
|
|