xref: /illumos-gate/usr/src/tools/smatch/src/stats.c (revision 55fea89dcaa64928bed4327112404dcb3e07b79f)
1 #include <stdio.h>
2 #include "allocate.h"
3 #include "linearize.h"
4 #include "storage.h"
5 
6 __DECLARE_ALLOCATOR(struct ptr_list, ptrlist);
7 
8 
9 typedef void (*get_t)(struct allocator_stats*);
10 
11 static void show_stats(get_t get, struct allocator_stats * tot)
12 {
13 	struct allocator_stats x;
14 
15 	if (get)
16 		get(&x);
17 	else
18 		x = *tot;
19 	fprintf(stderr, "%16s: %8d, %10ld, %10ld, %6.2f%%, %8.2f\n",
20 		x.name, x.allocations, x.useful_bytes, x.total_bytes,
21 		100 * (double) x.useful_bytes / (x.total_bytes ? : 1),
22 		(double) x.useful_bytes / (x.allocations ? : 1));
23 
24 	tot->allocations += x.allocations;
25 	tot->useful_bytes += x.useful_bytes;
26 	tot->total_bytes += x.total_bytes;
27 }
28 
29 void show_allocation_stats(void)
30 {
31 	struct allocator_stats tot = { .name = "total", };
32 
33 	fprintf(stderr, "%16s: %8s, %10s, %10s, %7s, %8s\n", "allocator", "allocs",
34 		"bytes", "total", "%usage", "average");
35 	show_stats(get_token_stats, &tot);
36 	show_stats(get_ident_stats, &tot);
37 	show_stats(get_symbol_stats, &tot);
38 	show_stats(get_expression_stats, &tot);
39 	show_stats(get_statement_stats, &tot);
40 	show_stats(get_scope_stats, &tot);
41 	show_stats(get_basic_block_stats, &tot);
42 	show_stats(get_instruction_stats, &tot);
43 	show_stats(get_pseudo_stats, &tot);
44 	show_stats(get_pseudo_user_stats, &tot);
45 	show_stats(get_ptrlist_stats, &tot);
46 	show_stats(get_multijmp_stats, &tot);
47 	show_stats(get_asm_rules_stats, &tot);
48 	show_stats(get_asm_constraint_stats, &tot);
49 	show_stats(get_context_stats, &tot);
50 	show_stats(get_string_stats, &tot);
51 	show_stats(get_bytes_stats, &tot);
52 	//show_stats(get_storage_stats, &tot);
53 	//show_stats(get_storage_hash_stats, &tot);
54 
55 	show_stats(NULL, &tot);
56 }
57 
58 void report_stats(void)
59 {
60 	if (fmem_report)
61 		show_allocation_stats();
62 }
63