< prev index next >
src/share/vm/jfr/recorder/stacktrace/jfrStackTraceRepository.hpp
Print this page
rev 9055 : 8214542: JFR: Old Object Sample event slow on a deep heap in debug builds
Reviewed-by: egahlin, rwestberg
*** 34,46 ****
class JfrChunkWriter;
class Method;
class JfrStackFrame {
private:
! const Method* _method;
traceid _methodid;
! int _line;
int _bci;
u1 _type;
public:
enum {
--- 34,46 ----
class JfrChunkWriter;
class Method;
class JfrStackFrame {
private:
! mutable const Method* _method;
traceid _methodid;
! mutable int _line;
int _bci;
u1 _type;
public:
enum {
*** 56,66 ****
JfrStackFrame(const traceid& id, int bci, int type, int lineno) :
_method(NULL), _methodid(id), _line(lineno), _bci(bci), _type(type) {}
bool equals(const JfrStackFrame& rhs) const;
void write(JfrChunkWriter& cw) const;
void write(JfrCheckpointWriter& cpw) const;
! void resolve_lineno();
};
class JfrStackTrace : public StackObj {
friend class JfrStackTraceRepository;
private:
--- 56,66 ----
JfrStackFrame(const traceid& id, int bci, int type, int lineno) :
_method(NULL), _methodid(id), _line(lineno), _bci(bci), _type(type) {}
bool equals(const JfrStackFrame& rhs) const;
void write(JfrChunkWriter& cw) const;
void write(JfrCheckpointWriter& cpw) const;
! void resolve_lineno() const;
};
class JfrStackTrace : public StackObj {
friend class JfrStackTraceRepository;
private:
*** 68,78 ****
traceid _id;
u4 _nr_of_frames;
unsigned int _hash;
const u4 _max_frames;
bool _reached_root;
! bool _lineno;
public:
JfrStackTrace(JfrStackFrame* frames, u4 max_frames) : _frames(frames),
_id(0),
_nr_of_frames(0),
--- 68,78 ----
traceid _id;
u4 _nr_of_frames;
unsigned int _hash;
const u4 _max_frames;
bool _reached_root;
! mutable bool _lineno;
public:
JfrStackTrace(JfrStackFrame* frames, u4 max_frames) : _frames(frames),
_id(0),
_nr_of_frames(0),
*** 80,92 ****
_reached_root(false),
_max_frames(max_frames),
_lineno(false) {}
bool record_thread(JavaThread& thread, frame& frame);
bool record_safe(JavaThread* thread, int skip, bool leakp = false);
! void resolve_linenos();
void set_nr_of_frames(u4 nr_of_frames) { _nr_of_frames = nr_of_frames; }
void set_hash(unsigned int hash) { _hash = hash; }
void set_frame(u4 frame_pos, JfrStackFrame& frame);
void set_reached_root(bool reached_root) { _reached_root = reached_root; }
bool full_stacktrace() const { return _reached_root; }
bool have_lineno() const { return _lineno; }
};
--- 80,93 ----
_reached_root(false),
_max_frames(max_frames),
_lineno(false) {}
bool record_thread(JavaThread& thread, frame& frame);
bool record_safe(JavaThread* thread, int skip, bool leakp = false);
! void resolve_linenos() const;
void set_nr_of_frames(u4 nr_of_frames) { _nr_of_frames = nr_of_frames; }
void set_hash(unsigned int hash) { _hash = hash; }
+ unsigned int hash() const { return _hash; }
void set_frame(u4 frame_pos, JfrStackFrame& frame);
void set_reached_root(bool reached_root) { _reached_root = reached_root; }
bool full_stacktrace() const { return _reached_root; }
bool have_lineno() const { return _lineno; }
};
*** 126,152 ****
static const u4 TABLE_SIZE = 2053;
StackTrace* _table[TABLE_SIZE];
traceid _next_id;
u4 _entries;
- size_t write_impl(JfrChunkWriter& cw, bool clear);
- traceid record_for(JavaThread* thread, int skip, JfrStackFrame* frames, u4 max_frames);
- traceid record_for(JavaThread* thread, int skip, JfrStackFrame* frames, u4 max_frames, unsigned int* hash);
traceid add_trace(const JfrStackTrace& stacktrace);
! const StackTrace* resolve_entry(unsigned int hash, traceid id) const;
static void write_metadata(JfrCheckpointWriter& cpw);
JfrStackTraceRepository();
- static JfrStackTraceRepository& instance();
- public:
static JfrStackTraceRepository* create();
bool initialize();
static void destroy();
static traceid add(const JfrStackTrace& stacktrace);
static traceid record(Thread* thread, int skip = 0);
- static traceid record(Thread* thread, int skip, unsigned int* hash);
traceid write(JfrCheckpointWriter& cpw, traceid id, unsigned int hash);
size_t write(JfrChunkWriter& cw, bool clear);
size_t clear();
};
--- 127,156 ----
static const u4 TABLE_SIZE = 2053;
StackTrace* _table[TABLE_SIZE];
traceid _next_id;
u4 _entries;
traceid add_trace(const JfrStackTrace& stacktrace);
! static traceid add(const JfrStackTrace* stacktrace, JavaThread* thread);
! traceid record_for(JavaThread* thread, int skip, JfrStackFrame* frames, u4 max_frames);
+ size_t write_impl(JfrChunkWriter& cw, bool clear);
+ const StackTrace* resolve_entry(unsigned int hash, traceid id) const;
static void write_metadata(JfrCheckpointWriter& cpw);
+ static bool fill_stacktrace_for(JavaThread* thread, JfrStackTrace* stacktrace, int skip);
+
JfrStackTraceRepository();
static JfrStackTraceRepository* create();
bool initialize();
static void destroy();
+
+ static JfrStackTraceRepository& instance();
+
+ public:
static traceid add(const JfrStackTrace& stacktrace);
static traceid record(Thread* thread, int skip = 0);
traceid write(JfrCheckpointWriter& cpw, traceid id, unsigned int hash);
size_t write(JfrChunkWriter& cw, bool clear);
size_t clear();
};
< prev index next >