fret_runtime/
runner_surface_lifecycle_diagnostics.rs1use fret_core::time::{SystemTime, UNIX_EPOCH};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
8pub struct RunnerSurfaceLifecycleSnapshot {
9 pub can_create_surfaces_calls: u64,
10 pub destroy_surfaces_calls: u64,
11 pub last_can_create_surfaces_unix_ms: Option<u64>,
12 pub last_destroy_surfaces_unix_ms: Option<u64>,
13 pub surfaces_available: bool,
14}
15
16#[derive(Debug, Default)]
17pub struct RunnerSurfaceLifecycleDiagnosticsStore {
18 snapshot: RunnerSurfaceLifecycleSnapshot,
19}
20
21impl RunnerSurfaceLifecycleDiagnosticsStore {
22 pub fn snapshot(&self) -> RunnerSurfaceLifecycleSnapshot {
23 self.snapshot
24 }
25
26 pub fn record_can_create_surfaces(&mut self) {
27 self.snapshot.can_create_surfaces_calls =
28 self.snapshot.can_create_surfaces_calls.saturating_add(1);
29 self.snapshot.last_can_create_surfaces_unix_ms = Some(unix_ms_now());
30 self.snapshot.surfaces_available = true;
31 }
32
33 pub fn record_destroy_surfaces(&mut self) {
34 self.snapshot.destroy_surfaces_calls =
35 self.snapshot.destroy_surfaces_calls.saturating_add(1);
36 self.snapshot.last_destroy_surfaces_unix_ms = Some(unix_ms_now());
37 self.snapshot.surfaces_available = false;
38 }
39}
40
41fn unix_ms_now() -> u64 {
42 SystemTime::now()
43 .duration_since(UNIX_EPOCH)
44 .map(|d| d.as_millis() as u64)
45 .unwrap_or(0)
46}