Avara3D 0.2.0
C++ API reference
FrameStatsHistory.h
1//
2// FrameStatsHistory.h
3// avara3d
4//
5// Created by Morgan Davis on 12/6/25.
6// Copyright © 2026 Morgan K Davis. All rights reserved.
7//
8
9#ifndef AVARA3D_PROFILE_FRAMESTATSHISTORY_H
10#define AVARA3D_PROFILE_FRAMESTATSHISTORY_H
11
12#include <chrono>
13#include <deque>
14#include <tuple>
15
16#include "a3d/profile/FrameStats.h"
17
18namespace a3d {
19
20 class FrameStatsHistory {
21
22 public:
23 // [Internal Types]
24
25 using SteadyTimePoint = std::chrono::time_point<std::chrono::steady_clock>;
26
27 // [Internal Static Member Functions]
28
29 static void GetAverages(const FrameStatsHistory& history,
30 std::chrono::nanoseconds& frame,
31 std::chrono::nanoseconds& engineCpu,
32 std::chrono::nanoseconds& renderCpu,
33 std::chrono::nanoseconds& renderGpu,
34 std::chrono::nanoseconds& physics,
35 std::chrono::nanoseconds& appCpu,
36 std::chrono::milliseconds averagingDuration);
37 // [Internal Lifecycle Functions]
38
39 explicit FrameStatsHistory(std::chrono::milliseconds historyTime);
40
41 // [Internal Member Functions]
42
43 void add(FrameStats stats);
44
45 const std::deque<std::tuple<SteadyTimePoint, FrameStats>>& samples() const;
46
47 private:
48 // [Private Member Variables]
49
50 std::chrono::milliseconds _historyTime;
51 std::deque<std::tuple<SteadyTimePoint, FrameStats>> _samples;
52 };
53
54}
55
56#endif // AVARA3D_PROFILE_FRAMESTATSHISTORY_H