blob: 7e4af9e8ffd5866c53f7a14d6e16a808b2b5625a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/**
* @file
* Timing provenance, refresh estimates, and buffer-resize statistics.
* All timestamps are monotonic nanoseconds, not wall-clock dates.
*/
#ifndef YASL_TIMING_H
#define YASL_TIMING_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Cumulative backend buffer-resize measurements; unavailable counters are zero. */
struct yasl_resize_stats {
/** Number of measured buffer resizes. */
uint64_t count;
/** Mean measured resize duration in microseconds. */
double avg_us;
/** Maximum measured resize duration in microseconds. */
double max_us;
/** Backend minor page-fault counter, if collected. */
long minflt;
};
/* Describes last_present_ns, not merely availability of an extension. */
/** Provenance of last_present_ns; only PRESENTATION confirms compositor presentation. */
enum yasl_timing_source {
YASL_TIMING_UNKNOWN = 0, /**< No timing sample yet. */
YASL_TIMING_SUBMISSION, /**< CPU submission time, not scanout confirmation. */
YASL_TIMING_FRAME_CALLBACK, /**< Compositor pacing callback, not scanout confirmation. */
YASL_TIMING_PRESENTATION, /**< Compositor-confirmed presentation. */
};
/** Snapshot of estimates and timing provenance. Zero timestamps mean no sample yet. */
struct yasl_timing {
/** Estimated refresh interval in nanoseconds; zero if unavailable. */
double refresh_ns;
/** Last timestamp, whose meaning is specified by source. */
uint64_t last_present_ns;
/** Estimated next presentation time, or zero without a prior sample. */
uint64_t next_present_ns;
/** Backend skipped-frame counter; not comparable across backends. */
uint64_t frames_skipped;
/** Provenance of last_present_ns. */
enum yasl_timing_source source;
/** Cumulative backend resize statistics. */
struct yasl_resize_stats resize;
};
#ifdef __cplusplus
}
#endif
#endif /* YASL_TIMING_H */
|