diff --git a/src/base/base_entry_point.c b/src/base/base_entry_point.c index b79c10c9..37009653 100644 --- a/src/base/base_entry_point.c +++ b/src/base/base_entry_point.c @@ -19,7 +19,7 @@ main_thread_base_entry_point(int arguments_count, char **arguments) //- rjf: set up spall #if PROFILE_SPALL - spall_profile = spall_init_file("spall_capture", 1); + spall_profile = spall_init_file_ex("spall_capture", 1, 0); #endif //- rjf: parse command line diff --git a/src/base/base_profile.c b/src/base/base_profile.c index b04daee5..f23453ce 100644 --- a/src/base/base_profile.c +++ b/src/base/base_profile.c @@ -5,6 +5,13 @@ internal inline void spall_begin(char *fmt, ...) { + if(spall_buffer.data == 0) + { + spall_buffer.length = MB(1); + spall_buffer.data = os_reserve(spall_buffer.length); + os_commit(spall_buffer.data, spall_buffer.length); + spall_buffer_init(&spall_profile, &spall_buffer); + } if(spall_pid == 0) { spall_pid = os_get_process_info()->pid; diff --git a/src/base/base_profile.h b/src/base/base_profile.h index a0013659..bbaf9732 100644 --- a/src/base/base_profile.h +++ b/src/base/base_profile.h @@ -70,7 +70,7 @@ scratch_end(scratch); \ //~ rjf: Spall Profile Defines #if PROFILE_SPALL -global U64 spall_capturing = 1; +global U64 spall_capturing = 0; global SpallProfile spall_profile = {0}; thread_static SpallBuffer spall_buffer = {0}; thread_static U32 spall_tid = 0; @@ -79,10 +79,10 @@ internal inline void spall_begin(char *fmt, ...); # define ProfBegin(...) (spall_capturing ? (spall_begin(__VA_ARGS__), 0) : 0) # define ProfBeginDynamic(...) (spall_capturing ? (spall_begin(__VA_ARGS__), 0) : 0) # define ProfEnd(...) (spall_capturing ? (spall_buffer_end_ex(&spall_profile, &spall_buffer, os_now_microseconds(), spall_tid, spall_pid)), 0 : 0) -# define ProfTick(...) +# define ProfTick(...) # define ProfIsCapturing(...) (!!spall_capturing) # define ProfBeginCapture(...) (spall_capturing = 1) -# define ProfEndCapture(...) (spall_capturing = 0) +# define ProfEndCapture(...) (spall_capturing = 0, spall_flush(&spall_profile)) # define ProfThreadName(...) # define ProfMsg(...) # define ProfBeginLockWait(...) diff --git a/src/base/base_thread_context.c b/src/base/base_thread_context.c index 897b8f2f..7ae3a2c8 100644 --- a/src/base/base_thread_context.c +++ b/src/base/base_thread_context.c @@ -18,11 +18,6 @@ tctx_init_and_equip(TCTX *tctx) { *arena_ptr = arena_alloc(); } -#if PROFILE_SPALL - spall_buffer.length = MB(1); - spall_buffer.data = push_array_no_zero(tctx->arenas[0], U8, spall_buffer.length); - spall_buffer_init(&spall_profile, &spall_buffer); -#endif tctx_thread_local = tctx; }