diff --git a/libs/tracy/bindings.odin b/libs/tracy/bindings.odin index a7bf7b6..d412634 100644 --- a/libs/tracy/bindings.odin +++ b/libs/tracy/bindings.odin @@ -2,16 +2,15 @@ package tracy import "core:c" -when ODIN_OS == .Darwin do foreign import tracy "tracy.dylib" +when ODIN_OS == .Darwin do foreign import tracy "tracy.dylib" when ODIN_OS == .Windows do foreign import tracy "tracy.lib" -when ODIN_OS == .Linux do foreign import tracy "tracy.so" +when ODIN_OS == .Linux do foreign import tracy "tracy.so" -TracyPlotFormatEnum :: enum i32 -{ +TracyPlotFormatEnum :: enum i32 { TracyPlotFormatNumber, TracyPlotFormatMemory, TracyPlotFormatPercentage, - TracyPlotFormatWatt + TracyPlotFormatWatt, } ___tracy_source_location_data :: struct { @@ -66,107 +65,107 @@ ___tracy_gpu_context_name_data :: struct { } ___tracy_gpu_calibration_data :: struct { - gpuTime: i64, - cpuDelta: i64, - _context: u8, // NOTE(oskar): `context` is a reserved identifier in Odin. + gpuTime: i64, + cpuDelta: i64, + _context: u8, // NOTE(oskar): `context` is a reserved identifier in Odin. } ___tracy_gpu_time_sync_data :: struct { gpuTime: i64, _context: u8, // NOTE(oskar): `context` is a reserved identifier in Odin. -}; +} __tracy_lockable_context_data :: struct {} // NOTE(oskar): opaque when #config(TRACY_MANUAL_LIFETIME, false) { - @(default_calling_convention="c") + @(default_calling_convention = "c") foreign tracy { - ___tracy_startup_profiler :: proc() --- + ___tracy_startup_profiler :: proc() --- ___tracy_shutdown_profiler :: proc() --- - ___tracy_profiler_started :: proc() -> b32 --- + ___tracy_profiler_started :: proc() -> b32 --- } } -@(default_calling_convention="c") +@(default_calling_convention = "c") foreign tracy { - ___tracy_set_thread_name :: proc( name: cstring ) --- + ___tracy_set_thread_name :: proc(name: cstring) --- - ___tracy_alloc_srcloc :: proc( line: u32, source: cstring, sourceSz: c.size_t, function: cstring, functionSz: c.size_t, color: u32 = 0 ) -> u64 --- - ___tracy_alloc_srcloc_name :: proc( line: u32, source: cstring, sourceSz: c.size_t, function: cstring, functionSz: c.size_t, name: cstring, nameSz: c.size_t, color: u32 = 0 ) -> u64 --- + ___tracy_alloc_srcloc :: proc(line: u32, source: cstring, sourceSz: c.size_t, function: cstring, functionSz: c.size_t, color: u32 = 0) -> u64 --- + ___tracy_alloc_srcloc_name :: proc(line: u32, source: cstring, sourceSz: c.size_t, function: cstring, functionSz: c.size_t, name: cstring, nameSz: c.size_t, color: u32 = 0) -> u64 --- - ___tracy_emit_zone_begin :: proc( srcloc: ^___tracy_source_location_data, active: b32 ) -> ___tracy_c_zone_context --- - ___tracy_emit_zone_begin_callstack :: proc( srcloc: ^___tracy_source_location_data, depth: i32, active: b32 ) -> ___tracy_c_zone_context --- - ___tracy_emit_zone_begin_alloc :: proc( srcloc: u64, active: b32 ) -> ___tracy_c_zone_context --- - ___tracy_emit_zone_begin_alloc_callstack :: proc( srcloc: u64, depth: i32, active: b32 ) -> ___tracy_c_zone_context --- - ___tracy_emit_zone_end :: proc( ctx: ___tracy_c_zone_context ) --- - ___tracy_emit_zone_text :: proc( ctx: ___tracy_c_zone_context, txt: cstring, size: c.size_t ) --- - ___tracy_emit_zone_name :: proc( ctx: ___tracy_c_zone_context, txt: cstring, size: c.size_t ) --- - ___tracy_emit_zone_color :: proc( ctx: ___tracy_c_zone_context, color: u32 ) --- - ___tracy_emit_zone_value :: proc( ctx: ___tracy_c_zone_context, value: u64 ) --- + ___tracy_emit_zone_begin :: proc(srcloc: ^___tracy_source_location_data, active: b32) -> ___tracy_c_zone_context --- + ___tracy_emit_zone_begin_callstack :: proc(srcloc: ^___tracy_source_location_data, depth: i32, active: b32) -> ___tracy_c_zone_context --- + ___tracy_emit_zone_begin_alloc :: proc(srcloc: u64, active: b32) -> ___tracy_c_zone_context --- + ___tracy_emit_zone_begin_alloc_callstack :: proc(srcloc: u64, depth: i32, active: b32) -> ___tracy_c_zone_context --- + ___tracy_emit_zone_end :: proc(ctx: ___tracy_c_zone_context) --- + ___tracy_emit_zone_text :: proc(ctx: ___tracy_c_zone_context, txt: cstring, size: c.size_t) --- + ___tracy_emit_zone_name :: proc(ctx: ___tracy_c_zone_context, txt: cstring, size: c.size_t) --- + ___tracy_emit_zone_color :: proc(ctx: ___tracy_c_zone_context, color: u32) --- + ___tracy_emit_zone_value :: proc(ctx: ___tracy_c_zone_context, value: u64) --- - ___tracy_emit_gpu_zone_begin :: proc( ___tracy_gpu_zone_begin_data ) --- - ___tracy_emit_gpu_zone_begin_callstack :: proc( ___tracy_gpu_zone_begin_callstack_data ) --- - ___tracy_emit_gpu_zone_begin_alloc :: proc( ___tracy_gpu_zone_begin_data ) --- - ___tracy_emit_gpu_zone_begin_alloc_callstack :: proc( ___tracy_gpu_zone_begin_callstack_data ) --- - ___tracy_emit_gpu_zone_end :: proc( ___tracy_gpu_zone_end_data ) --- - ___tracy_emit_gpu_time :: proc( ___tracy_gpu_time_data ) --- - ___tracy_emit_gpu_new_context :: proc( ___tracy_gpu_new_context_data ) --- - ___tracy_emit_gpu_context_name :: proc( ___tracy_gpu_context_name_data ) --- - ___tracy_emit_gpu_calibration :: proc( ___tracy_gpu_calibration_data ) --- - ___tracy_emit_gpu_time_sync :: proc( ___tracy_gpu_time_sync_data ) --- + ___tracy_emit_gpu_zone_begin :: proc(_: ___tracy_gpu_zone_begin_data) --- + ___tracy_emit_gpu_zone_begin_callstack :: proc(_: ___tracy_gpu_zone_begin_callstack_data) --- + ___tracy_emit_gpu_zone_begin_alloc :: proc(_: ___tracy_gpu_zone_begin_data) --- + ___tracy_emit_gpu_zone_begin_alloc_callstack :: proc(_: ___tracy_gpu_zone_begin_callstack_data) --- + ___tracy_emit_gpu_zone_end :: proc(_: ___tracy_gpu_zone_end_data) --- + ___tracy_emit_gpu_time :: proc(_: ___tracy_gpu_time_data) --- + ___tracy_emit_gpu_new_context :: proc(_: ___tracy_gpu_new_context_data) --- + ___tracy_emit_gpu_context_name :: proc(_: ___tracy_gpu_context_name_data) --- + ___tracy_emit_gpu_calibration :: proc(_: ___tracy_gpu_calibration_data) --- + ___tracy_emit_gpu_time_sync :: proc(_: ___tracy_gpu_time_sync_data) --- - ___tracy_emit_gpu_zone_begin_serial :: proc( ___tracy_gpu_zone_begin_data ) --- - ___tracy_emit_gpu_zone_begin_callstack_serial :: proc( ___tracy_gpu_zone_begin_callstack_data ) --- - ___tracy_emit_gpu_zone_begin_alloc_serial :: proc( ___tracy_gpu_zone_begin_data ) --- - ___tracy_emit_gpu_zone_begin_alloc_callstack_serial :: proc( ___tracy_gpu_zone_begin_callstack_data ) --- - ___tracy_emit_gpu_zone_end_serial :: proc( ___tracy_gpu_zone_end_data ) --- - ___tracy_emit_gpu_time_serial :: proc( ___tracy_gpu_time_data ) --- - ___tracy_emit_gpu_new_context_serial :: proc( ___tracy_gpu_new_context_data ) --- - ___tracy_emit_gpu_context_name_serial :: proc( ___tracy_gpu_context_name_data ) --- - ___tracy_emit_gpu_calibration_serial :: proc( ___tracy_gpu_calibration_data ) --- - ___tracy_emit_gpu_time_sync_serial :: proc( ___tracy_gpu_time_sync_data ) --- + ___tracy_emit_gpu_zone_begin_serial :: proc(_: ___tracy_gpu_zone_begin_data) --- + ___tracy_emit_gpu_zone_begin_callstack_serial :: proc(_: ___tracy_gpu_zone_begin_callstack_data) --- + ___tracy_emit_gpu_zone_begin_alloc_serial :: proc(_: ___tracy_gpu_zone_begin_data) --- + ___tracy_emit_gpu_zone_begin_alloc_callstack_serial :: proc(_: ___tracy_gpu_zone_begin_callstack_data) --- + ___tracy_emit_gpu_zone_end_serial :: proc(_: ___tracy_gpu_zone_end_data) --- + ___tracy_emit_gpu_time_serial :: proc(_: ___tracy_gpu_time_data) --- + ___tracy_emit_gpu_new_context_serial :: proc(_: ___tracy_gpu_new_context_data) --- + ___tracy_emit_gpu_context_name_serial :: proc(_: ___tracy_gpu_context_name_data) --- + ___tracy_emit_gpu_calibration_serial :: proc(_: ___tracy_gpu_calibration_data) --- + ___tracy_emit_gpu_time_sync_serial :: proc(_: ___tracy_gpu_time_sync_data) --- - ___tracy_connected :: proc() -> b32 --- + ___tracy_connected :: proc() -> b32 --- - ___tracy_emit_memory_alloc :: proc( ptr: rawptr, size: c.size_t, secure: b32 ) --- - ___tracy_emit_memory_alloc_callstack :: proc( ptr: rawptr, size: c.size_t, depth: i32, secure: b32 ) --- - ___tracy_emit_memory_free :: proc( ptr: rawptr, secure: b32 ) --- - ___tracy_emit_memory_free_callstack :: proc( ptr: rawptr, depth: i32, secure: b32 ) --- - ___tracy_emit_memory_alloc_named :: proc( ptr: rawptr, size: c.size_t, secure: b32, name: cstring ) --- - ___tracy_emit_memory_alloc_callstack_named :: proc( ptr: rawptr, size: c.size_t, depth: i32, secure: b32, name: cstring ) --- - ___tracy_emit_memory_free_named :: proc( ptr: rawptr, secure: b32, name: cstring ) --- - ___tracy_emit_memory_free_callstack_named :: proc( ptr: rawptr, depth: i32, secure: b32, name: cstring ) --- + ___tracy_emit_memory_alloc :: proc(ptr: rawptr, size: c.size_t, secure: b32) --- + ___tracy_emit_memory_alloc_callstack :: proc(ptr: rawptr, size: c.size_t, depth: i32, secure: b32) --- + ___tracy_emit_memory_free :: proc(ptr: rawptr, secure: b32) --- + ___tracy_emit_memory_free_callstack :: proc(ptr: rawptr, depth: i32, secure: b32) --- + ___tracy_emit_memory_alloc_named :: proc(ptr: rawptr, size: c.size_t, secure: b32, name: cstring) --- + ___tracy_emit_memory_alloc_callstack_named :: proc(ptr: rawptr, size: c.size_t, depth: i32, secure: b32, name: cstring) --- + ___tracy_emit_memory_free_named :: proc(ptr: rawptr, secure: b32, name: cstring) --- + ___tracy_emit_memory_free_callstack_named :: proc(ptr: rawptr, depth: i32, secure: b32, name: cstring) --- - ___tracy_emit_message :: proc( txt: cstring, size: c.size_t, callstack: i32 ) --- - ___tracy_emit_messageL :: proc( txt: cstring, callstack: i32 ) --- - ___tracy_emit_messageC :: proc( txt: cstring, size: c.size_t, color: u32, callstack: i32 ) --- - ___tracy_emit_messageLC :: proc( txt: cstring, color: u32, callstack: i32 ) --- + ___tracy_emit_message :: proc(txt: cstring, size: c.size_t, callstack: i32) --- + ___tracy_emit_messageL :: proc(txt: cstring, callstack: i32) --- + ___tracy_emit_messageC :: proc(txt: cstring, size: c.size_t, color: u32, callstack: i32) --- + ___tracy_emit_messageLC :: proc(txt: cstring, color: u32, callstack: i32) --- - ___tracy_emit_frame_mark :: proc( name: cstring ) --- - ___tracy_emit_frame_mark_start :: proc( name: cstring ) --- - ___tracy_emit_frame_mark_end :: proc( name: cstring ) --- - ___tracy_emit_frame_image :: proc( image: rawptr, w, h: u16, offset: u8, flip: b32 ) --- + ___tracy_emit_frame_mark :: proc(name: cstring) --- + ___tracy_emit_frame_mark_start :: proc(name: cstring) --- + ___tracy_emit_frame_mark_end :: proc(name: cstring) --- + ___tracy_emit_frame_image :: proc(image: rawptr, w, h: u16, offset: u8, flip: b32) --- - ___tracy_emit_plot :: proc( name: cstring, val: f64 ) --- - ___tracy_emit_plot_float :: proc( name: cstring, val: f32 ) --- - ___tracy_emit_plot_int :: proc( name: cstring, val: i64 ) --- - ___tracy_emit_plot_config :: proc( name: cstring, type: TracyPlotFormatEnum, step, fill: b32, color: u32 ) --- - ___tracy_emit_message_appinfo :: proc( txt: cstring, size: c.size_t ) --- + ___tracy_emit_plot :: proc(name: cstring, val: f64) --- + ___tracy_emit_plot_float :: proc(name: cstring, val: f32) --- + ___tracy_emit_plot_int :: proc(name: cstring, val: i64) --- + ___tracy_emit_plot_config :: proc(name: cstring, type: TracyPlotFormatEnum, step, fill: b32, color: u32) --- + ___tracy_emit_message_appinfo :: proc(txt: cstring, size: c.size_t) --- - ___tracy_announce_lockable_ctx :: proc( srcloc: ^___tracy_source_location_data ) -> ^__tracy_lockable_context_data --- - ___tracy_terminate_lockable_ctx :: proc( lockdata: ^__tracy_lockable_context_data ) --- - ___tracy_before_lock_lockable_ctx :: proc( lockdata: ^__tracy_lockable_context_data ) -> b32 --- - ___tracy_after_lock_lockable_ctx :: proc( lockdata: ^__tracy_lockable_context_data ) --- - ___tracy_after_unlock_lockable_ctx :: proc( lockdata: ^__tracy_lockable_context_data ) --- - ___tracy_after_try_lock_lockable_ctx :: proc( lockdata: ^__tracy_lockable_context_data, acquired: b32 ) --- - ___tracy_mark_lockable_ctx :: proc( lockdata: ^__tracy_lockable_context_data, srcloc: ^___tracy_source_location_data ) --- - ___tracy_custom_name_lockable_ctx :: proc( lockdata: ^__tracy_lockable_context_data, name: cstring, nameSz: c.size_t ) --- + ___tracy_announce_lockable_ctx :: proc(srcloc: ^___tracy_source_location_data) -> ^__tracy_lockable_context_data --- + ___tracy_terminate_lockable_ctx :: proc(lockdata: ^__tracy_lockable_context_data) --- + ___tracy_before_lock_lockable_ctx :: proc(lockdata: ^__tracy_lockable_context_data) -> b32 --- + ___tracy_after_lock_lockable_ctx :: proc(lockdata: ^__tracy_lockable_context_data) --- + ___tracy_after_unlock_lockable_ctx :: proc(lockdata: ^__tracy_lockable_context_data) --- + ___tracy_after_try_lock_lockable_ctx :: proc(lockdata: ^__tracy_lockable_context_data, acquired: b32) --- + ___tracy_mark_lockable_ctx :: proc(lockdata: ^__tracy_lockable_context_data, srcloc: ^___tracy_source_location_data) --- + ___tracy_custom_name_lockable_ctx :: proc(lockdata: ^__tracy_lockable_context_data, name: cstring, nameSz: c.size_t) --- } when #config(TRACY_FIBERS, false) { - @(default_calling_convention="c") - foreign tracy { - ___tracy_fiber_enter :: proc( fiber: cstring ) --- - ___tracy_fiber_leave :: proc() --- - } + @(default_calling_convention = "c") + foreign tracy { + ___tracy_fiber_enter :: proc(fiber: cstring) --- + ___tracy_fiber_leave :: proc() --- + } } diff --git a/libs/tracy/wrapper.odin b/libs/tracy/wrapper.odin index 467f58b..1f9bbbc 100644 --- a/libs/tracy/wrapper.odin +++ b/libs/tracy/wrapper.odin @@ -1,36 +1,80 @@ package tracy import "core:c" -import "core:strings" -TRACY_ENABLE :: #config(TRACY_ENABLE, false) -TRACY_CALLSTACK :: #config(TRACY_CALLSTACK, 5) +TRACY_ENABLE :: #config(TRACY_ENABLE, false) +TRACY_CALLSTACK :: #config(TRACY_CALLSTACK, 5) TRACY_HAS_CALLSTACK :: #config(TRACY_HAS_CALLSTACK, true) -TRACY_FIBERS :: #config(TRACY_FIBERS, false) +TRACY_FIBERS :: #config(TRACY_FIBERS, false) SourceLocationData :: ___tracy_source_location_data -ZoneCtx :: ___tracy_c_zone_context -LockCtx :: ^__tracy_lockable_context_data +ZoneCtx :: ___tracy_c_zone_context +LockCtx :: ^__tracy_lockable_context_data // Zone markup // NOTE: These automatically calls ZoneEnd() at end of scope. -@(deferred_out=ZoneEnd) Zone :: #force_inline proc(active := true, depth: i32 = TRACY_CALLSTACK, loc := #caller_location) -> (ctx: ZoneCtx) { when TRACY_ENABLE { ctx = ZoneBegin(active, depth, loc) } return } -@(deferred_out=ZoneEnd) ZoneN :: #force_inline proc(name: string, active := true, depth: i32 = TRACY_CALLSTACK, loc := #caller_location) -> (ctx: ZoneCtx) { when TRACY_ENABLE { ctx = ZoneBegin(active, depth, loc); ZoneName(ctx, name) } return } -@(deferred_out=ZoneEnd) ZoneC :: #force_inline proc(color: u32, active := true, depth: i32 = TRACY_CALLSTACK, loc := #caller_location) -> (ctx: ZoneCtx) { when TRACY_ENABLE { ctx = ZoneBegin(active, depth, loc); ZoneColor(ctx, color) } return } -@(deferred_out=ZoneEnd) ZoneNC :: #force_inline proc(name: string, color: u32, active := true, depth: i32 = TRACY_CALLSTACK, loc := #caller_location) -> (ctx: ZoneCtx) { when TRACY_ENABLE { ctx = ZoneBegin(active, depth, loc); ZoneName(ctx, name); ZoneColor(ctx, color) } return } +@(deferred_out = ZoneEnd) +Zone :: #force_inline proc( + active := true, + depth: i32 = TRACY_CALLSTACK, + loc := #caller_location, +) -> ( + ctx: ZoneCtx, +) {when TRACY_ENABLE {ctx = ZoneBegin(active, depth, loc)};return} +@(deferred_out = ZoneEnd) +ZoneN :: #force_inline proc( + name: string, + active := true, + depth: i32 = TRACY_CALLSTACK, + loc := #caller_location, +) -> ( + ctx: ZoneCtx, +) {when TRACY_ENABLE {ctx = ZoneBegin(active, depth, loc);ZoneName(ctx, name)};return} +@(deferred_out = ZoneEnd) +ZoneC :: #force_inline proc( + color: u32, + active := true, + depth: i32 = TRACY_CALLSTACK, + loc := #caller_location, +) -> ( + ctx: ZoneCtx, +) {when TRACY_ENABLE {ctx = ZoneBegin(active, depth, loc);ZoneColor(ctx, color)};return} +@(deferred_out = ZoneEnd) +ZoneNC :: #force_inline proc( + name: string, + color: u32, + active := true, + depth: i32 = TRACY_CALLSTACK, + loc := #caller_location, +) -> ( + ctx: ZoneCtx, +) {when TRACY_ENABLE {ctx = ZoneBegin(active, depth, loc) + ZoneName(ctx, name) + ZoneColor(ctx, color)} + return} // Dummy aliases to match C API (only difference is the `depth` parameter, // which we declare as optional for the non-S procs.) -ZoneS :: Zone -ZoneNS :: ZoneN -ZoneCS :: ZoneC +ZoneS :: Zone +ZoneNS :: ZoneN +ZoneCS :: ZoneC ZoneNCS :: ZoneNC -@(disabled=!TRACY_ENABLE) ZoneText :: #force_inline proc(ctx: ZoneCtx, text: string) { ___tracy_emit_zone_text(ctx, _sl(text)) } -@(disabled=!TRACY_ENABLE) ZoneName :: #force_inline proc(ctx: ZoneCtx, name: string) { ___tracy_emit_zone_name(ctx, _sl(name)) } -@(disabled=!TRACY_ENABLE) ZoneColor :: #force_inline proc(ctx: ZoneCtx, color: u32) { ___tracy_emit_zone_color(ctx, color) } -@(disabled=!TRACY_ENABLE) ZoneValue :: #force_inline proc(ctx: ZoneCtx, value: u64) { ___tracy_emit_zone_value(ctx, value) } +@(disabled = !TRACY_ENABLE) +ZoneText :: #force_inline proc(ctx: ZoneCtx, text: string) {___tracy_emit_zone_text( + ctx, + _sl(text), + )} +@(disabled = !TRACY_ENABLE) +ZoneName :: #force_inline proc(ctx: ZoneCtx, name: string) {___tracy_emit_zone_name( + ctx, + _sl(name), + )} +@(disabled = !TRACY_ENABLE) +ZoneColor :: #force_inline proc(ctx: ZoneCtx, color: u32) {___tracy_emit_zone_color(ctx, color)} +@(disabled = !TRACY_ENABLE) +ZoneValue :: #force_inline proc(ctx: ZoneCtx, value: u64) {___tracy_emit_zone_value(ctx, value)} // NOTE: scoped Zone*() procs also exists, no need of calling this directly. ZoneBegin :: proc(active: bool, depth: i32, loc := #caller_location) -> (ctx: ZoneCtx) { @@ -53,53 +97,166 @@ ZoneBegin :: proc(active: bool, depth: i32, loc := #caller_location) -> (ctx: Zo } // NOTE: scoped Zone*() procs also exists, no need of calling this directly. -@(disabled=!TRACY_ENABLE) ZoneEnd :: #force_inline proc(ctx: ZoneCtx) { ___tracy_emit_zone_end(ctx) } +@(disabled = !TRACY_ENABLE) +ZoneEnd :: #force_inline proc(ctx: ZoneCtx) {___tracy_emit_zone_end(ctx)} // Memory profiling // (See allocator.odin for an implementation of an Odin custom allocator using memory profiling.) -@(disabled=!TRACY_ENABLE) Alloc :: #force_inline proc(ptr: rawptr, size: c.size_t, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_alloc_callstack(ptr, size, depth, false) } else { ___tracy_emit_memory_alloc(ptr, size, false) } } -@(disabled=!TRACY_ENABLE) Free :: #force_inline proc(ptr: rawptr, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_free_callstack(ptr, depth, false) } else { ___tracy_emit_memory_free(ptr, false) } } -@(disabled=!TRACY_ENABLE) SecureAlloc :: #force_inline proc(ptr: rawptr, size: c.size_t, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_alloc_callstack(ptr, size, depth, true) } else { ___tracy_emit_memory_alloc(ptr, size, true) } } -@(disabled=!TRACY_ENABLE) SecureFree :: #force_inline proc(ptr: rawptr, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_free_callstack(ptr, depth, true) } else { ___tracy_emit_memory_free(ptr, true) } } -@(disabled=!TRACY_ENABLE) AllocN :: #force_inline proc(ptr: rawptr, size: c.size_t, name: cstring, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_alloc_callstack_named(ptr, size, depth, false, name) } else { ___tracy_emit_memory_alloc_named(ptr, size, false, name) } } -@(disabled=!TRACY_ENABLE) FreeN :: #force_inline proc(ptr: rawptr, name: cstring, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_free_callstack_named(ptr, depth, false, name) } else { ___tracy_emit_memory_free_named(ptr, false, name) } } -@(disabled=!TRACY_ENABLE) SecureAllocN :: #force_inline proc(ptr: rawptr, size: c.size_t, name: cstring, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_alloc_callstack_named(ptr, size, depth, true, name) } else { ___tracy_emit_memory_alloc_named(ptr, size, true, name) } } -@(disabled=!TRACY_ENABLE) SecureFreeN :: #force_inline proc(ptr: rawptr, name: cstring, depth: i32 = TRACY_CALLSTACK) { when TRACY_HAS_CALLSTACK { ___tracy_emit_memory_free_callstack_named(ptr, depth, true, name) } else { ___tracy_emit_memory_free_named(ptr, true, name) } } +@(disabled = !TRACY_ENABLE) +Alloc :: #force_inline proc( + ptr: rawptr, + size: c.size_t, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_alloc_callstack( + ptr, + size, + depth, + false, + )} else {___tracy_emit_memory_alloc(ptr, size, false)}} +@(disabled = !TRACY_ENABLE) +Free :: #force_inline proc( + ptr: rawptr, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_free_callstack( + ptr, + depth, + false, + )} else {___tracy_emit_memory_free(ptr, false)}} +@(disabled = !TRACY_ENABLE) +SecureAlloc :: #force_inline proc( + ptr: rawptr, + size: c.size_t, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_alloc_callstack( + ptr, + size, + depth, + true, + )} else {___tracy_emit_memory_alloc(ptr, size, true)}} +@(disabled = !TRACY_ENABLE) +SecureFree :: #force_inline proc( + ptr: rawptr, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_free_callstack( + ptr, + depth, + true, + )} else {___tracy_emit_memory_free(ptr, true)}} +@(disabled = !TRACY_ENABLE) +AllocN :: #force_inline proc( + ptr: rawptr, + size: c.size_t, + name: cstring, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_alloc_callstack_named( + ptr, + size, + depth, + false, + name, + )} else {___tracy_emit_memory_alloc_named(ptr, size, false, name)}} +@(disabled = !TRACY_ENABLE) +FreeN :: #force_inline proc( + ptr: rawptr, + name: cstring, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_free_callstack_named( + ptr, + depth, + false, + name, + )} else {___tracy_emit_memory_free_named(ptr, false, name)}} +@(disabled = !TRACY_ENABLE) +SecureAllocN :: #force_inline proc( + ptr: rawptr, + size: c.size_t, + name: cstring, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_alloc_callstack_named( + ptr, + size, + depth, + true, + name, + )} else {___tracy_emit_memory_alloc_named(ptr, size, true, name)}} +@(disabled = !TRACY_ENABLE) +SecureFreeN :: #force_inline proc( + ptr: rawptr, + name: cstring, + depth: i32 = TRACY_CALLSTACK, +) {when TRACY_HAS_CALLSTACK {___tracy_emit_memory_free_callstack_named( + ptr, + depth, + true, + name, + )} else {___tracy_emit_memory_free_named(ptr, true, name)}} // Dummy aliases to match C API (only difference is the `depth` parameter, // which we declare as optional for the non-S procs.) -AllocS :: Alloc -FreeS :: Free -SecureAllocS :: SecureAlloc -SecureFreeS :: SecureFree -AllocNS :: AllocN -FreeNS :: FreeN +AllocS :: Alloc +FreeS :: Free +SecureAllocS :: SecureAlloc +SecureFreeS :: SecureFree +AllocNS :: AllocN +FreeNS :: FreeN SecureAllocNS :: SecureAllocN -SecureFreeNS :: SecureFreeN +SecureFreeNS :: SecureFreeN // Frame markup -@(disabled=!TRACY_ENABLE) FrameMark :: #force_inline proc(name: cstring = nil) { ___tracy_emit_frame_mark(name) } -@(disabled=!TRACY_ENABLE) FrameMarkStart :: #force_inline proc(name: cstring) { ___tracy_emit_frame_mark_start(name) } -@(disabled=!TRACY_ENABLE) FrameMarkEnd :: #force_inline proc(name: cstring) { ___tracy_emit_frame_mark_end(name) } -@(disabled=!TRACY_ENABLE) FrameImage :: #force_inline proc(image: rawptr, w, h: u16, offset: u8, flip: b32) { ___tracy_emit_frame_image(image, w, h, offset, flip) } +@(disabled = !TRACY_ENABLE) +FrameMark :: #force_inline proc(name: cstring = nil) {___tracy_emit_frame_mark(name)} +@(disabled = !TRACY_ENABLE) +FrameMarkStart :: #force_inline proc(name: cstring) {___tracy_emit_frame_mark_start(name)} +@(disabled = !TRACY_ENABLE) +FrameMarkEnd :: #force_inline proc(name: cstring) {___tracy_emit_frame_mark_end(name)} +@(disabled = !TRACY_ENABLE) +FrameImage :: #force_inline proc( + image: rawptr, + w, h: u16, + offset: u8, + flip: b32, +) {___tracy_emit_frame_image(image, w, h, offset, flip)} // Plots and messages -@(disabled=!TRACY_ENABLE) Plot :: #force_inline proc(name: cstring, value: f64) { ___tracy_emit_plot(name, value) } -@(disabled=!TRACY_ENABLE) PlotF :: #force_inline proc(name: cstring, value: f32) { ___tracy_emit_plot_float(name, value) } -@(disabled=!TRACY_ENABLE) PlotI :: #force_inline proc(name: cstring, value: i64) { ___tracy_emit_plot_int(name, value) } -@(disabled=!TRACY_ENABLE) PlotConfig :: #force_inline proc(name: cstring, type: TracyPlotFormatEnum, step, fill: b32, color: u32) { ___tracy_emit_plot_config(name, type, step, fill, color) } -@(disabled=!TRACY_ENABLE) Message :: #force_inline proc(txt: string) { ___tracy_emit_message(_sl(txt), TRACY_CALLSTACK when TRACY_HAS_CALLSTACK else 0) } -@(disabled=!TRACY_ENABLE) MessageC :: #force_inline proc(txt: string, color: u32) { ___tracy_emit_message(_sl(txt), TRACY_CALLSTACK when TRACY_HAS_CALLSTACK else 0) } -@(disabled=!TRACY_ENABLE) AppInfo :: #force_inline proc(name: string) { ___tracy_emit_message_appinfo(_sl(name)) } +@(disabled = !TRACY_ENABLE) +Plot :: #force_inline proc(name: cstring, value: f64) {___tracy_emit_plot(name, value)} +@(disabled = !TRACY_ENABLE) +PlotF :: #force_inline proc(name: cstring, value: f32) {___tracy_emit_plot_float(name, value)} +@(disabled = !TRACY_ENABLE) +PlotI :: #force_inline proc(name: cstring, value: i64) {___tracy_emit_plot_int(name, value)} +@(disabled = !TRACY_ENABLE) +PlotConfig :: #force_inline proc( + name: cstring, + type: TracyPlotFormatEnum, + step, fill: b32, + color: u32, +) {___tracy_emit_plot_config(name, type, step, fill, color)} +@(disabled = !TRACY_ENABLE) +Message :: #force_inline proc(txt: string) {___tracy_emit_message( + _sl(txt), + TRACY_CALLSTACK when TRACY_HAS_CALLSTACK else 0, + )} +@(disabled = !TRACY_ENABLE) +MessageC :: #force_inline proc(txt: string, color: u32) {___tracy_emit_message( + _sl(txt), + TRACY_CALLSTACK when TRACY_HAS_CALLSTACK else 0, + )} +@(disabled = !TRACY_ENABLE) +AppInfo :: #force_inline proc(name: string) {___tracy_emit_message_appinfo(_sl(name))} -@(disabled=!TRACY_ENABLE) SetThreadName :: #force_inline proc(name: cstring) { ___tracy_set_thread_name(name) } +@(disabled = !TRACY_ENABLE) +SetThreadName :: #force_inline proc(name: cstring) {___tracy_set_thread_name(name)} // Connection status -IsConnected :: #force_inline proc() -> bool { return cast(bool)___tracy_connected() when TRACY_ENABLE else false } +IsConnected :: #force_inline proc() -> bool {return( + cast(bool)___tracy_connected() when TRACY_ENABLE else false \ + )} // Fibers -@(disabled=!TRACY_ENABLE) FiberEnter :: #force_inline proc(name: cstring) { when TRACY_FIBERS { ___tracy_fiber_enter(name) } } -@(disabled=!TRACY_ENABLE) FiberLeave :: #force_inline proc() { when TRACY_FIBERS { ___tracy_fiber_leave() } } +@(disabled = !TRACY_ENABLE) +FiberEnter :: #force_inline proc(name: cstring) {when TRACY_FIBERS {___tracy_fiber_enter(name)}} +@(disabled = !TRACY_ENABLE) +FiberLeave :: #force_inline proc() {when TRACY_FIBERS {___tracy_fiber_leave()}} // GPU zones // These are also available but no higher level wrapper provided. @@ -141,18 +298,32 @@ LockAnnounce :: #force_inline proc(loc := #caller_location) -> (ctx: LockCtx) { } return } -@(disabled=!TRACY_ENABLE) LockTerminate :: #force_inline proc( lock: LockCtx ) { ___tracy_terminate_lockable_ctx( lock ) } -@(disabled=!TRACY_ENABLE) LockBeforeLock :: #force_inline proc( lock: LockCtx ) { ___tracy_before_lock_lockable_ctx( lock ) } -@(disabled=!TRACY_ENABLE) LockAfterLock :: #force_inline proc( lock: LockCtx ) { ___tracy_after_lock_lockable_ctx( lock ) } -@(disabled=!TRACY_ENABLE) LockAfterUnlock :: #force_inline proc( lock: LockCtx ) { ___tracy_after_unlock_lockable_ctx( lock ) } -@(disabled=!TRACY_ENABLE) LockAfterTryLock :: #force_inline proc( lock: LockCtx, acquired: bool ) { ___tracy_after_try_lock_lockable_ctx( lock, b32(acquired) ) } -@(disabled=!TRACY_ENABLE) LockMark :: #force_inline proc( lock: LockCtx, loc := #caller_location ) { +@(disabled = !TRACY_ENABLE) +LockTerminate :: #force_inline proc(lock: LockCtx) {___tracy_terminate_lockable_ctx(lock)} +@(disabled = !TRACY_ENABLE) +LockBeforeLock :: #force_inline proc(lock: LockCtx) {___tracy_before_lock_lockable_ctx(lock)} +@(disabled = !TRACY_ENABLE) +LockAfterLock :: #force_inline proc(lock: LockCtx) {___tracy_after_lock_lockable_ctx(lock)} +@(disabled = !TRACY_ENABLE) +LockAfterUnlock :: #force_inline proc(lock: LockCtx) {___tracy_after_unlock_lockable_ctx(lock)} +@(disabled = !TRACY_ENABLE) +LockAfterTryLock :: #force_inline proc( + lock: LockCtx, + acquired: bool, +) {___tracy_after_try_lock_lockable_ctx(lock, b32(acquired))} +@(disabled = !TRACY_ENABLE) +LockMark :: #force_inline proc(lock: LockCtx, loc := #caller_location) { id := ___tracy_alloc_srcloc(u32(loc.line), _sl(loc.file_path), _sl(loc.procedure)) ___tracy_mark_lockable_ctx(lock, (^___tracy_source_location_data)(uintptr(id))) } -@(disabled=!TRACY_ENABLE) LockCustomName :: #force_inline proc( lock: LockCtx, name: string ) { ___tracy_custom_name_lockable_ctx( lock, _sl(name) ) } +@(disabled = !TRACY_ENABLE) +LockCustomName :: #force_inline proc( + lock: LockCtx, + name: string, +) {___tracy_custom_name_lockable_ctx(lock, _sl(name))} // Helper for passing cstring+length to Tracy functions. -@(private="file") _sl :: proc(s: string) -> (cstring, c.size_t) { +@(private = "file") +_sl :: proc(s: string) -> (cstring, c.size_t) { return cstring(raw_data(s)), c.size_t(len(s)) }