1use crate::sys;
2
3#[derive(Debug, Clone, Copy)]
4pub enum JvmtiEvent {
5 VmInit,
6 VmDeath,
7 ThreadStart,
8 ThreadEnd,
9 ClassFileLoadHook,
10 ClassLoad,
11 ClassPrepare,
12 VmStart,
13 Exception,
14 ExceptionCatch,
15 SingleStep,
16 FramePop,
17 Breakpoint,
18 FieldAccess,
19 FieldModification,
20 MethodEntry,
21 MethodExit,
22 NativeMethodBind,
23 CompiledMethodLoad,
24 CompiledMethodUnload,
25 DynamicCodeGenerated,
26 DataDumpRequest,
27 MonitorWait,
28 MonitorWaited,
29 MonitorContendedEnter,
30 MonitorContendedEntered,
31 ResourceExhausted,
32 GarbageCollectionStart,
33 GarbageCollectionFinish,
34 ObjectFree,
35 VmObjectAlloc,
36 Unsupported,
37}
38
39impl From<JvmtiEvent> for sys::jvmtiEvent {
40 fn from(value: JvmtiEvent) -> Self {
41 match value {
42 JvmtiEvent::VmInit => sys::JVMTI_EVENT_VM_INIT,
43 JvmtiEvent::VmDeath => sys::JVMTI_EVENT_VM_DEATH,
44 JvmtiEvent::ThreadStart => sys::JVMTI_EVENT_THREAD_START,
45 JvmtiEvent::ThreadEnd => sys::JVMTI_EVENT_THREAD_END,
46 JvmtiEvent::ClassFileLoadHook => sys::JVMTI_EVENT_CLASS_FILE_LOAD_HOOK,
47 JvmtiEvent::ClassLoad => sys::JVMTI_EVENT_CLASS_LOAD,
48 JvmtiEvent::ClassPrepare => sys::JVMTI_EVENT_CLASS_PREPARE,
49 JvmtiEvent::VmStart => sys::JVMTI_EVENT_VM_START,
50 JvmtiEvent::Exception => sys::JVMTI_EVENT_EXCEPTION,
51 JvmtiEvent::ExceptionCatch => sys::JVMTI_EVENT_EXCEPTION_CATCH,
52 JvmtiEvent::SingleStep => sys::JVMTI_EVENT_SINGLE_STEP,
53 JvmtiEvent::FramePop => sys::JVMTI_EVENT_FRAME_POP,
54 JvmtiEvent::Breakpoint => sys::JVMTI_EVENT_BREAKPOINT,
55 JvmtiEvent::FieldAccess => sys::JVMTI_EVENT_FIELD_ACCESS,
56 JvmtiEvent::FieldModification => sys::JVMTI_EVENT_FIELD_MODIFICATION,
57 JvmtiEvent::MethodEntry => sys::JVMTI_EVENT_METHOD_ENTRY,
58 JvmtiEvent::MethodExit => sys::JVMTI_EVENT_METHOD_EXIT,
59 JvmtiEvent::NativeMethodBind => sys::JVMTI_EVENT_NATIVE_METHOD_BIND,
60 JvmtiEvent::CompiledMethodLoad => sys::JVMTI_EVENT_COMPILED_METHOD_LOAD,
61 JvmtiEvent::CompiledMethodUnload => sys::JVMTI_EVENT_COMPILED_METHOD_UNLOAD,
62 JvmtiEvent::DynamicCodeGenerated => sys::JVMTI_EVENT_DYNAMIC_CODE_GENERATED,
63 JvmtiEvent::DataDumpRequest => sys::JVMTI_EVENT_DATA_DUMP_REQUEST,
64 JvmtiEvent::MonitorWait => sys::JVMTI_EVENT_MONITOR_WAIT,
65 JvmtiEvent::MonitorWaited => sys::JVMTI_EVENT_MONITOR_WAITED,
66 JvmtiEvent::MonitorContendedEnter => sys::JVMTI_EVENT_MONITOR_CONTENDED_ENTER,
67 JvmtiEvent::MonitorContendedEntered => sys::JVMTI_EVENT_MONITOR_CONTENDED_ENTERED,
68 JvmtiEvent::ResourceExhausted => sys::JVMTI_EVENT_RESOURCE_EXHAUSTED,
69 JvmtiEvent::GarbageCollectionStart => sys::JVMTI_EVENT_GARBAGE_COLLECTION_START,
70 JvmtiEvent::GarbageCollectionFinish => sys::JVMTI_EVENT_GARBAGE_COLLECTION_FINISH,
71 JvmtiEvent::ObjectFree => sys::JVMTI_EVENT_OBJECT_FREE,
72 JvmtiEvent::VmObjectAlloc => sys::JVMTI_EVENT_VM_OBJECT_ALLOC,
73 _ => sys::JVMTI_CONSTANT_UNSUPPORTED,
74 }
75 }
76}
77
78impl From<sys::jvmtiEvent> for JvmtiEvent {
79 fn from(value: sys::jvmtiEvent) -> Self {
80 match value {
81 sys::JVMTI_EVENT_VM_INIT => JvmtiEvent::VmInit,
82 sys::JVMTI_EVENT_VM_DEATH => JvmtiEvent::VmDeath,
83 sys::JVMTI_EVENT_THREAD_START => JvmtiEvent::ThreadStart,
84 sys::JVMTI_EVENT_THREAD_END => JvmtiEvent::ThreadEnd,
85 sys::JVMTI_EVENT_CLASS_FILE_LOAD_HOOK => JvmtiEvent::ClassFileLoadHook,
86 sys::JVMTI_EVENT_CLASS_LOAD => JvmtiEvent::ClassLoad,
87 sys::JVMTI_EVENT_CLASS_PREPARE => JvmtiEvent::ClassPrepare,
88 sys::JVMTI_EVENT_VM_START => JvmtiEvent::VmStart,
89 sys::JVMTI_EVENT_EXCEPTION => JvmtiEvent::Exception,
90 sys::JVMTI_EVENT_EXCEPTION_CATCH => JvmtiEvent::ExceptionCatch,
91 sys::JVMTI_EVENT_SINGLE_STEP => JvmtiEvent::SingleStep,
92 sys::JVMTI_EVENT_FRAME_POP => JvmtiEvent::FramePop,
93 sys::JVMTI_EVENT_BREAKPOINT => JvmtiEvent::Breakpoint,
94 sys::JVMTI_EVENT_FIELD_ACCESS => JvmtiEvent::FieldAccess,
95 sys::JVMTI_EVENT_FIELD_MODIFICATION => JvmtiEvent::FieldModification,
96 sys::JVMTI_EVENT_METHOD_ENTRY => JvmtiEvent::MethodEntry,
97 sys::JVMTI_EVENT_METHOD_EXIT => JvmtiEvent::MethodExit,
98 sys::JVMTI_EVENT_NATIVE_METHOD_BIND => JvmtiEvent::NativeMethodBind,
99 sys::JVMTI_EVENT_COMPILED_METHOD_LOAD => JvmtiEvent::CompiledMethodLoad,
100 sys::JVMTI_EVENT_COMPILED_METHOD_UNLOAD => JvmtiEvent::CompiledMethodUnload,
101 sys::JVMTI_EVENT_DYNAMIC_CODE_GENERATED => JvmtiEvent::DynamicCodeGenerated,
102 sys::JVMTI_EVENT_DATA_DUMP_REQUEST => JvmtiEvent::DataDumpRequest,
103 sys::JVMTI_EVENT_MONITOR_WAIT => JvmtiEvent::MonitorWait,
104 sys::JVMTI_EVENT_MONITOR_WAITED => JvmtiEvent::MonitorWaited,
105 sys::JVMTI_EVENT_MONITOR_CONTENDED_ENTER => JvmtiEvent::MonitorContendedEnter,
106 sys::JVMTI_EVENT_MONITOR_CONTENDED_ENTERED => JvmtiEvent::MonitorContendedEntered,
107 sys::JVMTI_EVENT_RESOURCE_EXHAUSTED => JvmtiEvent::ResourceExhausted,
108 sys::JVMTI_EVENT_GARBAGE_COLLECTION_START => JvmtiEvent::GarbageCollectionStart,
109 sys::JVMTI_EVENT_GARBAGE_COLLECTION_FINISH => JvmtiEvent::GarbageCollectionFinish,
110 sys::JVMTI_EVENT_OBJECT_FREE => JvmtiEvent::ObjectFree,
111 sys::JVMTI_EVENT_VM_OBJECT_ALLOC => JvmtiEvent::VmObjectAlloc,
112 _ => JvmtiEvent::Unsupported,
113 }
114 }
115}