Author: Tobias Weber <tobias_webe...@gmx.de> Branch: c8-adaptive-trx-length-per-thread Changeset: r2065:b74e3a67f424 Date: 2017-05-17 14:56 +0200 http://bitbucket.org/pypy/stmgc/changeset/b74e3a67f424/
Log: Add timing macros to hide internals from user code when generating custom payload events diff --git a/c8/stm/nursery.c b/c8/stm/nursery.c --- a/c8/stm/nursery.c +++ b/c8/stm/nursery.c @@ -52,17 +52,8 @@ static uintptr_t stm_get_transaction_length(stm_thread_local_t *tl) { double relative_additional_length = tl->relative_transaction_length; - if (timing_enabled()) { - struct timespec relative_length = { - .tv_sec = (int)relative_additional_length, - .tv_nsec = (int)(fmod(relative_additional_length, 1) * 1000000000), - }; - stm_duration_payload(relative_length); - stmcb_timing_event( - STM_SEGMENT->running_thread, - STM_SINGLE_THREAD_MODE_ADAPTIVE, - &stm_duration_payload); - } + publish_custom_value_event( + relative_additional_length, STM_SINGLE_THREAD_MODE_ADAPTIVE); uintptr_t result = (uintptr_t)(LARGE_FILL_MARK_NURSERY_BYTES * relative_additional_length); // printf("%020" PRIxPTR "\n", result); diff --git a/c8/stm/timing.h b/c8/stm/timing.h --- a/c8/stm/timing.h +++ b/c8/stm/timing.h @@ -29,20 +29,31 @@ #define stm_duration_payload(duration_data) \ stm_timing_event_payload_data_t stm_duration_data = \ - { .duration = &duration_data }; \ + { .duration = &(duration_data) }; \ stm_timing_event_payload_t stm_duration_payload = \ { STM_EVENT_PAYLOAD_DURATION, stm_duration_data }; #define publish_event(thread_local, event) \ (timing_enabled() ? \ - stmcb_timing_event(thread_local, event, &stm_duration_payload) : \ + stmcb_timing_event((thread_local), (event), &stm_duration_payload) :\ (void)0); #define stop_timer_and_publish_for_thread(thread_local, event) \ pause_timer() \ stm_duration_payload(duration) \ - assert(thread_local != NULL); \ - publish_event(thread_local, event) + assert((thread_local) != NULL); \ + publish_event((thread_local), (event)) #define stop_timer_and_publish(event) \ - stop_timer_and_publish_for_thread(STM_SEGMENT->running_thread, event) + stop_timer_and_publish_for_thread(STM_SEGMENT->running_thread, (event)) + +#define set_payload(double_value) \ + struct timespec payload_value = { \ + .tv_sec = (int)(double_value), \ + .tv_nsec = (int)(fmod((double_value), 1) * 1000000000), \ + }; + +#define publish_custom_value_event(double_value, event) \ + set_payload((double_value)) \ + stm_duration_payload(payload_value); \ + publish_event(STM_SEGMENT->running_thread, (event)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit