blob: 1d35696d48ee2c07eb143b6aa0d8ee82dcfab374 [file]
// Copyright 2026 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef IREE_HAL_PROFILE_METRICS_H_
#define IREE_HAL_PROFILE_METRICS_H_
#include <stdbool.h>
#include <stdint.h>
#include "iree/base/api.h"
#include "iree/hal/profile_schema.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
// Built-in metric ids occupy the low half of the metric id space. Producers may
// use ids at or above this value for source-specific metrics whose meaning is
// carried entirely by descriptor records in the profile bundle.
#define IREE_HAL_PROFILE_METRIC_ID_PRODUCER_BASE (UINT64_C(1) << 63)
// Stable identifiers for HAL built-in device metrics.
typedef uint64_t iree_hal_profile_builtin_metric_id_t;
enum iree_hal_profile_builtin_metric_id_e {
IREE_HAL_PROFILE_BUILTIN_METRIC_ID_NONE = 0u,
#define IREE_HAL_PROFILE_BUILTIN_METRIC(enum_name, metric_id, name, unit, \
value_kind, semantic, plot_hint, \
description) \
IREE_HAL_PROFILE_BUILTIN_METRIC_ID_##enum_name = (metric_id),
#include "iree/hal/profile_metrics.inc"
#undef IREE_HAL_PROFILE_BUILTIN_METRIC
};
// Process-local descriptor for one built-in device metric.
typedef struct iree_hal_profile_metric_descriptor_t {
// Stable or source-specific metric identifier.
uint64_t metric_id;
// Display and scaling unit for this metric.
iree_hal_profile_metric_unit_t unit;
// Storage interpretation for sampled value_bits.
iree_hal_profile_metric_value_kind_t value_kind;
// Sampling semantic for this metric.
iree_hal_profile_metric_semantic_t semantic;
// Preferred visualization shape for this metric.
iree_hal_profile_metric_plot_hint_t plot_hint;
// Stable metric name.
iree_string_view_t name;
// Human-readable metric description.
iree_string_view_t description;
} iree_hal_profile_metric_descriptor_t;
// Returns true when |metric_id| is in the built-in metric id range.
static inline bool iree_hal_profile_metric_id_is_builtin(uint64_t metric_id) {
return metric_id != 0 && metric_id < IREE_HAL_PROFILE_METRIC_ID_PRODUCER_BASE;
}
// Returns true when |metric_id| is in the producer-specific metric id range.
static inline bool iree_hal_profile_metric_id_is_producer_specific(
uint64_t metric_id) {
return metric_id >= IREE_HAL_PROFILE_METRIC_ID_PRODUCER_BASE;
}
// Returns the number of built-in metric descriptors.
IREE_API_EXPORT iree_host_size_t
iree_hal_profile_builtin_metric_descriptor_count(void);
// Returns the built-in metric descriptor at |index|, or NULL when out of range.
IREE_API_EXPORT const iree_hal_profile_metric_descriptor_t*
iree_hal_profile_builtin_metric_descriptor_at(iree_host_size_t index);
// Returns the built-in metric descriptor for |metric_id|, or NULL if unknown.
IREE_API_EXPORT const iree_hal_profile_metric_descriptor_t*
iree_hal_profile_builtin_metric_descriptor_lookup(uint64_t metric_id);
// Returns the built-in metric descriptor named |name|, or NULL if unknown.
IREE_API_EXPORT const iree_hal_profile_metric_descriptor_t*
iree_hal_profile_builtin_metric_descriptor_lookup_name(iree_string_view_t name);
// Returns the stable display name for |unit|.
IREE_API_EXPORT iree_string_view_t
iree_hal_profile_metric_unit_string(iree_hal_profile_metric_unit_t unit);
// Returns the stable display name for |value_kind|.
IREE_API_EXPORT iree_string_view_t iree_hal_profile_metric_value_kind_string(
iree_hal_profile_metric_value_kind_t value_kind);
// Returns the stable display name for |semantic|.
IREE_API_EXPORT iree_string_view_t iree_hal_profile_metric_semantic_string(
iree_hal_profile_metric_semantic_t semantic);
// Returns the stable display name for |plot_hint|.
IREE_API_EXPORT iree_string_view_t iree_hal_profile_metric_plot_hint_string(
iree_hal_profile_metric_plot_hint_t plot_hint);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // IREE_HAL_PROFILE_METRICS_H_