]> gitweb.factorcode.org Git - factor.git/blob - vm/sampling_profiler.hpp
VM: Refactor sampling_profiler.cpp/hpp to Factor style
[factor.git] / vm / sampling_profiler.hpp
1 namespace factor {
2
3 struct profiling_sample_count {
4   // Number of samples taken before the safepoint that recorded the sample
5   fixnum sample_count;
6   // Number of samples taken during GC
7   fixnum gc_sample_count;
8   // Number of samples taken during unoptimized compiler
9   fixnum jit_sample_count;
10   // Number of samples taken during foreign code execution
11   fixnum foreign_sample_count;
12   // Number of samples taken during code execution in non-Factor threads
13   fixnum foreign_thread_sample_count;
14
15   profiling_sample_count()
16       : sample_count(0),
17         gc_sample_count(0),
18         jit_sample_count(0),
19         foreign_sample_count(0),
20         foreign_thread_sample_count(0) {}
21
22   profiling_sample_count(fixnum sample_count, fixnum gc_sample_count,
23                          fixnum jit_sample_count, fixnum foreign_sample_count,
24                          fixnum foreign_thread_sample_count)
25       : sample_count(sample_count),
26         gc_sample_count(gc_sample_count),
27         jit_sample_count(jit_sample_count),
28         foreign_sample_count(foreign_sample_count),
29         foreign_thread_sample_count(foreign_thread_sample_count) {}
30
31   bool empty() const {
32     return sample_count + gc_sample_count + jit_sample_count +
33                foreign_sample_count + foreign_thread_sample_count ==
34            0;
35   }
36
37   profiling_sample_count record_counts() volatile;
38   void clear() volatile;
39 };
40
41 struct profiling_sample {
42   // Sample counts
43   profiling_sample_count counts;
44   // Active thread during sample
45   cell thread;
46   /* The callstack at safepoint time. Indexes to the beginning and ending
47      code_block entries in the vm sample_callstacks array. */
48   cell callstack_begin, callstack_end;
49
50   profiling_sample(factor_vm* vm, bool prolog_p,
51                    profiling_sample_count const& counts, cell thread);
52 };
53
54 }