jvmti_rs/wrapper/objects/
jevent_callbacks.rs1use crate::sys::jvmtiEventCallbacks;
2use std::marker::PhantomData;
3use jni_sys::jint;
4use std::mem::size_of;
5use crate::*;
6
7#[repr(transparent)]
8#[derive(Clone, Copy, Debug)]
9pub struct JEventCallbacks<'a> {
10 internal: jvmtiEventCallbacks,
11 lifetime: PhantomData<&'a ()>,
12}
13
14impl<'a> JEventCallbacks<'a> {
15 pub fn new() -> Self {
16 JEventCallbacks {
17 internal: jvmtiEventCallbacks {
18 VMInit: None,
19 VMDeath: None,
20 ThreadStart: None,
21 ThreadEnd: None,
22 ClassFileLoadHook: None,
23 ClassLoad: None,
24 ClassPrepare: None,
25 VMStart: None,
26 Exception: None,
27 ExceptionCatch: None,
28 SingleStep: None,
29 FramePop: None,
30 Breakpoint: None,
31 FieldAccess: None,
32 FieldModification: None,
33 MethodEntry: None,
34 MethodExit: None,
35 NativeMethodBind: None,
36 CompiledMethodLoad: None,
37 CompiledMethodUnload: None,
38 DynamicCodeGenerated: None,
39 DataDumpRequest: None,
40 reserved72: None,
41 MonitorWait: None,
42 MonitorWaited: None,
43 MonitorContendedEnter: None,
44 MonitorContendedEntered: None,
45 reserved77: None,
46 reserved78: None,
47 reserved79: None,
48 ResourceExhausted: None,
49 GarbageCollectionStart: None,
50 GarbageCollectionFinish: None,
51 ObjectFree: None,
52 VMObjectAlloc: None,
53 },
54 lifetime: PhantomData,
55 }
56 }
57
58 pub fn size_of_callbacks() -> jint {
59 size_of::<jvmtiEventCallbacks>() as jint
60 }
61
62 pub fn vm_init_enabled(&mut self) {
63 self.internal.VMInit = Some(jvmti_event_vm_init_handler)
64 }
65
66 pub fn vm_death_enabled(&mut self) {
67 self.internal.VMDeath = Some(jvmti_event_vm_death_handler)
68 }
69
70 pub fn thread_start_enabled(&mut self) {
71 self.internal.ThreadStart = Some(jvmti_event_thread_start_handler)
72 }
73
74 pub fn thread_end_enabled(&mut self) {
75 self.internal.ThreadEnd = Some(jvmti_event_thread_end_handler)
76 }
77
78 pub fn class_file_load_hook_enabled(&mut self) {
79 self.internal.ClassFileLoadHook = Some(jvmti_event_class_file_load_hook_handler)
80 }
81
82 pub fn class_load_enabled(&mut self) {
83 self.internal.ClassLoad = Some(jvmti_event_class_load_handler)
84 }
85
86 pub fn class_prepare_enabled(&mut self) {
87 self.internal.ClassPrepare = Some(jvmti_event_class_prepare_handler)
88 }
89
90 pub fn vm_start_enabled(&mut self) {
91 self.internal.VMStart = Some(jvmti_event_vm_start_handler)
92 }
93
94 pub fn exception_enabled(&mut self) {
95 self.internal.Exception = Some(jvmti_event_exception_handler)
96 }
97
98 pub fn exception_catch_enabled(&mut self) {
99 self.internal.ExceptionCatch = Some(jvmti_event_exception_catch_handler)
100 }
101
102 pub fn single_step_enabled(&mut self) {
103 self.internal.SingleStep = Some(jvmti_event_single_step_handler)
104 }
105
106 pub fn frame_pop_enabled(&mut self) {
107 self.internal.FramePop = Some(jvmti_event_frame_pop_handler)
108 }
109
110 pub fn breakpoint_enabled(&mut self) {
111 self.internal.Breakpoint = Some(jvmti_event_breakpoint_handler)
112 }
113
114 pub fn field_access_enabled(&mut self) {
115 self.internal.FieldAccess = Some(jvmti_event_field_access_handler)
116 }
117
118 pub fn field_modification_enabled(&mut self) {
119 self.internal.FieldModification = Some(jvmti_event_field_modification_handler)
120 }
121
122 pub fn method_entry_enabled(&mut self) {
123 self.internal.MethodEntry = Some(jvmti_event_method_entry_handler)
124 }
125
126 pub fn method_exit_enabled(&mut self) {
127 self.internal.MethodExit = Some(jvmti_event_method_exit_handler)
128 }
129
130 pub fn native_method_bind_enabled(&mut self) {
131 self.internal.NativeMethodBind = Some(jvmti_event_native_method_bind_handler)
132 }
133
134 pub fn compiled_method_load_enabled(&mut self) {
135 self.internal.CompiledMethodLoad = Some(jvmti_event_compiled_method_load_handler)
136 }
137
138 pub fn compiled_method_unload_enabled(&mut self) {
139 self.internal.CompiledMethodUnload = Some(jvmti_event_compiled_method_unload_handler)
140 }
141
142 pub fn dynamic_code_generated_enabled(&mut self) {
143 self.internal.DynamicCodeGenerated = Some(jvmti_event_dynamic_code_generated_handler)
144 }
145
146 pub fn data_dump_request_enabled(&mut self) {
147 self.internal.DataDumpRequest = Some(jvmti_event_data_dump_request_handler)
148 }
149
150 pub fn monitor_wait_enabled(&mut self) {
151 self.internal.MonitorWait = Some(jvmti_event_monitor_wait_handler)
152 }
153
154 pub fn monitor_waited_enabled(&mut self) {
155 self.internal.MonitorWaited = Some(jvmti_event_monitor_waited_handler)
156 }
157
158 pub fn monitor_contended_enter_enabled(&mut self) {
159 self.internal.MonitorContendedEnter = Some(jvmti_event_monitor_contended_enter_handler)
160 }
161
162 pub fn monitor_contended_entered_enabled(&mut self) {
163 self.internal.MonitorContendedEntered = Some(jvmti_event_monitor_contended_entered_handler)
164 }
165
166 pub fn resource_exhausted_enabled(&mut self) {
167 self.internal.ResourceExhausted = Some(jvmti_event_resource_exhausted_handler)
168 }
169
170 pub fn garbage_collection_start_enabled(&mut self) {
171 self.internal.GarbageCollectionStart = Some(jvmti_event_garbage_collection_start_handler)
172 }
173
174 pub fn garbage_collection_finish_enabled(&mut self) {
175 self.internal.GarbageCollectionFinish = Some(jvmti_event_garbage_collection_finish_handler)
176 }
177
178 pub fn object_free_enabled(&mut self) {
179 self.internal.ObjectFree = Some(jvmti_event_object_free_handler)
180 }
181
182 pub fn vm_object_alloc_enabled(&mut self) {
183 self.internal.VMObjectAlloc = Some(jvmti_event_vm_object_alloc_handler)
184 }
185}
186
187impl<'a> From<JEventCallbacks<'a>> for jvmtiEventCallbacks {
188 fn from(callbacks: JEventCallbacks<'a>) -> Self {
189 callbacks.internal
190 }
191}
192