1 # tifast 2 3 tifast is a JVMTI agent designed for profiling the performance impact listening 4 to various JVMTI events. It is called tifast since none of the event handlers do 5 anything meaning that it can be considered speed-of-light. 6 7 # Usage 8 ### Build 9 > `make libtifast` 10 11 The libraries will be built for 32-bit, 64-bit, host and target. Below examples 12 assume you want to use the 64-bit version. 13 14 ### Command Line 15 16 The agent is loaded using -agentpath like normal. It takes arguments in the 17 following format: 18 > `[log,][EventName1[,EventName2[,...]]]` 19 20 * If 'log' is the first argument the event handlers will LOG(INFO) when they are 21 called. This behavior is static. The no-log methods have no branches and just 22 immediately return. 23 24 * If 'all' is one of the arguments all events the current runtime is capable of 25 providing will be listened for and all other arguments (excepting 'log') will 26 be ignored. 27 28 * The event-names are the same names as are used in the jvmtiEventCallbacks 29 struct. 30 31 * All required capabilities are automatically gained. No capabilities other than 32 those needed to listen for the events are gained. 33 34 * Only events which do not require additional function calls to cause delivery 35 and are sent more than once are supported. 36 37 #### Supported events 38 39 The following events may be listened for with this agent 40 41 * `SingleStep` 42 43 * `MethodEntry` 44 45 * `MethodExit` 46 47 * `NativeMethodBind` 48 49 * `Exception` 50 51 * `ExceptionCatch` 52 53 * `ThreadStart` 54 55 * `ThreadEnd` 56 57 * `ClassLoad` 58 59 * `ClassPrepare` 60 61 * `ClassFileLoadHook` 62 63 * `CompiledMethodLoad` 64 65 * `CompiledMethodUnload` 66 67 * `DynamicCodeGenerated` 68 69 * `DataDumpRequest` 70 71 * `MonitorContendedEnter` 72 73 * `MonitorContendedEntered` 74 75 * `MonitorWait` 76 77 * `MonitorWaited` 78 79 * `ResourceExhausted` 80 81 * `VMObjectAlloc` 82 83 * `GarbageCollectionStart` 84 85 * `GarbageCollectionFinish` 86 87 * `VMStart` 88 89 * `VMInit` 90 91 * `VMDeath` 92 93 All other events cannot be listened for by this agent. Most of these missing 94 events either require the use of other functions in order to be called 95 (`FramePop`, `ObjectFree`, etc). 96 97 #### ART 98 > `art -Xplugin:$ANDROID_HOST_OUT/lib64/libopenjdkjvmti.so '-agentpath:libtifast.so=MethodEntry' -cp tmp/java/helloworld.dex -Xint helloworld` 99 100 * `-Xplugin` and `-agentpath` need to be used, otherwise the agent will fail during init. 101 * If using `libartd.so`, make sure to use the debug version of jvmti. 102 103 > `adb shell setenforce 0` 104 > 105 > `adb push $ANDROID_PRODUCT_OUT/system/lib64/libtifast.so /data/local/tmp/` 106 > 107 > `adb shell am start-activity --attach-agent /data/local/tmp/libtifast.so=MonitorWait,ClassPrepare some.debuggable.apps/.the.app.MainActivity` 108 109 #### RI 110 > `java '-agentpath:libtifast.so=MethodEntry' -cp tmp/helloworld/classes helloworld` 111