Break down event init and handler functions

This commit is contained in:
Yinan Zhang 2020-04-16 10:00:46 -07:00
parent 6de77799de
commit 7324c4f85f

View File

@ -40,53 +40,16 @@ uint64_t event##_new_event_wait(tsd_t *tsd);
ITERATE_OVER_ALL_EVENTS ITERATE_OVER_ALL_EVENTS
#undef E #undef E
/* TSD event init function signatures. */
#define E(event, condition_unused, is_alloc_event_unused) \
static void te_tsd_##event##_event_init(tsd_t *tsd);
ITERATE_OVER_ALL_EVENTS
#undef E
/* Event handler function signatures. */ /* Event handler function signatures. */
#define E(event, condition_unused, is_alloc_event_unused) \ #define E(event, condition_unused, is_alloc_event_unused) \
static void te_##event##_event_handler(tsd_t *tsd); static void event##_event_handler(tsd_t *tsd);
ITERATE_OVER_ALL_EVENTS ITERATE_OVER_ALL_EVENTS
#undef E #undef E
/* (Re)Init functions. */
static void
te_tsd_tcache_gc_event_init(tsd_t *tsd) {
assert(TCACHE_GC_INCR_BYTES > 0);
uint64_t wait = tcache_gc_new_event_wait(tsd);
te_tcache_gc_event_update(tsd, wait);
}
static void
te_tsd_tcache_gc_dalloc_event_init(tsd_t *tsd) {
assert(TCACHE_GC_INCR_BYTES > 0);
uint64_t wait = tcache_gc_dalloc_new_event_wait(tsd);
te_tcache_gc_dalloc_event_update(tsd, wait);
}
static void
te_tsd_prof_sample_event_init(tsd_t *tsd) {
assert(config_prof && opt_prof);
uint64_t wait = prof_sample_new_event_wait(tsd);
te_prof_sample_event_update(tsd, wait);
}
static void
te_tsd_stats_interval_event_init(tsd_t *tsd) {
assert(opt_stats_interval >= 0);
uint64_t wait = stats_interval_new_event_wait(tsd);
te_stats_interval_event_update(tsd, wait);
}
/* Handler functions. */ /* Handler functions. */
static void static void
tcache_gc_event(tsd_t *tsd) { tcache_gc_event(tsd_t *tsd) {
assert(TCACHE_GC_INCR_BYTES > 0);
tcache_t *tcache = tcache_get(tsd); tcache_t *tcache = tcache_get(tsd);
if (tcache != NULL) { if (tcache != NULL) {
tcache_slow_t *tcache_slow = tsd_tcache_slowp_get(tsd); tcache_slow_t *tcache_slow = tsd_tcache_slowp_get(tsd);
@ -95,45 +58,35 @@ tcache_gc_event(tsd_t *tsd) {
} }
static void static void
te_tcache_gc_event_handler(tsd_t *tsd) { tcache_gc_event_handler(tsd_t *tsd) {
assert(tcache_gc_event_wait_get(tsd) == 0U);
te_tsd_tcache_gc_event_init(tsd);
tcache_gc_event(tsd); tcache_gc_event(tsd);
} }
static void static void
te_tcache_gc_dalloc_event_handler(tsd_t *tsd) { tcache_gc_dalloc_event_handler(tsd_t *tsd) {
assert(tcache_gc_dalloc_event_wait_get(tsd) == 0U);
te_tsd_tcache_gc_dalloc_event_init(tsd);
tcache_gc_event(tsd); tcache_gc_event(tsd);
} }
static void static void
te_prof_sample_event_handler(tsd_t *tsd) { prof_sample_event_handler(tsd_t *tsd) {
assert(config_prof && opt_prof);
assert(prof_sample_event_wait_get(tsd) == 0U);
uint64_t last_event = thread_allocated_last_event_get(tsd); uint64_t last_event = thread_allocated_last_event_get(tsd);
uint64_t last_sample_event = prof_sample_last_event_get(tsd); uint64_t last_sample_event = prof_sample_last_event_get(tsd);
prof_sample_last_event_set(tsd, last_event); prof_sample_last_event_set(tsd, last_event);
if (prof_idump_accum(tsd_tsdn(tsd), last_event - last_sample_event)) { if (prof_idump_accum(tsd_tsdn(tsd), last_event - last_sample_event)) {
prof_idump(tsd_tsdn(tsd)); prof_idump(tsd_tsdn(tsd));
} }
te_tsd_prof_sample_event_init(tsd);
} }
static void static void
te_stats_interval_event_handler(tsd_t *tsd) { stats_interval_event_handler(tsd_t *tsd) {
assert(opt_stats_interval >= 0);
assert(stats_interval_event_wait_get(tsd) == 0U);
uint64_t last_event = thread_allocated_last_event_get(tsd); uint64_t last_event = thread_allocated_last_event_get(tsd);
uint64_t last_stats_event = stats_interval_last_event_get(tsd); uint64_t last_stats_event = stats_interval_last_event_get(tsd);
stats_interval_last_event_set(tsd, last_event); stats_interval_last_event_set(tsd, last_event);
if (stats_interval_accum(tsd, last_event - last_stats_event)) { if (stats_interval_accum(tsd, last_event - last_stats_event)) {
je_malloc_stats_print(NULL, NULL, opt_stats_interval_opts); je_malloc_stats_print(NULL, NULL, opt_stats_interval_opts);
} }
te_tsd_stats_interval_event_init(tsd);
} }
/* Per event facilities done. */ /* Per event facilities done. */
static bool static bool
@ -352,7 +305,9 @@ te_event_trigger(tsd_t *tsd, te_ctx_t *ctx, bool delay_event) {
if (is_alloc == alloc_event && condition && \ if (is_alloc == alloc_event && condition && \
event##_event_wait_get(tsd) == 0U) { \ event##_event_wait_get(tsd) == 0U) { \
assert(allow_event_trigger); \ assert(allow_event_trigger); \
te_##event##_event_handler(tsd); \ uint64_t wait = event##_new_event_wait(tsd); \
te_##event##_event_update(tsd, wait); \
event##_event_handler(tsd); \
} }
ITERATE_OVER_ALL_EVENTS ITERATE_OVER_ALL_EVENTS
@ -384,7 +339,8 @@ void tsd_te_init(tsd_t *tsd) {
#define E(event, condition, is_alloc_event_unused) \ #define E(event, condition, is_alloc_event_unused) \
if (condition) { \ if (condition) { \
te_tsd_##event##_event_init(tsd); \ uint64_t wait = event##_new_event_wait(tsd); \
te_##event##_event_update(tsd, wait); \
} }
ITERATE_OVER_ALL_EVENTS ITERATE_OVER_ALL_EVENTS