blob: e7973315cc1ab8bf048d47e7901fcd0ba8795b91 [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
#include "iree/hal/profile_metrics.h"
#include "iree/base/api.h"
//===----------------------------------------------------------------------===//
// Built-in metric registry
//===----------------------------------------------------------------------===//
static const iree_hal_profile_metric_descriptor_t
iree_hal_profile_builtin_metric_descriptors[] = {
#define IREE_HAL_PROFILE_BUILTIN_METRIC(enum_name, metric_id, name, unit, \
value_kind, semantic, plot_hint, \
description) \
{ \
(metric_id), (unit), (value_kind), (semantic), \
(plot_hint), IREE_SVL(name), IREE_SVL(description), \
},
#include "iree/hal/profile_metrics.inc"
#undef IREE_HAL_PROFILE_BUILTIN_METRIC
};
IREE_API_EXPORT iree_host_size_t
iree_hal_profile_builtin_metric_descriptor_count(void) {
return IREE_ARRAYSIZE(iree_hal_profile_builtin_metric_descriptors);
}
IREE_API_EXPORT const iree_hal_profile_metric_descriptor_t*
iree_hal_profile_builtin_metric_descriptor_at(iree_host_size_t index) {
if (index >= IREE_ARRAYSIZE(iree_hal_profile_builtin_metric_descriptors)) {
return NULL;
}
return &iree_hal_profile_builtin_metric_descriptors[index];
}
IREE_API_EXPORT const iree_hal_profile_metric_descriptor_t*
iree_hal_profile_builtin_metric_descriptor_lookup(uint64_t metric_id) {
for (iree_host_size_t i = 0;
i < IREE_ARRAYSIZE(iree_hal_profile_builtin_metric_descriptors); ++i) {
const iree_hal_profile_metric_descriptor_t* descriptor =
&iree_hal_profile_builtin_metric_descriptors[i];
if (descriptor->metric_id == metric_id) return descriptor;
}
return NULL;
}
IREE_API_EXPORT const iree_hal_profile_metric_descriptor_t*
iree_hal_profile_builtin_metric_descriptor_lookup_name(
iree_string_view_t name) {
for (iree_host_size_t i = 0;
i < IREE_ARRAYSIZE(iree_hal_profile_builtin_metric_descriptors); ++i) {
const iree_hal_profile_metric_descriptor_t* descriptor =
&iree_hal_profile_builtin_metric_descriptors[i];
if (iree_string_view_equal(descriptor->name, name)) return descriptor;
}
return NULL;
}
IREE_API_EXPORT iree_string_view_t
iree_hal_profile_metric_unit_string(iree_hal_profile_metric_unit_t unit) {
switch (unit) {
case IREE_HAL_PROFILE_METRIC_UNIT_NONE:
return IREE_SV("none");
case IREE_HAL_PROFILE_METRIC_UNIT_COUNT:
return IREE_SV("count");
case IREE_HAL_PROFILE_METRIC_UNIT_HERTZ:
return IREE_SV("hz");
case IREE_HAL_PROFILE_METRIC_UNIT_BYTES:
return IREE_SV("bytes");
case IREE_HAL_PROFILE_METRIC_UNIT_BYTES_PER_SECOND:
return IREE_SV("bytes_per_second");
case IREE_HAL_PROFILE_METRIC_UNIT_MILLIPERCENT:
return IREE_SV("millipercent");
case IREE_HAL_PROFILE_METRIC_UNIT_MILLIDEGREES_CELSIUS:
return IREE_SV("millidegrees_celsius");
case IREE_HAL_PROFILE_METRIC_UNIT_MICROWATTS:
return IREE_SV("microwatts");
case IREE_HAL_PROFILE_METRIC_UNIT_MICROJOULES:
return IREE_SV("microjoules");
case IREE_HAL_PROFILE_METRIC_UNIT_BITFIELD:
return IREE_SV("bitfield");
case IREE_HAL_PROFILE_METRIC_UNIT_ENUM:
return IREE_SV("enum");
default:
return iree_string_view_empty();
}
}
IREE_API_EXPORT iree_string_view_t iree_hal_profile_metric_value_kind_string(
iree_hal_profile_metric_value_kind_t value_kind) {
switch (value_kind) {
case IREE_HAL_PROFILE_METRIC_VALUE_KIND_NONE:
return IREE_SV("none");
case IREE_HAL_PROFILE_METRIC_VALUE_KIND_I64:
return IREE_SV("i64");
case IREE_HAL_PROFILE_METRIC_VALUE_KIND_U64:
return IREE_SV("u64");
case IREE_HAL_PROFILE_METRIC_VALUE_KIND_F64:
return IREE_SV("f64");
default:
return iree_string_view_empty();
}
}
IREE_API_EXPORT iree_string_view_t iree_hal_profile_metric_semantic_string(
iree_hal_profile_metric_semantic_t semantic) {
switch (semantic) {
case IREE_HAL_PROFILE_METRIC_SEMANTIC_NONE:
return IREE_SV("none");
case IREE_HAL_PROFILE_METRIC_SEMANTIC_INSTANT:
return IREE_SV("instant");
case IREE_HAL_PROFILE_METRIC_SEMANTIC_AVERAGE:
return IREE_SV("average");
case IREE_HAL_PROFILE_METRIC_SEMANTIC_CUMULATIVE:
return IREE_SV("cumulative");
case IREE_HAL_PROFILE_METRIC_SEMANTIC_DELTA:
return IREE_SV("delta");
case IREE_HAL_PROFILE_METRIC_SEMANTIC_STATE:
return IREE_SV("state");
default:
return iree_string_view_empty();
}
}
IREE_API_EXPORT iree_string_view_t iree_hal_profile_metric_plot_hint_string(
iree_hal_profile_metric_plot_hint_t plot_hint) {
switch (plot_hint) {
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_NONE:
return IREE_SV("none");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_NUMBER:
return IREE_SV("number");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_MEMORY:
return IREE_SV("memory");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_PERCENTAGE:
return IREE_SV("percentage");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_FREQUENCY:
return IREE_SV("frequency");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_TEMPERATURE:
return IREE_SV("temperature");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_POWER:
return IREE_SV("power");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_ENERGY:
return IREE_SV("energy");
case IREE_HAL_PROFILE_METRIC_PLOT_HINT_BANDWIDTH:
return IREE_SV("bandwidth");
default:
return iree_string_view_empty();
}
}