comparison src/share/vm/prims/jvmtiImpl.hpp @ 10405:f2110083203d

8005849: JEP 167: Event-Based JVM Tracing Reviewed-by: acorn, coleenp, sla Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>
author sla
date Mon, 10 Jun 2013 11:30:51 +0200
parents 8b46b0196eb0
children 910026b800b8
comparison
equal deleted inserted replaced
10404:d0add7016434 10405:f2110083203d
202 }; 202 };
203 203
204 204
205 /////////////////////////////////////////////////////////////// 205 ///////////////////////////////////////////////////////////////
206 // 206 //
207 // class VM_ChangeBreakpoints
208 // Used by : JvmtiBreakpoints
209 // Used by JVMTI methods: none directly.
210 // Note: A Helper class.
211 //
212 // VM_ChangeBreakpoints implements a VM_Operation for ALL modifications to the JvmtiBreakpoints class.
213 //
214
215 class VM_ChangeBreakpoints : public VM_Operation {
216 private:
217 JvmtiBreakpoints* _breakpoints;
218 int _operation;
219 JvmtiBreakpoint* _bp;
220
221 public:
222 enum { SET_BREAKPOINT=0, CLEAR_BREAKPOINT=1, CLEAR_ALL_BREAKPOINT=2 };
223
224 VM_ChangeBreakpoints(JvmtiBreakpoints* breakpoints, int operation) {
225 _breakpoints = breakpoints;
226 _bp = NULL;
227 _operation = operation;
228 assert(breakpoints != NULL, "breakpoints != NULL");
229 assert(operation == CLEAR_ALL_BREAKPOINT, "unknown breakpoint operation");
230 }
231 VM_ChangeBreakpoints(JvmtiBreakpoints* breakpoints, int operation, JvmtiBreakpoint *bp) {
232 _breakpoints = breakpoints;
233 _bp = bp;
234 _operation = operation;
235 assert(breakpoints != NULL, "breakpoints != NULL");
236 assert(bp != NULL, "bp != NULL");
237 assert(operation == SET_BREAKPOINT || operation == CLEAR_BREAKPOINT , "unknown breakpoint operation");
238 }
239
240 VMOp_Type type() const { return VMOp_ChangeBreakpoints; }
241 void doit();
242 void oops_do(OopClosure* f);
243 };
244
245
246 ///////////////////////////////////////////////////////////////
247 //
248 // class JvmtiBreakpoints 207 // class JvmtiBreakpoints
249 // Used by : JvmtiCurrentBreakpoints 208 // Used by : JvmtiCurrentBreakpoints
250 // Used by JVMTI methods: none directly 209 // Used by JVMTI methods: none directly
251 // Note: A Helper class 210 // Note: A Helper class
252 // 211 //
269 // to insure they only occur at safepoints. 228 // to insure they only occur at safepoints.
270 // Todo: add checks for safepoint 229 // Todo: add checks for safepoint
271 friend class VM_ChangeBreakpoints; 230 friend class VM_ChangeBreakpoints;
272 void set_at_safepoint(JvmtiBreakpoint& bp); 231 void set_at_safepoint(JvmtiBreakpoint& bp);
273 void clear_at_safepoint(JvmtiBreakpoint& bp); 232 void clear_at_safepoint(JvmtiBreakpoint& bp);
274 void clearall_at_safepoint();
275 233
276 static void do_element(GrowableElement *e); 234 static void do_element(GrowableElement *e);
277 235
278 public: 236 public:
279 JvmtiBreakpoints(void listener_fun(void *, address *)); 237 JvmtiBreakpoints(void listener_fun(void *, address *));
284 void print(); 242 void print();
285 243
286 int set(JvmtiBreakpoint& bp); 244 int set(JvmtiBreakpoint& bp);
287 int clear(JvmtiBreakpoint& bp); 245 int clear(JvmtiBreakpoint& bp);
288 void clearall_in_class_at_safepoint(Klass* klass); 246 void clearall_in_class_at_safepoint(Klass* klass);
289 void clearall();
290 void gc_epilogue(); 247 void gc_epilogue();
291 }; 248 };
292 249
293 250
294 /////////////////////////////////////////////////////////////// 251 ///////////////////////////////////////////////////////////////
341 for ( ; (*bps) != NULL; bps++) { 298 for ( ; (*bps) != NULL; bps++) {
342 if ((*bps) == bcp) return true; 299 if ((*bps) == bcp) return true;
343 } 300 }
344 return false; 301 return false;
345 } 302 }
303
304
305 ///////////////////////////////////////////////////////////////
306 //
307 // class VM_ChangeBreakpoints
308 // Used by : JvmtiBreakpoints
309 // Used by JVMTI methods: none directly.
310 // Note: A Helper class.
311 //
312 // VM_ChangeBreakpoints implements a VM_Operation for ALL modifications to the JvmtiBreakpoints class.
313 //
314
315 class VM_ChangeBreakpoints : public VM_Operation {
316 private:
317 JvmtiBreakpoints* _breakpoints;
318 int _operation;
319 JvmtiBreakpoint* _bp;
320
321 public:
322 enum { SET_BREAKPOINT=0, CLEAR_BREAKPOINT=1 };
323
324 VM_ChangeBreakpoints(int operation, JvmtiBreakpoint *bp) {
325 JvmtiBreakpoints& current_bps = JvmtiCurrentBreakpoints::get_jvmti_breakpoints();
326 _breakpoints = &current_bps;
327 _bp = bp;
328 _operation = operation;
329 assert(bp != NULL, "bp != NULL");
330 }
331
332 VMOp_Type type() const { return VMOp_ChangeBreakpoints; }
333 void doit();
334 void oops_do(OopClosure* f);
335 };
336
346 337
347 /////////////////////////////////////////////////////////////// 338 ///////////////////////////////////////////////////////////////
348 // The get/set local operations must only be done by the VM thread 339 // The get/set local operations must only be done by the VM thread
349 // because the interpreter version needs to access oop maps, which can 340 // because the interpreter version needs to access oop maps, which can
350 // only safely be done by the VM thread 341 // only safely be done by the VM thread