#ifndef YASL_TIMING_H #define YASL_TIMING_H #include #include #ifdef __cplusplus extern "C" { #endif struct yasl_resize_stats { uint64_t count; double avg_us; double max_us; long minflt; }; struct yasl_timing { double refresh_ns; uint64_t last_present_ns; uint64_t next_present_ns; uint64_t frames_skipped; struct yasl_resize_stats resize; }; #define YASL_REFRESH_DEFAULT_NS 16666666.0 struct yasl_frame_clock { uint64_t last_present_ns; uint64_t resize_count; uint64_t resize_sum_ns; uint64_t resize_max_ns; long resize_minflt; uint64_t frame_time_ns; double refresh_ns; }; uint64_t yasl_clock_extend_ms(uint32_t ms, uint64_t now_ns); void yasl_clock_presented(struct yasl_frame_clock *c, uint64_t now, bool sample); void yasl_clock_note_resize(struct yasl_frame_clock *c, uint64_t dt_ns); void yasl_clock_resize_stats(const struct yasl_frame_clock *c, struct yasl_resize_stats *out); double yasl_clock_refresh_ms(const struct yasl_frame_clock *c); uint64_t yasl_clock_next_present_ns(const struct yasl_frame_clock *c); uint64_t yasl_clock_frame_timestamp_ns(struct yasl_frame_clock *c, uint64_t now); #ifdef __cplusplus } #endif #endif /* YASL_TIMING_H */