factor/vm/sampling_profiler.hpp

43 lines
1.4 KiB
C++

namespace factor {
struct profiling_sample {
// Active thread during sample
cell thread;
// The callstack at safepoint time. Indexes to the beginning and ending
// word entries in the vm sample_callstacks array.
cell callstack_begin, callstack_end;
// Number of samples taken before the safepoint that recorded the sample
fixnum sample_count;
// Number of samples taken during GC
fixnum gc_sample_count;
// Number of samples taken during unoptimized compiler
fixnum jit_sample_count;
// Number of samples taken during foreign code execution
fixnum foreign_sample_count;
// Number of samples taken during code execution in non-Factor threads
fixnum foreign_thread_sample_count;
profiling_sample(fixnum sample_count, fixnum gc_sample_count,
fixnum jit_sample_count, fixnum foreign_sample_count,
fixnum foreign_thread_sample_count)
: thread(0),
callstack_begin(0),
callstack_end(0),
sample_count(sample_count),
gc_sample_count(gc_sample_count),
jit_sample_count(jit_sample_count),
foreign_sample_count(foreign_sample_count),
foreign_thread_sample_count(foreign_thread_sample_count) {}
profiling_sample record_counts() volatile;
void clear_counts() volatile;
bool empty() const {
return sample_count + gc_sample_count + jit_sample_count +
foreign_sample_count + foreign_thread_sample_count ==
0;
}
};
}