st/oxr: Use precise sleeper for extra wait frame sleeps

This commit is contained in:
Jakob Bornecrantz 2022-09-02 23:40:53 +01:00 committed by Ryan Pavlik
parent 828246a5cd
commit 115bf93487
2 changed files with 11 additions and 1 deletions

View file

@ -1564,6 +1564,11 @@ struct oxr_session
struct os_semaphore sem;
/*!
* Used to implement precise extra sleeping in wait frame.
*/
struct os_precise_sleeper sleeper;
/*!
* An array of action set attachments that this session owns.
*

View file

@ -535,7 +535,8 @@ oxr_session_frame_wait(struct oxr_logger *log, struct oxr_session *sess, XrFrame
}
if (sess->frame_timing_wait_sleep_ms > 0) {
os_nanosleep(U_TIME_1MS_IN_NS * sess->frame_timing_wait_sleep_ms);
uint64_t sleep_ns = U_TIME_1MS_IN_NS * sess->frame_timing_wait_sleep_ms;
os_precise_sleeper_nanosleep(&sess->sleeper, sleep_ns);
}
return oxr_session_success_result(sess);
@ -615,6 +616,7 @@ oxr_session_destroy(struct oxr_logger *log, struct oxr_handle_base *hb)
xrt_comp_destroy(&sess->compositor);
xrt_comp_native_destroy(&sess->xcn);
os_precise_sleeper_deinit(&sess->sleeper);
os_semaphore_destroy(&sess->sem);
os_mutex_destroy(&sess->active_wait_frames_lock);
@ -635,6 +637,9 @@ oxr_session_allocate_and_init(struct oxr_logger *log, struct oxr_system *sys, st
// Init the begin/wait frame semaphore and related fields.
os_semaphore_init(&sess->sem, 1);
// Init the wait frame precise sleeper.
os_precise_sleeper_init(&sess->sleeper);
sess->active_wait_frames = 0;
os_mutex_init(&sess->active_wait_frames_lock);