< prev index next >

src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.cpp

Print this page

255   assert(trace->id() == id, "invariant");
256   trace->write(writer);
257   return id;
258 }
259 
260 JfrStackTraceRepository::StackTrace::StackTrace(traceid id, const JfrStackTrace& trace, JfrStackTraceRepository::StackTrace* next) :
261   _next(next),
262   _frames(NULL),
263   _id(id),
264   _nr_of_frames(trace._nr_of_frames),
265   _hash(trace._hash),
266   _reached_root(trace._reached_root),
267   _written(false) {
268   if (_nr_of_frames > 0) {
269     _frames = NEW_C_HEAP_ARRAY(JfrStackFrame, _nr_of_frames, mtTracing);
270     memcpy(_frames, trace._frames, _nr_of_frames * sizeof(JfrStackFrame));
271   }
272 }
273 
274 JfrStackTraceRepository::StackTrace::~StackTrace() {
275   if (_frames != NULL) {
276     FREE_C_HEAP_ARRAY(JfrStackFrame, _frames);
277   }
278 }
279 
280 bool JfrStackTraceRepository::StackTrace::equals(const JfrStackTrace& rhs) const {
281   if (_reached_root != rhs._reached_root || _nr_of_frames != rhs._nr_of_frames || _hash != rhs._hash) {
282     return false;
283   }
284   for (u4 i = 0; i < _nr_of_frames; ++i) {
285     if (!_frames[i].equals(rhs._frames[i])) {
286       return false;
287     }
288   }
289   return true;
290 }
291 
292 template <typename Writer>
293 static void write_stacktrace(Writer& w, traceid id, bool reached_root, u4 nr_of_frames, const JfrStackFrame* frames) {
294   w.write((u8)id);
295   w.write((u1)!reached_root);
296   w.write(nr_of_frames);
297   for (u4 i = 0; i < nr_of_frames; ++i) {

255   assert(trace->id() == id, "invariant");
256   trace->write(writer);
257   return id;
258 }
259 
260 JfrStackTraceRepository::StackTrace::StackTrace(traceid id, const JfrStackTrace& trace, JfrStackTraceRepository::StackTrace* next) :
261   _next(next),
262   _frames(NULL),
263   _id(id),
264   _nr_of_frames(trace._nr_of_frames),
265   _hash(trace._hash),
266   _reached_root(trace._reached_root),
267   _written(false) {
268   if (_nr_of_frames > 0) {
269     _frames = NEW_C_HEAP_ARRAY(JfrStackFrame, _nr_of_frames, mtTracing);
270     memcpy(_frames, trace._frames, _nr_of_frames * sizeof(JfrStackFrame));
271   }
272 }
273 
274 JfrStackTraceRepository::StackTrace::~StackTrace() {
275   FREE_C_HEAP_ARRAY(JfrStackFrame, _frames);


276 }
277 
278 bool JfrStackTraceRepository::StackTrace::equals(const JfrStackTrace& rhs) const {
279   if (_reached_root != rhs._reached_root || _nr_of_frames != rhs._nr_of_frames || _hash != rhs._hash) {
280     return false;
281   }
282   for (u4 i = 0; i < _nr_of_frames; ++i) {
283     if (!_frames[i].equals(rhs._frames[i])) {
284       return false;
285     }
286   }
287   return true;
288 }
289 
290 template <typename Writer>
291 static void write_stacktrace(Writer& w, traceid id, bool reached_root, u4 nr_of_frames, const JfrStackFrame* frames) {
292   w.write((u8)id);
293   w.write((u1)!reached_root);
294   w.write(nr_of_frames);
295   for (u4 i = 0; i < nr_of_frames; ++i) {
< prev index next >