From: Eric Engestrom Date: Sun, 28 Oct 2018 13:37:26 +0000 (+0000) Subject: wsi: deduplicate get_current_time() functions between display and x11 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1ee01d91c7e9bb0922b112c11a374283e2ca454b;p=mesa.git wsi: deduplicate get_current_time() functions between display and x11 Signed-off-by: Eric Engestrom Reviewed-by: Tapani Pälli --- diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index 783b954a5c5..3cba0a4b06e 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -26,6 +26,7 @@ #include "util/macros.h" #include "vk_util.h" +#include #include #include @@ -1021,3 +1022,11 @@ wsi_common_queue_present(const struct wsi_device *wsi, return final_result; } + +uint64_t +wsi_common_get_current_time(void) +{ + struct timespec current; + clock_gettime(CLOCK_MONOTONIC, ¤t); + return current.tv_nsec + current.tv_sec * 1000000000ull; +} diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h index 8851855fa28..e693e2be425 100644 --- a/src/vulkan/wsi/wsi_common.h +++ b/src/vulkan/wsi/wsi_common.h @@ -243,4 +243,7 @@ wsi_common_queue_present(const struct wsi_device *wsi, int queue_family_index, const VkPresentInfoKHR *pPresentInfo); +uint64_t +wsi_common_get_current_time(void); + #endif diff --git a/src/vulkan/wsi/wsi_common_display.c b/src/vulkan/wsi/wsi_common_display.c index 7ff9d77d88b..987b6dd715a 100644 --- a/src/vulkan/wsi/wsi_common_display.c +++ b/src/vulkan/wsi/wsi_common_display.c @@ -171,17 +171,9 @@ wsi_display_mode_refresh(struct wsi_display_mode *wsi) (double) MAX2(wsi->vscan, 1)); } -static uint64_t wsi_get_current_monotonic(void) -{ - struct timespec tv; - - clock_gettime(CLOCK_MONOTONIC, &tv); - return tv.tv_nsec + tv.tv_sec*1000000000ull; -} - static uint64_t wsi_rel_to_abs_time(uint64_t rel_time) { - uint64_t current_time = wsi_get_current_monotonic(); + uint64_t current_time = wsi_common_get_current_time(); /* check for overflow */ if (rel_time > UINT64_MAX - current_time) @@ -1436,8 +1428,8 @@ wsi_display_fence_wait(struct wsi_fence *fence_wsi, uint64_t timeout) wsi_display_debug("%9lu wait fence %lu %ld\n", pthread_self(), fence->sequence, - (int64_t) (timeout - wsi_get_current_monotonic())); - wsi_display_debug_code(uint64_t start_ns = wsi_get_current_monotonic()); + (int64_t) (timeout - wsi_common_get_current_time())); + wsi_display_debug_code(uint64_t start_ns = wsi_common_get_current_time()); pthread_mutex_lock(&wsi->wait_mutex); VkResult result; @@ -1469,7 +1461,7 @@ wsi_display_fence_wait(struct wsi_fence *fence_wsi, uint64_t timeout) pthread_mutex_unlock(&wsi->wait_mutex); wsi_display_debug("%9lu fence wait %f ms\n", pthread_self(), - ((int64_t) (wsi_get_current_monotonic() - start_ns)) / + ((int64_t) (wsi_common_get_current_time() - start_ns)) / 1.0e6); return result; } diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 52d820869a8..0aa71ca6f2e 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -835,19 +835,9 @@ x11_handle_dri3_present_event(struct x11_swapchain *chain, } -static uint64_t wsi_get_current_time(void) -{ - uint64_t current_time; - struct timespec tv; - - clock_gettime(CLOCK_MONOTONIC, &tv); - current_time = tv.tv_nsec + tv.tv_sec*1000000000ull; - return current_time; -} - static uint64_t wsi_get_absolute_timeout(uint64_t timeout) { - uint64_t current_time = wsi_get_current_time(); + uint64_t current_time = wsi_common_get_current_time(); timeout = MIN2(UINT64_MAX - current_time, timeout); @@ -898,7 +888,7 @@ x11_acquire_next_image_poll_x11(struct x11_swapchain *chain, /* If a non-special event happens, the fd will still * poll. So recalculate the timeout now just in case. */ - uint64_t current_time = wsi_get_current_time(); + uint64_t current_time = wsi_common_get_current_time(); if (atimeout > current_time) timeout = atimeout - current_time; else