]> git.saurik.com Git - apple/libdispatch.git/blobdiff - src/trace.h
libdispatch-913.30.4.tar.gz
[apple/libdispatch.git] / src / trace.h
index c49689338fd1eaece71a519d6b9487e38afc95c0..c670f60b7944e1ee4593b29a4203d0f45c6a632b 100644 (file)
 
 #if DISPATCH_PURE_C
 
-#if DISPATCH_USE_DTRACE || DISPATCH_USE_DTRACE_INTROSPECTION
-typedef struct dispatch_trace_timer_params_s {
-       int64_t deadline, interval, leeway;
-} *dispatch_trace_timer_params_t;
-
-#include "provider.h"
-#endif // DISPATCH_USE_DTRACE || DISPATCH_USE_DTRACE_INTROSPECTION
-
 #if DISPATCH_USE_DTRACE_INTROSPECTION
 #define _dispatch_trace_callout(_c, _f, _dcc) do { \
                if (slowpath(DISPATCH_CALLOUT_ENTRY_ENABLED()) || \
@@ -108,7 +100,7 @@ _dispatch_trace_client_callout2(void *ctxt, size_t i, void (*f)(void *, size_t))
                } else { \
                        _dc = (void*)_do; \
                        _ctxt = _dc->dc_ctxt; \
-                       if (_dc->dc_flags & DISPATCH_OBJ_SYNC_SLOW_BIT) { \
+                       if (_dc->dc_flags & DISPATCH_OBJ_SYNC_WAITER_BIT) { \
                                _kind = "semaphore"; \
                                _func = (dispatch_function_t)dispatch_semaphore_signal; \
                        } else if (_dc->dc_flags & DISPATCH_OBJ_BLOCK_BIT) { \
@@ -131,8 +123,8 @@ _dispatch_trace_client_callout2(void *ctxt, size_t i, void (*f)(void *, size_t))
 #if DISPATCH_USE_DTRACE_INTROSPECTION || DISPATCH_INTROSPECTION
 DISPATCH_ALWAYS_INLINE
 static inline void
-_dispatch_trace_queue_push_list(dispatch_queue_t dq, dispatch_object_t _head,
-               dispatch_object_t _tail, pthread_priority_t pp, unsigned int n)
+_dispatch_trace_root_queue_push_list(dispatch_queue_t dq,
+               dispatch_object_t _head, dispatch_object_t _tail, int n)
 {
        if (slowpath(DISPATCH_QUEUE_PUSH_ENABLED())) {
                struct dispatch_object_s *dou = _head._do;
@@ -141,20 +133,20 @@ _dispatch_trace_queue_push_list(dispatch_queue_t dq, dispatch_object_t _head,
                } while (dou != _tail._do && (dou = dou->do_next));
        }
        _dispatch_introspection_queue_push_list(dq, _head, _tail);
-       _dispatch_queue_push_list(dq, _head, _tail, pp, n);
+       _dispatch_root_queue_push_inline(dq, _head, _tail, n);
 }
 
 DISPATCH_ALWAYS_INLINE
 static inline void
 _dispatch_trace_queue_push_inline(dispatch_queue_t dq, dispatch_object_t _tail,
-               pthread_priority_t pp, dispatch_wakeup_flags_t flags)
+               dispatch_qos_t qos)
 {
        if (slowpath(DISPATCH_QUEUE_PUSH_ENABLED())) {
                struct dispatch_object_s *dou = _tail._do;
                _dispatch_trace_continuation(dq, dou, DISPATCH_QUEUE_PUSH);
        }
        _dispatch_introspection_queue_push(dq, _tail);
-       _dispatch_queue_push_inline(dq, _tail, pp, flags);
+       _dispatch_queue_push_inline(dq, _tail, qos);
 }
 
 DISPATCH_ALWAYS_INLINE
@@ -168,7 +160,7 @@ _dispatch_trace_continuation_push(dispatch_queue_t dq, dispatch_object_t _tail)
        _dispatch_introspection_queue_push(dq, _tail);
 }
 
-#define _dispatch_queue_push_list _dispatch_trace_queue_push_list
+#define _dispatch_root_queue_push_inline _dispatch_trace_root_queue_push_list
 #define _dispatch_queue_push_inline _dispatch_trace_queue_push_inline
 
 DISPATCH_ALWAYS_INLINE
@@ -189,7 +181,7 @@ _dispatch_trace_continuation_pop(dispatch_queue_t dq, dispatch_object_t dou)
 
 #if DISPATCH_USE_DTRACE
 static inline dispatch_function_t
-_dispatch_trace_timer_function(dispatch_source_refs_t dr)
+_dispatch_trace_timer_function(dispatch_timer_source_refs_t dr)
 {
        dispatch_continuation_t dc;
        dc = os_atomic_load(&dr->ds_handler[DS_EVENT_HANDLER], relaxed);
@@ -216,8 +208,9 @@ _dispatch_trace_timer_params(dispatch_clock_t clock,
                params->deadline = _dispatch_trace_time2nano2(values->target,
                                values->target < now ? 0 : values->target - now);
        }
+       uint64_t leeway = values->deadline - values->target;
        params->interval = _dispatch_trace_time2nano(values->interval);
-       params->leeway = _dispatch_trace_time2nano(values->leeway);
+       params->leeway = _dispatch_trace_time2nano(leeway);
        return params;
 }
 
@@ -233,22 +226,23 @@ static inline void
 _dispatch_trace_timer_configure(dispatch_source_t ds, dispatch_clock_t clock,
                struct dispatch_timer_source_s *values)
 {
+       dispatch_timer_source_refs_t dr = ds->ds_timer_refs;
        struct dispatch_trace_timer_params_s params;
-       DISPATCH_TIMER_CONFIGURE(ds, _dispatch_trace_timer_function(ds->ds_refs),
+       DISPATCH_TIMER_CONFIGURE(ds, _dispatch_trace_timer_function(dr),
                        _dispatch_trace_timer_params(clock, values, 0, &params));
 }
 
 DISPATCH_ALWAYS_INLINE
 static inline void
-_dispatch_trace_timer_program(dispatch_source_refs_t dr, uint64_t deadline)
+_dispatch_trace_timer_program(dispatch_timer_source_refs_t dr, uint64_t deadline)
 {
        if (slowpath(DISPATCH_TIMER_PROGRAM_ENABLED())) {
                if (deadline && dr) {
                        dispatch_source_t ds = _dispatch_source_from_refs(dr);
-                       dispatch_clock_t clock = DISPATCH_TIMER_CLOCK(ds->ds_ident_hack);
+                       dispatch_clock_t clock = DISPATCH_TIMER_CLOCK(dr->du_ident);
                        struct dispatch_trace_timer_params_s params;
                        DISPATCH_TIMER_PROGRAM(ds, _dispatch_trace_timer_function(dr),
-                                       _dispatch_trace_timer_params(clock, &ds_timer(dr),
+                                       _dispatch_trace_timer_params(clock, &dr->dt_timer,
                                        deadline, &params));
                }
        }
@@ -256,7 +250,7 @@ _dispatch_trace_timer_program(dispatch_source_refs_t dr, uint64_t deadline)
 
 DISPATCH_ALWAYS_INLINE
 static inline void
-_dispatch_trace_timer_wake(dispatch_source_refs_t dr)
+_dispatch_trace_timer_wake(dispatch_timer_source_refs_t dr)
 {
        if (slowpath(DISPATCH_TIMER_WAKE_ENABLED())) {
                if (dr) {
@@ -268,8 +262,8 @@ _dispatch_trace_timer_wake(dispatch_source_refs_t dr)
 
 DISPATCH_ALWAYS_INLINE
 static inline void
-_dispatch_trace_timer_fire(dispatch_source_refs_t dr, unsigned long data,
-               unsigned long missed)
+_dispatch_trace_timer_fire(dispatch_timer_source_refs_t dr, uint64_t data,
+               uint64_t missed)
 {
        if (slowpath(DISPATCH_TIMER_FIRE_ENABLED())) {
                if (!(data - missed) && dr) {