From af5cf402bf47991ac1bae50b814fad6524a47a13 Mon Sep 17 00:00:00 2001
From: Simon Zeni <simon.zeni@collabora.com>
Date: Thu, 1 Aug 2024 15:23:28 -0400
Subject: [PATCH] xrt: use int64_t to represent timestamps

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2298>
---
 src/xrt/compositor/multi/comp_multi_compositor.c | 2 +-
 src/xrt/include/xrt/xrt_compositor.h             | 4 ++--
 src/xrt/include/xrt/xrt_defines.h                | 4 ++--
 src/xrt/include/xrt/xrt_frame.h                  | 4 ++--
 src/xrt/include/xrt/xrt_instance.h               | 2 +-
 src/xrt/include/xrt/xrt_session.h                | 4 ++--
 6 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/xrt/compositor/multi/comp_multi_compositor.c b/src/xrt/compositor/multi/comp_multi_compositor.c
index 063c27078..c3f43019c 100644
--- a/src/xrt/compositor/multi/comp_multi_compositor.c
+++ b/src/xrt/compositor/multi/comp_multi_compositor.c
@@ -179,7 +179,7 @@ wait_for_scheduled_free(struct multi_compositor *mc)
 
 	// Block here if the scheduled slot is not clear.
 	while (v_mc->scheduled.active) {
-		uint64_t now_ns = os_monotonic_get_ns();
+		int64_t now_ns = os_monotonic_get_ns();
 
 		// This frame is for the next frame, drop the old one no matter what.
 		if (time_is_within_half_ms(mc->progress.data.display_time_ns, mc->slot_next_frame_display)) {
diff --git a/src/xrt/include/xrt/xrt_compositor.h b/src/xrt/include/xrt/xrt_compositor.h
index 34be0b1af..0e6690b70 100644
--- a/src/xrt/include/xrt/xrt_compositor.h
+++ b/src/xrt/include/xrt/xrt_compositor.h
@@ -408,7 +408,7 @@ struct xrt_layer_data
 	 * The layer may be displayed after this point, but must never be
 	 * displayed before.
 	 */
-	uint64_t timestamp;
+	int64_t timestamp;
 
 	/*!
 	 * Composition flags
@@ -477,7 +477,7 @@ struct xrt_layer_data
 struct xrt_layer_frame_data
 {
 	int64_t frame_id;
-	uint64_t display_time_ns;
+	int64_t display_time_ns;
 	enum xrt_blend_mode env_blend_mode;
 };
 
diff --git a/src/xrt/include/xrt/xrt_defines.h b/src/xrt/include/xrt/xrt_defines.h
index 14f9004ad..fbf29d7f2 100644
--- a/src/xrt/include/xrt/xrt_defines.h
+++ b/src/xrt/include/xrt/xrt_defines.h
@@ -1614,7 +1614,7 @@ enum xrt_facial_tracking_type_htc
 
 struct xrt_facial_base_expression_set_htc
 {
-	uint64_t sample_time_ns;
+	int64_t sample_time_ns;
 	bool is_active;
 };
 
@@ -1769,7 +1769,7 @@ struct xrt_body_joint_location_fb
 
 struct xrt_base_body_joint_set_meta
 {
-	uint64_t sample_time_ns;
+	int64_t sample_time_ns;
 	float confidence;
 	uint32_t skeleton_changed_count;
 	bool is_active;
diff --git a/src/xrt/include/xrt/xrt_frame.h b/src/xrt/include/xrt/xrt_frame.h
index ed9f2606d..90c7645ba 100644
--- a/src/xrt/include/xrt/xrt_frame.h
+++ b/src/xrt/include/xrt/xrt_frame.h
@@ -36,8 +36,8 @@ struct xrt_frame
 	enum xrt_format format;
 	enum xrt_stereo_format stereo_format;
 
-	uint64_t timestamp;
-	uint64_t source_timestamp;
+	int64_t timestamp;
+	int64_t source_timestamp;
 	uint64_t source_sequence; //!< sequence id
 	uint64_t source_id;       //!< Which @ref xrt_fs this frame originated from.
 };
diff --git a/src/xrt/include/xrt/xrt_instance.h b/src/xrt/include/xrt/xrt_instance.h
index 187692198..c9ee28ab0 100644
--- a/src/xrt/include/xrt/xrt_instance.h
+++ b/src/xrt/include/xrt/xrt_instance.h
@@ -185,7 +185,7 @@ struct xrt_instance
 	/*!
 	 * CLOCK_MONOTONIC timestamp of the instance startup.
 	 */
-	uint64_t startup_timestamp;
+	int64_t startup_timestamp;
 
 	/*!
 	 * An "aspect" of the xrt_instance interface, used only on Android.
diff --git a/src/xrt/include/xrt/xrt_session.h b/src/xrt/include/xrt/xrt_session.h
index 6ec998a91..554ecfab6 100644
--- a/src/xrt/include/xrt/xrt_session.h
+++ b/src/xrt/include/xrt/xrt_session.h
@@ -101,7 +101,7 @@ struct xrt_session_event_overlay
 struct xrt_session_event_loss_pending
 {
 	enum xrt_session_event_type type;
-	uint64_t loss_time_ns;
+	int64_t loss_time_ns;
 };
 
 /*!
@@ -141,7 +141,7 @@ struct xrt_session_event_reference_space_change_pending
 {
 	enum xrt_session_event_type event_type;
 	enum xrt_reference_space_type ref_type;
-	uint64_t timestamp_ns;
+	int64_t timestamp_ns;
 	struct xrt_pose pose_in_previous_space;
 	bool pose_valid;
 };