1#ifndef JEMALLOC_INTERNAL_STATS_H
2#define JEMALLOC_INTERNAL_STATS_H
3
4/* OPTION(opt, var_name, default, set_value_to) */
5#define STATS_PRINT_OPTIONS \
6 OPTION('J', json, false, true) \
7 OPTION('g', general, true, false) \
8 OPTION('m', merged, config_stats, false) \
9 OPTION('d', destroyed, config_stats, false) \
10 OPTION('a', unmerged, config_stats, false) \
11 OPTION('b', bins, true, false) \
12 OPTION('l', large, true, false) \
13 OPTION('x', mutex, true, false) \
14 OPTION('e', extents, true, false) \
15 OPTION('h', hpa, config_stats, false)
16
17enum {
18#define OPTION(o, v, d, s) stats_print_option_num_##v,
19 STATS_PRINT_OPTIONS
20#undef OPTION
21 stats_print_tot_num_options
22};
23
24/* Options for stats_print. */
25extern bool opt_stats_print;
26extern char opt_stats_print_opts[stats_print_tot_num_options+1];
27
28/* Utilities for stats_interval. */
29extern int64_t opt_stats_interval;
30extern char opt_stats_interval_opts[stats_print_tot_num_options+1];
31
32#define STATS_INTERVAL_DEFAULT -1
33/*
34 * Batch-increment the counter to reduce synchronization overhead. Each thread
35 * merges after (interval >> LG_BATCH_SIZE) bytes of allocations; also limit the
36 * BATCH_MAX for accuracy when the interval is huge (which is expected).
37 */
38#define STATS_INTERVAL_ACCUM_LG_BATCH_SIZE 6
39#define STATS_INTERVAL_ACCUM_BATCH_MAX (4 << 20)
40
41/* Only accessed by thread event. */
42uint64_t stats_interval_new_event_wait(tsd_t *tsd);
43uint64_t stats_interval_postponed_event_wait(tsd_t *tsd);
44void stats_interval_event_handler(tsd_t *tsd, uint64_t elapsed);
45
46/* Implements je_malloc_stats_print. */
47void stats_print(write_cb_t *write_cb, void *cbopaque, const char *opts);
48
49bool stats_boot(void);
50void stats_prefork(tsdn_t *tsdn);
51void stats_postfork_parent(tsdn_t *tsdn);
52void stats_postfork_child(tsdn_t *tsdn);
53
54#endif /* JEMALLOC_INTERNAL_STATS_H */
55