mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-25 02:40:46 +02:00
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:
parent
7bb34ecff9
commit
1ee01d91c7
4 changed files with 18 additions and 24 deletions
|
|
@ -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, ¤t);
|
||||
return current.tv_nsec + current.tv_sec * 1000000000ull;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue