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

Reply via email to