diff --git a/level_zero/api/tools/zet_metric.cpp b/level_zero/api/tools/zet_metric.cpp index 78d982cdfc..1d5406805f 100644 --- a/level_zero/api/tools/zet_metric.cpp +++ b/level_zero/api/tools/zet_metric.cpp @@ -26,9 +26,17 @@ __zedllexport ze_result_t __zecall zetMetricGroupGetProperties( zet_metric_group_handle_t hMetricGroup, zet_metric_group_properties_t *pProperties) { + return L0::MetricGroup::fromHandle(hMetricGroup)->getProperties(pProperties); } +__zedllexport ze_result_t __zecall +zetMetricGroupGetPropertiesExt( + zet_metric_group_handle_t hMetricGroup, + zet_metric_group_properties_ext_t *pProperties) { + return L0::MetricGroup::fromHandle(hMetricGroup)->getPropertiesExt(pProperties); +} + __zedllexport ze_result_t __zecall zetMetricGet( zet_metric_group_handle_t hMetricGroup, @@ -44,6 +52,13 @@ zetMetricGetProperties( return L0::Metric::fromHandle(hMetric)->getProperties(pProperties); } +__zedllexport ze_result_t __zecall +zetMetricGetPropertiesExt( + zet_metric_handle_t hMetric, + zet_metric_properties_ext_t *pProperties) { + return L0::Metric::fromHandle(hMetric)->getPropertiesExt(pProperties); +} + __zedllexport ze_result_t __zecall zetMetricGroupCalculateMetricValues( zet_metric_group_handle_t hMetricGroup, diff --git a/level_zero/tools/source/metrics/metric.h b/level_zero/tools/source/metrics/metric.h index 8d6c48955c..66eec6aa5e 100644 --- a/level_zero/tools/source/metrics/metric.h +++ b/level_zero/tools/source/metrics/metric.h @@ -63,8 +63,9 @@ struct Metric : _zet_metric_handle_t { virtual ~Metric() = default; virtual ze_result_t getProperties(zet_metric_properties_t *pProperties) = 0; + virtual ze_result_t getPropertiesExt(zet_metric_properties_ext_t *pProperties) = 0; - static Metric *create(zet_metric_properties_t &properties); + static Metric *create(zet_metric_properties_ext_t &properties); static Metric *fromHandle(zet_metric_handle_t handle) { return static_cast(handle); } inline zet_metric_handle_t toHandle() { return this; } }; @@ -73,19 +74,20 @@ struct MetricGroup : _zet_metric_group_handle_t { virtual ~MetricGroup() = default; virtual ze_result_t getProperties(zet_metric_group_properties_t *pProperties) = 0; + virtual ze_result_t getPropertiesExt(zet_metric_group_properties_ext_t *pProperties) = 0; virtual ze_result_t getMetric(uint32_t *pCount, zet_metric_handle_t *phMetrics) = 0; virtual ze_result_t calculateMetricValues(size_t rawDataSize, const uint8_t *pRawData, uint32_t *pMetricValueCount, zet_typed_value_t *pMetricValues) = 0; - static MetricGroup *create(zet_metric_group_properties_t &properties, + static MetricGroup *create(zet_metric_group_properties_ext_t &properties, MetricsDiscovery::IMetricSet_1_5 &metricSet, MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup, const std::vector &metrics); static MetricGroup *fromHandle(zet_metric_group_handle_t handle) { return static_cast(handle); } - static zet_metric_group_properties_t getProperties(const zet_metric_group_handle_t handle); + static zet_metric_group_properties_ext_t getProperties(const zet_metric_group_handle_t handle); zet_metric_group_handle_t toHandle() { return this; } diff --git a/level_zero/tools/source/metrics/metric_enumeration_imp.cpp b/level_zero/tools/source/metrics/metric_enumeration_imp.cpp index fb39c4f295..9108370c8a 100644 --- a/level_zero/tools/source/metrics/metric_enumeration_imp.cpp +++ b/level_zero/tools/source/metrics/metric_enumeration_imp.cpp @@ -194,8 +194,8 @@ MetricEnumeration::cacheMetricGroup(MetricsDiscovery::IMetricSet_1_5 &metricSet, // Obtain params once again - updated after SetApiFiltering pMetricSetParams = metricSet.GetParams(); - zet_metric_group_properties_t properties = {}; - properties.version = ZET_METRIC_GROUP_PROPERTIES_VERSION_CURRENT; + zet_metric_group_properties_ext_t properties = {}; + properties.stype = ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES; snprintf(properties.name, sizeof(properties.name), "%s", pMetricSetParams->SymbolName); // To always have null-terminated string snprintf(properties.description, sizeof(properties.description), "%s", @@ -235,8 +235,8 @@ ze_result_t MetricEnumeration::createMetrics(MetricsDiscovery::IMetricSet_1_5 &m MetricsDiscovery::TMetricParams_1_0 *pSourceMetricParams = pSourceMetric->GetParams(); DEBUG_BREAK_IF(pSourceMetricParams == nullptr); - zet_metric_properties_t properties = {}; - properties.version = ZET_METRIC_PROPERTIES_VERSION_CURRENT; + zet_metric_properties_ext_t properties = {}; + properties.stype = ZET_STRUCTURE_TYPE_METRIC_PROPERTIES; snprintf(properties.name, sizeof(properties.name), "%s", pSourceMetricParams->SymbolName); // To always have a null-terminated string snprintf(properties.description, sizeof(properties.description), "%s", @@ -264,8 +264,8 @@ ze_result_t MetricEnumeration::createMetrics(MetricsDiscovery::IMetricSet_1_5 &m pSourceInformation->GetParams(); DEBUG_BREAK_IF(pSourceInformationParams == nullptr); - zet_metric_properties_t properties; - properties.version = ZET_METRIC_PROPERTIES_VERSION_CURRENT; + zet_metric_properties_ext_t properties = {}; + properties.stype = ZET_STRUCTURE_TYPE_METRIC_PROPERTIES; snprintf(properties.name, sizeof(properties.name), "%s", pSourceInformationParams->SymbolName); // To always have a null-terminated string snprintf(properties.description, sizeof(properties.description), "%s", @@ -378,16 +378,32 @@ MetricGroupImp ::~MetricGroupImp() { }; ze_result_t MetricGroupImp::getProperties(zet_metric_group_properties_t *pProperties) { + + pProperties->version = zet_metric_group_properties_version_t::ZET_METRIC_GROUP_PROPERTIES_VERSION_CURRENT; + pProperties->domain = properties.domain; + pProperties->maxCommandQueueOrdinal = 0xFFFFFFFF; + pProperties->metricCount = properties.metricCount; + pProperties->samplingType = static_cast(properties.samplingType); + + memcpy(pProperties->name, + properties.name, sizeof(pProperties->name)); + memcpy(pProperties->description, + properties.description, sizeof(pProperties->description)); + + return ZE_RESULT_SUCCESS; +} + +ze_result_t MetricGroupImp::getPropertiesExt(zet_metric_group_properties_ext_t *pProperties) { copyProperties(properties, *pProperties); return ZE_RESULT_SUCCESS; } -zet_metric_group_properties_t MetricGroup::getProperties(const zet_metric_group_handle_t handle) { +zet_metric_group_properties_ext_t MetricGroup::getProperties(const zet_metric_group_handle_t handle) { auto metricGroup = MetricGroup::fromHandle(handle); UNRECOVERABLE_IF(!metricGroup); - zet_metric_group_properties_t properties = {ZET_METRIC_GROUP_PROPERTIES_VERSION_CURRENT}; - metricGroup->getProperties(&properties); + zet_metric_group_properties_ext_t properties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES}; + metricGroup->getPropertiesExt(&properties); return properties; } @@ -425,12 +441,12 @@ bool MetricGroupImp::deactivate() { return result; } -uint32_t MetricGroupImp::getApiMask(const zet_metric_group_sampling_type_t samplingType) { +uint32_t MetricGroupImp::getApiMask(const zet_metric_group_sampling_type_flags_t samplingType) { switch (samplingType) { - case ZET_METRIC_GROUP_SAMPLING_TYPE_TIME_BASED: + case ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_TIME_BASED: return MetricsDiscovery::API_TYPE_IOSTREAM; - case ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED: + case ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED: return MetricsDiscovery::API_TYPE_OCL | MetricsDiscovery::API_TYPE_OGL4_X; default: DEBUG_BREAK_IF(true); @@ -541,7 +557,7 @@ bool MetricGroupImp::getCalculatedMetricValues(const size_t rawDataSize, const u return result; } -ze_result_t MetricGroupImp::initialize(const zet_metric_group_properties_t &sourceProperties, +ze_result_t MetricGroupImp::initialize(const zet_metric_group_properties_ext_t &sourceProperties, MetricsDiscovery::IMetricSet_1_5 &metricSet, MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup, const std::vector &groupMetrics) { @@ -560,9 +576,8 @@ uint32_t MetricGroupImp::getRawReportSize() { : pMetricSetParams->QueryReportSize; } -void MetricGroupImp::copyProperties(const zet_metric_group_properties_t &source, - zet_metric_group_properties_t &destination) { - DEBUG_BREAK_IF(source.version < destination.version); +void MetricGroupImp::copyProperties(const zet_metric_group_properties_ext_t &source, + zet_metric_group_properties_ext_t &destination) { destination = source; memcpy_s(destination.name, sizeof(destination.name), source.name, sizeof(destination.name)); @@ -605,18 +620,32 @@ void MetricGroupImp::copyValue(const MetricsDiscovery::TTypedValue_1_0 &source, } ze_result_t MetricImp::getProperties(zet_metric_properties_t *pProperties) { + + pProperties->version = ZET_METRIC_PROPERTIES_VERSION_CURRENT; + pProperties->tierNumber = properties.tierNumber; + pProperties->metricType = properties.metricType; + pProperties->resultType = properties.resultType; + + memcpy(pProperties->name, properties.name, sizeof(pProperties->name)); + memcpy(pProperties->description, properties.description, sizeof(pProperties->description)); + memcpy(pProperties->component, properties.component, sizeof(pProperties->component)); + memcpy(pProperties->resultUnits, properties.resultUnits, sizeof(pProperties->resultUnits)); + + return ZE_RESULT_SUCCESS; +} + +ze_result_t MetricImp::getPropertiesExt(zet_metric_properties_ext_t *pProperties) { copyProperties(properties, *pProperties); return ZE_RESULT_SUCCESS; } -ze_result_t MetricImp::initialize(const zet_metric_properties_t &sourceProperties) { +ze_result_t MetricImp::initialize(const zet_metric_properties_ext_t &sourceProperties) { copyProperties(sourceProperties, properties); return ZE_RESULT_SUCCESS; } -void MetricImp::copyProperties(const zet_metric_properties_t &source, - zet_metric_properties_t &destination) { - DEBUG_BREAK_IF(source.version < destination.version); +void MetricImp::copyProperties(const zet_metric_properties_ext_t &source, + zet_metric_properties_ext_t &destination) { destination = source; memcpy_s(destination.name, sizeof(destination.name), source.name, sizeof(destination.name)); @@ -628,7 +657,7 @@ void MetricImp::copyProperties(const zet_metric_properties_t &source, source.resultUnits, sizeof(destination.resultUnits)); } -MetricGroup *MetricGroup::create(zet_metric_group_properties_t &properties, +MetricGroup *MetricGroup::create(zet_metric_group_properties_ext_t &properties, MetricsDiscovery::IMetricSet_1_5 &metricSet, MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup, const std::vector &metrics) { @@ -638,7 +667,7 @@ MetricGroup *MetricGroup::create(zet_metric_group_properties_t &properties, return pMetricGroup; } -Metric *Metric::create(zet_metric_properties_t &properties) { +Metric *Metric::create(zet_metric_properties_ext_t &properties) { auto pMetric = new MetricImp(); UNRECOVERABLE_IF(pMetric == nullptr); pMetric->initialize(properties); diff --git a/level_zero/tools/source/metrics/metric_enumeration_imp.h b/level_zero/tools/source/metrics/metric_enumeration_imp.h index cc57feef8f..27b8236c8c 100644 --- a/level_zero/tools/source/metrics/metric_enumeration_imp.h +++ b/level_zero/tools/source/metrics/metric_enumeration_imp.h @@ -73,12 +73,13 @@ struct MetricGroupImp : MetricGroup { ~MetricGroupImp() override; ze_result_t getProperties(zet_metric_group_properties_t *pProperties) override; + ze_result_t getPropertiesExt(zet_metric_group_properties_ext_t *pProperties) override; ze_result_t getMetric(uint32_t *pCount, zet_metric_handle_t *phMetrics) override; ze_result_t calculateMetricValues(size_t rawDataSize, const uint8_t *pRawData, uint32_t *pMetricValueCount, zet_typed_value_t *pCalculatedData) override; - ze_result_t initialize(const zet_metric_group_properties_t &sourceProperties, + ze_result_t initialize(const zet_metric_group_properties_ext_t &sourceProperties, MetricsDiscovery::IMetricSet_1_5 &metricSet, MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup, const std::vector &groupMetrics); @@ -88,7 +89,7 @@ struct MetricGroupImp : MetricGroup { bool activate() override; bool deactivate() override; - static uint32_t getApiMask(const zet_metric_group_sampling_type_t samplingType); + static uint32_t getApiMask(const zet_metric_group_sampling_type_flags_t samplingType); // Time based measurements. ze_result_t openIoStream(uint32_t &timerPeriodNs, uint32_t &oaBufferSize) override; @@ -97,9 +98,8 @@ struct MetricGroupImp : MetricGroup { ze_result_t closeIoStream() override; protected: - void copyProperties(const zet_metric_group_properties_t &source, - zet_metric_group_properties_t &destination); - + void copyProperties(const zet_metric_group_properties_ext_t &source, + zet_metric_group_properties_ext_t &destination); void copyValue(const MetricsDiscovery::TTypedValue_1_0 &source, zet_typed_value_t &destination) const; @@ -112,8 +112,8 @@ struct MetricGroupImp : MetricGroup { // Cached metrics. std::vector metrics; - zet_metric_group_properties_t properties{ - ZET_METRIC_GROUP_PROPERTIES_VERSION_CURRENT, + zet_metric_group_properties_ext_t properties{ + ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, }; MetricsDiscovery::IMetricSet_1_5 *pReferenceMetricSet = nullptr; MetricsDiscovery::IConcurrentGroup_1_5 *pReferenceConcurrentGroup = nullptr; @@ -123,16 +123,16 @@ struct MetricImp : Metric { ~MetricImp() override{}; ze_result_t getProperties(zet_metric_properties_t *pProperties) override; + ze_result_t getPropertiesExt(zet_metric_properties_ext_t *pProperties) override; - ze_result_t initialize(const zet_metric_properties_t &sourceProperties); + ze_result_t initialize(const zet_metric_properties_ext_t &sourceProperties); protected: - void copyProperties(const zet_metric_properties_t &source, - zet_metric_properties_t &destination); + void copyProperties(const zet_metric_properties_ext_t &source, + zet_metric_properties_ext_t &destination); - zet_metric_properties_t properties{ - ZET_METRIC_PROPERTIES_VERSION_CURRENT, - }; + zet_metric_properties_ext_t properties{ + ZET_STRUCTURE_TYPE_METRIC_PROPERTIES}; }; } // namespace L0 diff --git a/level_zero/tools/source/metrics/metric_query_imp.cpp b/level_zero/tools/source/metrics/metric_query_imp.cpp index 5b63d4968b..726696ac7d 100644 --- a/level_zero/tools/source/metrics/metric_query_imp.cpp +++ b/level_zero/tools/source/metrics/metric_query_imp.cpp @@ -303,7 +303,7 @@ bool MetricsLibrary::getGpuCommands(CommandList &commandList, ConfigurationHandle_1_0 MetricsLibrary::createConfiguration(const zet_metric_group_handle_t metricGroupHandle, - const zet_metric_group_properties_t properties) { + const zet_metric_group_properties_ext_t properties) { // Metric group internal data. auto metricGroup = MetricGroup::fromHandle(metricGroupHandle); auto metricGroupDummy = ConfigurationHandle_1_0{}; diff --git a/level_zero/tools/source/metrics/metric_query_imp.h b/level_zero/tools/source/metrics/metric_query_imp.h index 713ea6c7cc..06b18a7729 100644 --- a/level_zero/tools/source/metrics/metric_query_imp.h +++ b/level_zero/tools/source/metrics/metric_query_imp.h @@ -74,7 +74,7 @@ struct MetricsLibrary { virtual bool getContextData(Device &device, ContextCreateData_1_0 &contextData); ConfigurationHandle_1_0 createConfiguration(const zet_metric_group_handle_t metricGroup, - const zet_metric_group_properties_t properties); + const zet_metric_group_properties_ext_t properties); ConfigurationHandle_1_0 addConfiguration(const zet_metric_group_handle_t metricGroup); ClientGen getGenType(const uint32_t gen) const; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.h b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.h index ac409ff5dd..9479d7170a 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.h +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.h @@ -137,6 +137,7 @@ struct Mock : public MetricGroup { MOCK_METHOD(ze_result_t, getMetric, (uint32_t *, zet_metric_handle_t *), (override)); MOCK_METHOD(ze_result_t, calculateMetricValues, (size_t, const uint8_t *, uint32_t *, zet_typed_value_t *), (override)); MOCK_METHOD(ze_result_t, getProperties, (zet_metric_group_properties_t * properties), (override)); + MOCK_METHOD(ze_result_t, getPropertiesExt, (zet_metric_group_properties_ext_t * properties), (override)); MOCK_METHOD(uint32_t, getRawReportSize, (), (override)); MOCK_METHOD(bool, activate, (), (override)); MOCK_METHOD(bool, deactivate, (), (override)); diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_enumeration.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_enumeration.cpp index cdd4f3a811..aee7b8edb5 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_enumeration.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_enumeration.cpp @@ -704,6 +704,105 @@ TEST_F(MetricEnumerationTest, givenValidArgumentsWhenZetMetricGetPropertiestIsCa EXPECT_EQ(metricProperties.resultType, ZET_VALUE_TYPE_UINT64); } +TEST_F(MetricEnumerationTest, givenValidArgumentsWhenZetMetricGetPropertiestIsCalledThenReturnSuccessExt) { + + // Metrics Discovery device. + metricsDeviceParams.ConcurrentGroupsCount = 1; + + // Metrics Discovery concurrent group. + Mock metricsConcurrentGroup; + TConcurrentGroupParams_1_0 metricsConcurrentGroupParams = {}; + metricsConcurrentGroupParams.MetricSetsCount = 1; + metricsConcurrentGroupParams.SymbolName = "OA"; + metricsConcurrentGroupParams.Description = "OA description"; + + // Metrics Discovery:: metric set. + Mock metricsSet; + MetricsDiscovery::TMetricSetParams_1_4 metricsSetParams = {}; + metricsSetParams.ApiMask = MetricsDiscovery::API_TYPE_OCL; + metricsSetParams.MetricsCount = 0; + metricsSetParams.SymbolName = "Metric set name"; + metricsSetParams.ShortName = "Metric set description"; + metricsSetParams.MetricsCount = 1; + + // Metrics Discovery:: metric. + Mock metric; + TMetricParams_1_0 metricParams = {}; + metricParams.SymbolName = "Metric symbol name"; + metricParams.ShortName = "Metric short name"; + metricParams.LongName = "Metric long name"; + metricParams.ResultType = MetricsDiscovery::TMetricResultType::RESULT_UINT64; + metricParams.MetricType = MetricsDiscovery::TMetricType::METRIC_TYPE_RATIO; + zet_metric_properties_ext_t metricProperties = {}; + + // One api: metric group handle. + zet_metric_group_handle_t metricGroupHandle = {}; + + EXPECT_CALL(*mockMetricEnumeration, loadMetricsDiscovery()) + .Times(0); + + EXPECT_CALL(*mockMetricEnumeration->g_mockApi, MockOpenMetricsDevice(_)) + .Times(1) + .WillOnce(DoAll(::testing::SetArgPointee<0>(&metricsDevice), Return(TCompletionCode::CC_OK))); + + EXPECT_CALL(*mockMetricEnumeration->g_mockApi, MockCloseMetricsDevice(_)) + .Times(1) + .WillOnce(Return(TCompletionCode::CC_OK)); + + EXPECT_CALL(metricsDevice, GetParams()) + .WillRepeatedly(Return(&metricsDeviceParams)); + + EXPECT_CALL(metricsDevice, GetConcurrentGroup(_)) + .Times(1) + .WillOnce(Return(&metricsConcurrentGroup)); + + EXPECT_CALL(metricsConcurrentGroup, GetParams()) + .Times(1) + .WillRepeatedly(Return(&metricsConcurrentGroupParams)); + + EXPECT_CALL(metricsConcurrentGroup, GetMetricSet(_)) + .WillRepeatedly(Return(&metricsSet)); + + EXPECT_CALL(metricsSet, GetParams()) + .WillRepeatedly(Return(&metricsSetParams)); + + EXPECT_CALL(metricsSet, GetMetric(_)) + .Times(1) + .WillOnce(Return(&metric)); + + EXPECT_CALL(metric, GetParams()) + .Times(1) + .WillOnce(Return(&metricParams)); + + EXPECT_CALL(metricsSet, SetApiFiltering(_)) + .WillRepeatedly(Return(TCompletionCode::CC_OK)); + + // Metric group count. + uint32_t metricGroupCount = 0; + EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, nullptr), ZE_RESULT_SUCCESS); + EXPECT_EQ(metricGroupCount, 1u); + + // Metric group handle. + EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS); + EXPECT_EQ(metricGroupCount, 1u); + EXPECT_NE(metricGroupHandle, nullptr); + + // Obtain metric. + uint32_t metricCount = 0; + zet_metric_handle_t metricHandle = {}; + EXPECT_EQ(zetMetricGet(metricGroupHandle, &metricCount, nullptr), ZE_RESULT_SUCCESS); + EXPECT_EQ(metricCount, 1u); + EXPECT_EQ(zetMetricGet(metricGroupHandle, &metricCount, &metricHandle), ZE_RESULT_SUCCESS); + EXPECT_NE(metricHandle, nullptr); + + // Obtain metric params. + EXPECT_EQ(zetMetricGetPropertiesExt(metricHandle, &metricProperties), ZE_RESULT_SUCCESS); + EXPECT_EQ(strcmp(metricProperties.name, metricParams.SymbolName), 0); + EXPECT_EQ(strcmp(metricProperties.description, metricParams.LongName), 0); + EXPECT_EQ(metricProperties.metricType, ZET_METRIC_TYPE_RATIO); + EXPECT_EQ(metricProperties.resultType, ZET_VALUE_TYPE_UINT64); +} + TEST_F(MetricEnumerationTest, givenInvalidArgumentsWhenZetDeviceActivateMetricGroupsIsCalledThenReturnsFail) { // Metrics Discovery device. diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool.cpp index a7b09eadc4..843d2ee907 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool.cpp @@ -46,7 +46,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryPoolCreateIsC zet_device_handle_t metricDevice = device->toHandle(); Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_pool_handle_t poolHandle = {}; @@ -73,7 +73,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryPoolCreateIsC EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -107,7 +107,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectMetricGroupTypeWhenZetMetricQueryPoolC zet_device_handle_t metricDevice = device->toHandle(); Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_TIME_BASED; zet_metric_query_pool_handle_t poolHandle = {}; @@ -132,7 +132,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectMetricGroupTypeWhenZetMetricQueryPoolC EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -160,7 +160,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryCreateIsCalle zet_device_handle_t metricDevice = device->toHandle(); Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -188,7 +188,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryCreateIsCalle EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -230,7 +230,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectSlotIndexWhenZetMetricQueryCreateIsCal zet_device_handle_t metricDevice = device->toHandle(); Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -258,7 +258,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectSlotIndexWhenZetMetricQueryCreateIsCal EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -299,7 +299,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryResetIsCalled zet_device_handle_t metricDevice = device->toHandle(); Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -327,7 +327,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryResetIsCalled EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -372,7 +372,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetCommandListAppendMetri zet_device_handle_t metricDevice = device->toHandle(); Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -400,7 +400,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetCommandListAppendMetri EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -448,7 +448,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ zet_command_list_handle_t commandListHandle = commandList->toHandle(); Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -479,7 +479,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -620,7 +620,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetCommandListAppendMetri eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -651,7 +651,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetCommandListAppendMetri EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -731,7 +731,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -762,7 +762,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -847,7 +847,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -878,7 +878,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -963,7 +963,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetMetricQueryGetDataIsCa eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -994,7 +994,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetMetricQueryGetDataIsCa EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -1079,7 +1079,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetMetricQueryGetDataIsCa eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -1110,7 +1110,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetMetricQueryGetDataIsCa EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -1195,7 +1195,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -1228,7 +1228,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -1330,7 +1330,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; Mock metricGroup; - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; zet_metric_query_handle_t queryHandle = {}; @@ -1363,7 +1363,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall EXPECT_CALL(*mockMetricsLibrary, load()) .Times(0); - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer.cpp index ec1191c57c..7469c0ae7f 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer.cpp @@ -37,11 +37,11 @@ TEST_F(MetricStreamerTest, givenInvalidMetricGroupTypeWhenZetMetricStreamerOpenI // One api: metric group handle. Mock metricGroup; zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); @@ -65,11 +65,11 @@ TEST_F(MetricStreamerTest, zetMetricTracerOpen_InvalidMetricGroupType_ReturnsFai // One api: metric group handle. Mock metricGroup; zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); - zet_metric_group_properties_t metricGroupProperties = {}; + zet_metric_group_properties_ext_t metricGroupProperties = {}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_EVENT_BASED; - EXPECT_CALL(metricGroup, getProperties(_)) + EXPECT_CALL(metricGroup, getPropertiesExt(_)) .Times(1) .WillOnce(DoAll(::testing::SetArgPointee<0>(metricGroupProperties), Return(ZE_RESULT_SUCCESS))); diff --git a/third_party/level_zero/zet_api_ext.h b/third_party/level_zero/zet_api_ext.h index 1e57b4534f..4962859b8c 100644 --- a/third_party/level_zero/zet_api_ext.h +++ b/third_party/level_zero/zet_api_ext.h @@ -245,6 +245,85 @@ zetCommandListAppendMetricQueryEndExt( ///< on before launching ); +/////////////////////////////////////////////////////////////////////////////// +/// @brief Metric group sampling type +typedef uint32_t zet_metric_group_sampling_type_flags_t; +typedef enum _zet_metric_group_sampling_type_flag_t { + ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED = ZE_BIT(0), ///< Event based sampling + ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_TIME_BASED = ZE_BIT(1), ///< Time based sampling + ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_FORCE_UINT32 = 0x7fffffff + +} zet_metric_group_sampling_type_flag_t; + +/////////////////////////////////////////////////////////////////////////////// +/// @brief Metric group properties queried using ::zetMetricGroupGetProperties +typedef struct _zet_metric_group_properties_ext_t { + zet_structure_type_t stype; ///< [in] type of this structure + void *pNext; ///< [in,out][optional] pointer to extension-specific structure + char name[ZET_MAX_METRIC_GROUP_NAME]; ///< [out] metric group name + char description[ZET_MAX_METRIC_GROUP_DESCRIPTION]; ///< [out] metric group description + zet_metric_group_sampling_type_flags_t samplingType; ///< [out] metric group sampling type. + ///< returns a combination of ::zet_metric_group_sampling_type_flag_t. + uint32_t domain; ///< [out] metric group domain number. Cannot use simultaneous metric + ///< groups from different domains. + uint32_t metricCount; ///< [out] metric count belonging to this group + +} zet_metric_group_properties_ext_t; + +/// @brief Metric properties queried using ::zetMetricGetProperties +typedef struct _zet_metric_properties_ext_t { + zet_structure_type_t stype; ///< [in] type of this structure + void *pNext; ///< [in,out][optional] pointer to extension-specific structure + char name[ZET_MAX_METRIC_NAME]; ///< [out] metric name + char description[ZET_MAX_METRIC_DESCRIPTION]; ///< [out] metric description + char component[ZET_MAX_METRIC_COMPONENT]; ///< [out] metric component + uint32_t tierNumber; ///< [out] number of tier + zet_metric_type_t metricType; ///< [out] metric type + zet_value_type_t resultType; ///< [out] metric result type + char resultUnits[ZET_MAX_METRIC_RESULT_UNITS]; ///< [out] metric result units + +} zet_metric_properties_ext_t; + +/////////////////////////////////////////////////////////////////////////////// +/// @brief Retrieves attributes of a metric group. +/// +/// @details +/// - The application may call this function from simultaneous threads. +/// +/// @returns +/// - ::ZE_RESULT_SUCCESS +/// - ::ZE_RESULT_ERROR_UNINITIALIZED +/// - ::ZE_RESULT_ERROR_DEVICE_LOST +/// - ::ZE_RESULT_ERROR_INVALID_NULL_HANDLE +/// + `nullptr == hMetricGroup` +/// - ::ZE_RESULT_ERROR_INVALID_NULL_POINTER +/// + `nullptr == pProperties` +ZE_APIEXPORT ze_result_t ZE_APICALL +zetMetricGroupGetPropertiesExt( + zet_metric_group_handle_t hMetricGroup, ///< [in] handle of the metric group + zet_metric_group_properties_ext_t *pProperties ///< [in,out] metric group properties +); + +/////////////////////////////////////////////////////////////////////////////// +/// @brief Retrieves attributes of a metric. +/// +/// @details +/// - The application may call this function from simultaneous threads. +/// +/// @returns +/// - ::ZE_RESULT_SUCCESS +/// - ::ZE_RESULT_ERROR_UNINITIALIZED +/// - ::ZE_RESULT_ERROR_DEVICE_LOST +/// - ::ZE_RESULT_ERROR_INVALID_NULL_HANDLE +/// + `nullptr == hMetric` +/// - ::ZE_RESULT_ERROR_INVALID_NULL_POINTER +/// + `nullptr == pProperties` +ZE_APIEXPORT ze_result_t ZE_APICALL +zetMetricGetPropertiesExt( + zet_metric_handle_t hMetric, ///< [in] handle of the metric + zet_metric_properties_ext_t *pProperties ///< [in,out] metric properties +); + #if defined(__cplusplus) } // extern "C" #endif