1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00
tracy/public/TracyClient.F90
2025-01-05 23:21:12 +01:00

91 lines
2.5 KiB
Fortran

module tracy
use, intrinsic :: iso_c_binding, only: c_ptr, c_loc, c_char, c_null_char, &
& c_int8_t, c_int16_t, c_int32_t, c_int64_t, c_int, c_float
implicit none
private
! skipped: TracyPlotFormatEnum
interface
subroutine impl_tracy_set_thread_name(name) bind(C, name="___tracy_set_thread_name")
import
type(c_ptr) :: name
end subroutine impl_tracy_set_thread_name
end interface
type, bind(C) :: tracy_source_location_data
type(c_ptr) :: name
type(c_ptr) :: function
type(c_ptr) :: file
integer(c_int32_t) :: line
integer(c_int32_t) :: color
end type
type, bind(C) :: tracy_c_zone_context
integer(c_int32_t) :: id
integer(c_int32_t) :: active
end type
type, bind(C) :: tracy_gpu_time_data
integer(c_int64_t) :: gpuTime
integer(c_int16_t) :: queryId
integer(c_int8_t) :: context
end type
type, bind(C) :: tracy_gpu_zone_begin_data
integer(c_int64_t) :: srcloc
integer(c_int16_t) :: queryId
integer(c_int8_t) :: context
end type
type, bind(C) :: tracy_gpu_zone_begin_callstack_data
integer(c_int64_t) :: srcloc
integer(c_int32_t) :: depth
integer(c_int16_t) :: queryId
integer(c_int8_t) :: context
end type
type, bind(C) :: tracy_gpu_zone_end_data
integer(c_int16_t) :: queryId
integer(c_int8_t) :: context
end type
type, bind(C) :: tracy_gpu_new_context_data
integer(c_int64_t) :: gpuTime
real(c_float) :: period
integer(c_int8_t) :: context
integer(c_int8_t) :: flags
integer(c_int8_t) :: type
end type
type, bind(C) :: tracy_gpu_context_name_data
integer(c_int8_t) :: context
type(c_ptr) :: name
integer(c_int16_t) :: len
end type
type, bind(C) :: tracy_gpu_calibration_data
integer(c_int64_t) :: gpuTime
integer(c_int64_t) :: cpuDelta
integer(c_int8_t) :: context
end type
type, bind(C) :: tracy_gpu_time_sync_data
integer(c_int64_t) :: gpuTime
integer(c_int8_t) :: context
end type
! tracy_lockable_context_data and related stuff is missed since Fortran does not have support of mutexes
!
public :: tracy_c_zone_context
!
public :: tracy_set_thread_name
contains
subroutine tracy_set_thread_name(name)
character(kind=c_char, len=*), intent(in) :: name
character(kind=c_char, len=:), allocatable, target :: alloc_name
allocate(character(kind=c_char, len=len(name) + 1) :: alloc_name)
alloc_name = name // c_null_char
call impl_tracy_set_thread_name(c_loc(alloc_name))
end subroutine tracy_set_thread_name
end module tracy