drm: Use vblank time from page flip handler

This commit is contained in:
Joshua Ashton 2022-01-25 14:35:55 +00:00 committed by Joshie
parent 779d8f1bee
commit a659fef806
4 changed files with 8 additions and 5 deletions

View file

@ -188,7 +188,9 @@ static void page_flip_handler(int fd, unsigned int frame, unsigned int sec, unsi
if ( g_DRM.crtc->id != crtc_id ) if ( g_DRM.crtc->id != crtc_id )
return; return;
vblank_mark_possible_vblank(); // This is the last vblank time
uint64_t vblanktime = sec * 1'000'000'000lu + usec * 1'000lu;
vblank_mark_possible_vblank(vblanktime);
// TODO: get the fbids_queued instance from data if we ever have more than one in flight // TODO: get the fbids_queued instance from data if we ever have more than one in flight

View file

@ -494,7 +494,8 @@ static inline void stats_printf( const char* format, ...)
uint64_t get_time_in_nanos() uint64_t get_time_in_nanos()
{ {
timespec ts; timespec ts;
clock_gettime(CLOCK_MONOTONIC_RAW, &ts); // Kernel reports page flips with CLOCK_MONOTONIC.
clock_gettime(CLOCK_MONOTONIC, &ts);
return ts.tv_sec * 1'000'000'000ul + ts.tv_nsec; return ts.tv_sec * 1'000'000'000ul + ts.tv_nsec;
} }

View file

@ -77,7 +77,7 @@ int vblank_init( void )
return g_vblankPipe[ 0 ]; return g_vblankPipe[ 0 ];
} }
void vblank_mark_possible_vblank( void ) void vblank_mark_possible_vblank( uint64_t nanos )
{ {
g_lastVblank = get_time_in_nanos(); g_lastVblank = nanos;
} }

View file

@ -2,4 +2,4 @@
int vblank_init( void ); int vblank_init( void );
void vblank_mark_possible_vblank( void ); void vblank_mark_possible_vblank( uint64_t nanos );