Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
metrics_registry.h
Go to the documentation of this file.
1
5
6#ifndef METRICS_REGISTRY_H
7#define METRICS_REGISTRY_H
8
9#include <QList>
10#include <QtGlobal>
11#include <array>
12#include <atomic>
13
30{
31public:
41 static constexpr int KindStride = 1280;
42
43 static constexpr int NumKinds = 6;
44
45 static constexpr const char *KindNames[NumKinds] = {"session", "room", "game", "moderator", "admin", "developer"};
46
48 static constexpr int MaxTypes = NumKinds * KindStride;
49
51 static_assert(KindStride > 1206, "KindStride must exceed the highest command extension number in use");
52
53 static int typeIdFor(int kindIndex, int extensionNumber)
54 {
55 return kindIndex * KindStride + extensionNumber;
56 }
57
58 void observeCommand(int typeId, qint64 elapsedMs);
59
65 void observeGameStartDurationMs(qint64 elapsedMs);
66
68 qint64 totalCommands() const
69 {
70 return totalCommandsCounter.load(std::memory_order_relaxed);
71 }
72
74 qint64 totalTimeMs() const
75 {
76 return totalTimeCounter.load(std::memory_order_relaxed);
77 }
78
80 int activeTypeCount() const;
81
83 {
84 int typeId;
85 qint64 count;
86 qint64 totalMs;
87 };
88
95
97 {
98 qint64 count;
99 qint64 totalMs;
100 };
101
103
104private:
106 {
107 std::atomic<qint64> count{0};
108 std::atomic<qint64> totalMs{0};
109 };
110
111 TypeStats &slotFor(int typeId);
112 const TypeStats &slotFor(int typeId) const;
113
114 std::array<TypeStats, MaxTypes> typeSlots{};
116 std::atomic<qint64> totalCommandsCounter{0};
117 std::atomic<qint64> totalTimeCounter{0};
118};
119
120#endif
Lock-free accumulation of command processing statistics.
Definition metrics_registry.h:30
qint64 totalTimeMs() const
Cumulative processing milliseconds across all types.
Definition metrics_registry.h:74
static int typeIdFor(int kindIndex, int extensionNumber)
Guard against typeIdFor() overflowing into the neighbouring kind's slots.
Definition metrics_registry.h:53
std::atomic< qint64 > totalTimeCounter
Definition metrics_registry.h:117
void observeGameStartDurationMs(qint64 elapsedMs)
Definition metrics_registry.cpp:22
static constexpr const char * KindNames[NumKinds]
Definition metrics_registry.h:45
int activeTypeCount() const
Number of distinct type slots that have seen at least one sample.
Definition metrics_registry.cpp:42
GameStartSnapshot getGameStartSnapshot() const
Definition metrics_registry.cpp:67
void observeCommand(int typeId, qint64 elapsedMs)
Definition metrics_registry.cpp:6
std::array< TypeStats, MaxTypes > typeSlots
Definition metrics_registry.h:114
std::atomic< qint64 > totalCommandsCounter
Definition metrics_registry.h:116
static constexpr int MaxTypes
Upper bound on distinct command type ids (see typeIdFor).
Definition metrics_registry.h:48
TypeStats & slotFor(int typeId)
Definition metrics_registry.cpp:32
static constexpr int KindStride
Definition metrics_registry.h:41
QList< ActiveTypeStats > collectActiveStats() const
Definition metrics_registry.cpp:53
qint64 totalCommands() const
Total number of observed commands across all types.
Definition metrics_registry.h:68
TypeStats gameStartStats
Definition metrics_registry.h:115
static constexpr int NumKinds
Definition metrics_registry.h:43
Definition remote_connection_controller.h:20
Definition metrics_registry.h:83
qint64 count
Definition metrics_registry.h:85
qint64 totalMs
Definition metrics_registry.h:86
int typeId
Definition metrics_registry.h:84
Definition metrics_registry.h:97
qint64 totalMs
Definition metrics_registry.h:99
qint64 count
Definition metrics_registry.h:98
Definition metrics_registry.h:106
std::atomic< qint64 > count
Definition metrics_registry.h:107
std::atomic< qint64 > totalMs
Definition metrics_registry.h:108