summaryrefslogtreecommitdiff
path: root/include/yasl/timing.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/yasl/timing.h')
-rw-r--r--include/yasl/timing.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/include/yasl/timing.h b/include/yasl/timing.h
new file mode 100644
index 0000000..7c66967
--- /dev/null
+++ b/include/yasl/timing.h
@@ -0,0 +1,51 @@
+#ifndef YASL_TIMING_H
+#define YASL_TIMING_H
+
+#include <stdbool.h>
+#include <stdint.h>
+
+#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 */