]> gitweb.factorcode.org Git - factor.git/blob - vm/gc.hpp
vm: clean up gc events, remove -verbosegc switch, fix compaction bug
[factor.git] / vm / gc.hpp
1 namespace factor
2 {
3
4 enum gc_op {
5         collect_nursery_op,
6         collect_aging_op,
7         collect_to_tenured_op,
8         collect_full_op,
9         collect_compact_op,
10         collect_growing_heap_op
11 };
12
13 struct gc_event {
14         gc_op op;
15         data_heap_room data_heap_before;
16         code_heap_room code_heap_before;
17         data_heap_room data_heap_after;
18         code_heap_room code_heap_after;
19         cell cards_scanned;
20         cell decks_scanned;
21         cell code_blocks_scanned;
22         u64 start_time;
23         cell total_time;
24         cell card_scan_time;
25         cell code_scan_time;
26         cell data_sweep_time;
27         cell code_sweep_time;
28         cell compaction_time;
29
30         explicit gc_event(gc_op op_, factor_vm *parent);
31         void started_card_scan();
32         void ended_card_scan(cell cards_scanned_, cell decks_scanned_);
33         void started_code_scan();
34         void ended_code_scan(cell code_blocks_scanned_);
35         void started_data_sweep();
36         void ended_data_sweep();
37         void started_code_sweep();
38         void ended_code_sweep();
39         void started_compaction();
40         void ended_compaction();
41         void ended_gc(factor_vm *parent);
42 };
43
44 struct gc_state {
45         gc_op op;
46         u64 start_time;
47         jmp_buf gc_unwind;
48         gc_event *event;
49
50         explicit gc_state(gc_op op_, factor_vm *parent);
51         ~gc_state();
52         void start_again(gc_op op_, factor_vm *parent);
53 };
54
55 VM_C_API void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *parent);
56
57 }