#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()) || \
} 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) { \
#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;
} 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
_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
#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);
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;
}
_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, ¶ms));
}
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, ¶ms));
}
}
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) {
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) {