From 93928424a9722f1ac1a36294cd6fa20080bad784 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Wed, 2 Feb 2022 13:37:01 +0100 Subject: [PATCH] common: Move time query to common header. Signed-off-by: Hans-Kristian Arntzen --- include/private/vkd3d_common.h | 19 +++++++++++++++++++ include/private/vkd3d_profiling.h | 23 +++-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/include/private/vkd3d_common.h b/include/private/vkd3d_common.h index f770b54c..36314a01 100644 --- a/include/private/vkd3d_common.h +++ b/include/private/vkd3d_common.h @@ -30,6 +30,8 @@ #ifdef _MSC_VER #include +#else +#include #endif #ifndef ARRAY_SIZE @@ -290,4 +292,21 @@ static inline void *void_ptr_offset(void *ptr, size_t offset) #define VKD3D_THREAD_LOCAL __thread #endif +static inline uint64_t vkd3d_get_current_time_ns(void) +{ +#ifdef _WIN32 + LARGE_INTEGER li, lf; + uint64_t whole, part; + QueryPerformanceCounter(&li); + QueryPerformanceFrequency(&lf); + whole = (li.QuadPart / lf.QuadPart) * 1000000000; + part = ((li.QuadPart % lf.QuadPart) * 1000000000) / lf.QuadPart; + return whole + part; +#else + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC_RAW, &ts); + return ts.tv_sec * 1000000000ll + ts.tv_nsec; +#endif +} + #endif /* __VKD3D_COMMON_H */ diff --git a/include/private/vkd3d_profiling.h b/include/private/vkd3d_profiling.h index 5aae44ce..9983dd1e 100644 --- a/include/private/vkd3d_profiling.h +++ b/include/private/vkd3d_profiling.h @@ -21,7 +21,7 @@ #include "vkd3d_windows.h" #include "vkd3d_spinlock.h" -#include +#include "vkd3d_common.h" #ifdef VKD3D_ENABLE_PROFILING @@ -37,23 +37,6 @@ bool vkd3d_uses_profiling(void); unsigned int vkd3d_profiling_register_region(const char *name, spinlock_t *lock, uint32_t *latch); void vkd3d_profiling_notify_work(unsigned int index, uint64_t start_ticks, uint64_t end_ticks, unsigned int iteration_count); -static inline uint64_t vkd3d_profiling_get_tick_count(void) -{ -#ifdef _WIN32 - LARGE_INTEGER li, lf; - uint64_t whole, part; - QueryPerformanceCounter(&li); - QueryPerformanceFrequency(&lf); - whole = (li.QuadPart / lf.QuadPart) * 1000000000; - part = ((li.QuadPart % lf.QuadPart) * 1000000000) / lf.QuadPart; - return whole + part; -#else - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC_RAW, &ts); - return ts.tv_sec * 1000000000ll + ts.tv_nsec; -#endif -} - #define VKD3D_REGION_DECL(name) \ static uint32_t _vkd3d_region_latch_##name; \ static spinlock_t _vkd3d_region_lock_##name; \ @@ -65,12 +48,12 @@ static inline uint64_t vkd3d_profiling_get_tick_count(void) do { \ if (!(_vkd3d_region_index_##name = vkd3d_atomic_uint32_load_explicit(&_vkd3d_region_latch_##name, vkd3d_memory_order_acquire))) \ _vkd3d_region_index_##name = vkd3d_profiling_register_region(#name, &_vkd3d_region_lock_##name, &_vkd3d_region_latch_##name); \ - _vkd3d_region_begin_tick_##name = vkd3d_profiling_get_tick_count(); \ + _vkd3d_region_begin_tick_##name = vkd3d_get_current_time_ns(); \ } while(0) #define VKD3D_REGION_END_ITERATIONS(name, iter) \ do { \ - _vkd3d_region_end_tick_##name = vkd3d_profiling_get_tick_count(); \ + _vkd3d_region_end_tick_##name = vkd3d_get_current_time_ns(); \ vkd3d_profiling_notify_work(_vkd3d_region_index_##name, _vkd3d_region_begin_tick_##name, _vkd3d_region_end_tick_##name, iter); \ } while(0)