wsi: deduplicate get_current_time() functions between display and x11

Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
Eric Engestrom 2018-10-28 13:37:26 +00:00
parent 7bb34ecff9
commit 1ee01d91c7
4 changed files with 18 additions and 24 deletions

View file

@ -26,6 +26,7 @@
#include "util/macros.h"
#include "vk_util.h"
#include <time.h>
#include <unistd.h>
#include <xf86drm.h>
@ -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, &current);
return current.tv_nsec + current.tv_sec * 1000000000ull;
}

View file

@ -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

View file

@ -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;
}

View file

@ -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