@@ -233,16 +233,16 @@ enum jl_timing_counter_types {
233233
234234#ifdef USE_TIMING_COUNTS
235235#define _COUNTS_CTX_MEMBER jl_timing_counts_t counts_ctx;
236- #define _COUNTS_CTOR (block ) _jl_timing_counts_ctor(block)
237- #define _COUNTS_DESTROY (block , event , t ) _jl_timing_counts_destroy(block, event, t)
238236#define _COUNTS_START (block , t ) _jl_timing_counts_start(block, t)
239- #define _COUNTS_STOP (block , t ) _jl_timing_counts_stop(block, t)
237+ #define _COUNTS_STOP (block , event , t ) _jl_timing_counts_stop(block, event, t)
238+ #define _COUNTS_PAUSE (block , t ) _jl_timing_counts_pause(block, t)
239+ #define _COUNTS_RESUME (block , t ) _jl_timing_counts_resume(block, t)
240240#else
241241#define _COUNTS_CTX_MEMBER
242- #define _COUNTS_CTOR (block )
243- #define _COUNTS_DESTROY (block , event , t )
244242#define _COUNTS_START (block , t )
245- #define _COUNTS_STOP (block , t )
243+ #define _COUNTS_STOP (block , event , t )
244+ #define _COUNTS_PAUSE (block , t )
245+ #define _COUNTS_RESUME (block , t )
246246#endif
247247
248248/**
@@ -297,30 +297,37 @@ typedef struct _jl_timing_counts_t {
297297#endif
298298} jl_timing_counts_t ;
299299
300- STATIC_INLINE void _jl_timing_counts_stop (jl_timing_counts_t * block , uint64_t t ) JL_NOTSAFEPOINT {
300+ STATIC_INLINE void _jl_timing_counts_pause (jl_timing_counts_t * block , uint64_t t ) JL_NOTSAFEPOINT {
301301#ifdef JL_DEBUG_BUILD
302302 assert (block -> running );
303303 block -> running = 0 ;
304304#endif
305305 block -> total += t - block -> start ;
306306}
307307
308- STATIC_INLINE void _jl_timing_counts_start (jl_timing_counts_t * block , uint64_t t ) JL_NOTSAFEPOINT {
308+ STATIC_INLINE void _jl_timing_counts_resume (jl_timing_counts_t * block , uint64_t t ) JL_NOTSAFEPOINT {
309309#ifdef JL_DEBUG_BUILD
310310 assert (!block -> running );
311311 block -> running = 1 ;
312312#endif
313313 block -> start = t ;
314314}
315315
316- STATIC_INLINE void _jl_timing_counts_ctor (jl_timing_counts_t * block ) JL_NOTSAFEPOINT {
316+ STATIC_INLINE void _jl_timing_counts_start (jl_timing_counts_t * block , uint64_t t ) JL_NOTSAFEPOINT {
317317 block -> total = 0 ;
318+ block -> start = t ;
319+ block -> t0 = t ;
318320#ifdef JL_DEBUG_BUILD
319- block -> running = 0 ;
321+ block -> running = 1 ;
320322#endif
321323}
322324
323- STATIC_INLINE void _jl_timing_counts_destroy (jl_timing_counts_t * block , int event , uint64_t t ) JL_NOTSAFEPOINT {
325+ STATIC_INLINE void _jl_timing_counts_stop (jl_timing_counts_t * block , int event , uint64_t t ) JL_NOTSAFEPOINT {
326+ #ifdef JL_DEBUG_BUILD
327+ assert (block -> running );
328+ block -> running = 0 ;
329+ #endif
330+ block -> total += t - block -> start ;
324331 jl_atomic_fetch_add_relaxed (jl_timing_self_counts + event , block -> total );
325332 jl_atomic_fetch_add_relaxed (jl_timing_full_counts + event , t - block -> t0 );
326333}
@@ -353,17 +360,14 @@ STATIC_INLINE void jl_timing_block_start(jl_timing_block_t *block) {
353360
354361 uint64_t t = cycleclock (); (void )t ;
355362 _COUNTS_START (& block -> counts_ctx , t );
356- #ifdef USE_TIMING_COUNTS
357- block -> counts_ctx .t0 = t ;
358- #endif
359363 _ITTAPI_START (block );
360364 _TRACY_START (block );
361365
362366 jl_timing_block_t * * prevp = & jl_current_task -> ptls -> timing_stack ;
363367 block -> prev = * prevp ;
364368 block -> is_running = 1 ;
365369 if (block -> prev ) {
366- _COUNTS_STOP (& block -> prev -> counts_ctx , t );
370+ _COUNTS_PAUSE (& block -> prev -> counts_ctx , t );
367371 }
368372 * prevp = block ;
369373}
@@ -372,26 +376,23 @@ STATIC_INLINE void _jl_timing_block_ctor(jl_timing_block_t *block, int subsystem
372376 block -> subsystem = subsystem ;
373377 block -> event = event ;
374378 block -> is_running = 0 ;
375- _COUNTS_CTOR (& block -> counts_ctx );
376379}
377380
378381STATIC_INLINE void _jl_timing_block_destroy (jl_timing_block_t * block ) JL_NOTSAFEPOINT {
379382 if (block -> is_running ) {
380383 uint64_t t = cycleclock (); (void )t ;
381384 _ITTAPI_STOP (block );
382- _COUNTS_STOP (& block -> counts_ctx , t );
383385 _TRACY_STOP (block -> tracy_ctx );
386+ _COUNTS_STOP (& block -> counts_ctx , block -> event , cycleclock ());
384387
385388 jl_task_t * ct = jl_current_task ;
386389 jl_timing_block_t * * pcur = & ct -> ptls -> timing_stack ;
387390 assert (* pcur == block );
388391 * pcur = block -> prev ;
389392 if (block -> prev ) {
390- _COUNTS_START (& block -> prev -> counts_ctx , t );
393+ _COUNTS_RESUME (& block -> prev -> counts_ctx , t );
391394 }
392395 }
393-
394- _COUNTS_DESTROY (& block -> counts_ctx , block -> event , cycleclock ());
395396}
396397
397398typedef struct _jl_timing_suspend_t {
0 commit comments