/* * Copyright (C) 2023-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "level_zero/tools/source/metrics/metric.h" #include "level_zero/tools/source/metrics/metric_multidevice_programmable.h" #include "level_zero/tools/source/metrics/metric_oa_enumeration_imp.h" #include namespace L0 { struct OaMetricProgrammableImp : public MetricProgrammable { OaMetricProgrammableImp() = default; ~OaMetricProgrammableImp() override = default; ze_result_t getProperties(zet_metric_programmable_exp_properties_t *pProperties) override; ze_result_t getParamInfo(uint32_t *pParameterCount, zet_metric_programmable_param_info_exp_t *pParameterInfo) override; ze_result_t getParamValueInfo(uint32_t parameterOrdinal, uint32_t *pValueInfoCount, zet_metric_programmable_param_value_info_exp_t *pValueInfo) override; ze_result_t createMetric(zet_metric_programmable_param_value_exp_t *pParameterValues, uint32_t parameterCount, const char name[ZET_MAX_METRIC_NAME], const char description[ZET_MAX_METRIC_DESCRIPTION], uint32_t *pMetricHandleCount, zet_metric_handle_t *phMetricHandles) override; void initialize(zet_metric_programmable_exp_properties_t &properties, MetricsDiscovery::IConcurrentGroup_1_13 &concurrentGroup, MetricsDiscovery::IMetricPrototype_1_13 &prototype, OaMetricSourceImp &metricSource); static MetricProgrammable *create(zet_metric_programmable_exp_properties_t &properties, MetricsDiscovery::IConcurrentGroup_1_13 &concurrentGroup, MetricsDiscovery::IMetricPrototype_1_13 &prototype, MetricSource &metricSource); protected: zet_metric_programmable_exp_properties_t properties{}; MetricsDiscovery::IConcurrentGroup_1_13 *pConcurrentGroup = nullptr; MetricsDiscovery::IMetricPrototype_1_13 *pPrototype = nullptr; MetricSource *metricSource = nullptr; ze_result_t copyMdapiValidValueToL0ValueInfo(zet_value_info_exp_t &l0Value, const MetricsDiscovery::TValidValue_1_13 &mdapiValue); ze_result_t copyL0ValueToMdapiTypedValue(MetricsDiscovery::TTypedValue_1_0 &mdapiValue, const zet_value_t &l0Value); }; struct OaMetricFromProgrammable : OaMetricImp, MetricCreated { ~OaMetricFromProgrammable() override {} OaMetricFromProgrammable(MetricSource &metricSource) : OaMetricImp(metricSource) {} ze_result_t destroy() override; static Metric *create(MetricSource &metricSource, zet_metric_properties_t &properties, MetricsDiscovery::IMetricPrototype_1_13 *pClonedPrototype, uint32_t domain, zet_metric_group_sampling_type_flags_t supportedSamplingTypes); MetricsDiscovery::IMetricPrototype_1_13 *pClonedPrototype = nullptr; uint32_t getDomain() { return domain; } zet_metric_group_sampling_type_flags_t getSupportedSamplingType() { return supportedSamplingTypes; } protected: uint32_t domain = 0; zet_metric_group_sampling_type_flags_t supportedSamplingTypes = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_FORCE_UINT32; }; struct OaMetricGroupUserDefined : OaMetricGroupImp { ~OaMetricGroupUserDefined() override; bool activate() override; bool deactivate() override; static MetricGroup *create(zet_metric_group_properties_t &properties, MetricsDiscovery::IMetricSet_1_13 &metricSet, MetricsDiscovery::IConcurrentGroup_1_13 &concurrentGroup, MetricSource &metricSource); ze_result_t addMetric(zet_metric_handle_t hMetric, size_t *errorStringSize, char *pErrorString) override; ze_result_t removeMetric(zet_metric_handle_t hMetric) override; ze_result_t close() override; ze_result_t destroy() override; protected: OaMetricGroupUserDefined(MetricSource &metricSource) : OaMetricGroupImp(metricSource) { isPredefined = false; } bool readyToActivate = false; bool isMetricSetOpened = false; bool isActivated = false; void removeMetrics(bool immutable, std::vector &removedMetricList); MetricsDiscovery::IMetricSet_1_13 *getMetricSet() { return static_cast(pReferenceMetricSet); } }; struct OaMultiDeviceMetricGroupUserDefined : OaMetricGroupImp { OaMultiDeviceMetricGroupUserDefined(MetricSource &metricSource) : OaMetricGroupImp(metricSource) { isMultiDevice = true; } static OaMultiDeviceMetricGroupUserDefined *create(MetricSource &metricSource, std::vector &subDeviceMetricGroups, std::vector &multiDeviceMetrics); ze_result_t metricGet(uint32_t *pCount, zet_metric_handle_t *phMetrics) override; ze_result_t addMetric(zet_metric_handle_t hMetric, size_t *errorStringSize, char *pErrorString) override; ze_result_t removeMetric(zet_metric_handle_t hMetric) override; ze_result_t close() override; ze_result_t destroy() override; private: std::unique_ptr createdMetricGroupManager = nullptr; std::vector multiDeviceMetrics{}; }; } // namespace L0