Author: Tobias Weber <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit