12#ifndef O2_FRAMEWORK_DEVICEMETRICSHELPERS_H_
13#define O2_FRAMEWORK_DEVICEMETRICSHELPERS_H_
31concept DeviceMetricValue = std::same_as<int, T> || std::same_as<float, T> || std::same_as<uint64_t, T> || std::same_as<int8_t, T>;
61 template <std::same_as<
int> T>
67 template <std::same_as<
float> T>
73 template <std::same_as<u
int64_t> T>
79 template <std::same_as<
int8_t> T>
85 template <std::same_as<
int> T>
91 template <std::same_as<
float> T>
97 template <std::same_as<u
int64_t> T>
100 return metrics.uint64Timestamps;
103 template <std::same_as<
int8_t> T>
109 template <std::same_as<
int> T>
115 template <std::same_as<
float> T>
121 template <std::same_as<u
int64_t> T>
127 template <std::same_as<
int8_t> T>
135 metrics.minDomain[metricIndex] = std::min(
metrics.minDomain[metricIndex], timestamp);
136 metrics.maxDomain[metricIndex] = std::max(
metrics.maxDomain[metricIndex], timestamp);
139 metrics.changed.at(metricIndex) =
true;
142 template <DeviceMetricNumericValue T>
149 auto& store = getMetricsStore<T>(
metrics);
150 auto& timestamps = getTimestampsStore<T>(
metrics);
161 template <DeviceMetricNumericValue T>
168 auto& metricInfo =
metrics.metrics[metricIndex];
169 if (newMetricsCallback !=
nullptr) {
170 newMetricsCallback(
name, metricInfo, 0, metricIndex);
176 template <DeviceMetricNumericValue T>
182 size_t metricIndex = bookNumericMetric<T>(
metrics,
name, newMetricsCallback);
183 return getNumericMetricCursor<T>(metricIndex);
GLuint const GLchar * name
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLsizei const GLfloat * value
GLint GLint GLsizei GLint GLenum GLenum type
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
Defining PrimaryVertex explicitly as messageable.
static auto & getMetricsStore(DeviceMetricsInfo &metrics)
static bool parseMetric(std::string_view const s, ParsedMetricMatch &results)
Helper function to parse a metric string.
static auto updateNumericInfo(DeviceMetricsInfo &metrics, size_t metricIndex, float value, size_t timestamp)
static auto & getTimestampsStore(DeviceMetricsInfo &metrics)
static bool processMetric(ParsedMetricMatch &results, DeviceMetricsInfo &info, NewMetricCallback newMetricCallback=nullptr)
static size_t bookMetricInfo(DeviceMetricsInfo &metrics, char const *name, MetricType type)
static size_t metricIdxByName(std::string_view const name, const DeviceMetricsInfo &info)
static auto getMetricType() -> MetricType
static size_t bookNumericMetric(DeviceMetricsInfo &metrics, char const *name, NewMetricCallback newMetricsCallback=nullptr)
static std::function< void(DeviceMetricsInfo &, T value, size_t timestamp)> createNumericMetric(DeviceMetricsInfo &metrics, char const *name, NewMetricCallback newMetricsCallback=nullptr)
std::function< void(std::string const &, MetricInfo const &, int value, size_t metricIndex)> NewMetricCallback
static auto getNumericMetricCursor(size_t metricIndex)
Temporary struct to hold a metric after it has been parsed.