From 20e0b6f00513a9eb98d2a2b0452d1f95f80556c1 Mon Sep 17 00:00:00 2001 From: Joshua Santosh Ranjan Date: Fri, 1 Dec 2023 07:56:57 +0000 Subject: [PATCH] feature: add support for activateMetrics Related-To: NEO-9067 Signed-off-by: Joshua Santosh Ranjan --- level_zero/core/source/device/device_imp.cpp | 10 +- level_zero/tools/source/metrics/metric.cpp | 212 +++++++++++------- level_zero/tools/source/metrics/metric.h | 46 +++- .../metrics/metric_ip_sampling_source.cpp | 27 ++- .../metrics/metric_ip_sampling_source.h | 18 +- .../metrics/metric_ip_sampling_streamer.cpp | 11 +- .../metrics/metric_oa_enumeration_imp.cpp | 12 +- .../metrics/metric_oa_enumeration_imp.h | 10 +- .../source/metrics/metric_oa_export_data.cpp | 4 + .../source/metrics/metric_oa_query_imp.cpp | 2 +- .../tools/source/metrics/metric_oa_source.cpp | 18 +- .../tools/source/metrics/metric_oa_source.h | 9 +- .../unit_tests/sources/metrics/CMakeLists.txt | 1 + .../sources/metrics/mock_metric_oa.h | 1 + .../metrics/mock_metric_oa_enumeration.h | 2 + .../sources/metrics/mock_metric_source.h | 28 +++ .../test_metric_ip_sampling_enumeration.cpp | 33 +++ .../metrics/test_metric_oa_enumeration_1.cpp | 18 +- .../metrics/test_metric_oa_enumeration_2.cpp | 19 +- .../metrics/test_metric_oa_query_pool_1.cpp | 63 ++++-- .../metrics/test_metric_oa_query_pool_2.cpp | 3 +- .../metrics/test_metric_oa_query_pool_3.cpp | 99 +++++++- .../metrics/test_metric_oa_streamer_1.cpp | 36 ++- .../metrics/test_metric_oa_streamer_2.cpp | 35 ++- .../metrics/test_metric_oa_streamer_3.cpp | 9 +- 25 files changed, 544 insertions(+), 182 deletions(-) create mode 100644 level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h diff --git a/level_zero/core/source/device/device_imp.cpp b/level_zero/core/source/device/device_imp.cpp index 1ea578b6e8..fdaafc16a3 100644 --- a/level_zero/core/source/device/device_imp.cpp +++ b/level_zero/core/source/device/device_imp.cpp @@ -1123,14 +1123,18 @@ ze_result_t DeviceImp::systemBarrier() { return ZE_RESULT_ERROR_UNSUPPORTED_FEAT ze_result_t DeviceImp::activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) { + auto status = ZE_RESULT_SUCCESS; if (!this->isSubdevice && this->isImplicitScalingCapable()) { for (auto &subDevice : this->subDevices) { - subDevice->getMetricDeviceContext().activateMetricGroupsDeferred(count, phMetricGroups); + status = subDevice->getMetricDeviceContext().activateMetricGroupsPreferDeferred(count, phMetricGroups); + if (status != ZE_RESULT_SUCCESS) { + return status; + } } } else { - metricContext->activateMetricGroupsDeferred(count, phMetricGroups); + status = metricContext->activateMetricGroupsPreferDeferred(count, phMetricGroups); } - return ZE_RESULT_SUCCESS; + return status; } void *DeviceImp::getExecEnvironment() { return execEnvironment; } diff --git a/level_zero/tools/source/metrics/metric.cpp b/level_zero/tools/source/metrics/metric.cpp index 231288e0c6..cc3b316ecb 100644 --- a/level_zero/tools/source/metrics/metric.cpp +++ b/level_zero/tools/source/metrics/metric.cpp @@ -93,80 +93,42 @@ ze_result_t MetricDeviceContext::metricGroupGet(uint32_t *pCount, zet_metric_gro return result; } -void MetricDeviceContext::activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) { +ze_result_t MetricDeviceContext::activateMetricGroupsPreferDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) { - // Activation: postpone until zetMetricStreamerOpen or zeCommandQueueExecuteCommandLists - // Deactivation: execute immediately. - if (phMetricGroups == nullptr) { - deActivateAllDomains(); - return; - } - - auto isMetricGroupProvided = [phMetricGroups, count](const zet_metric_group_handle_t hMetricGroup) { - for (auto index = 0u; index < count; index++) { - if (hMetricGroup == phMetricGroups[index]) { - return true; - } - } - return false; - }; - - // Deactive existing metric groups which are not provided in phMetricGroups - std::vector deactivateList = {}; - for (const auto &[domainId, metricGroupPair] : domains) { - const auto &hMetricGroup = metricGroupPair.first; - if (isMetricGroupProvided(hMetricGroup) == false) { - deActivateDomain(domainId); - deactivateList.push_back(domainId); - } - } - - // Remove deactivated ones from the map - for (const auto &domainId : deactivateList) { - domains.erase(domainId); - } - - // Activate-deferred new metric groups if any + // Create a map of metric source types and Metric groups + std::map> metricGroupsPerMetricSourceMap{}; for (auto index = 0u; index < count; index++) { + auto &metricGroupSource = + static_cast(MetricGroup::fromHandle(phMetricGroups[index]))->getMetricSource(); + metricGroupsPerMetricSourceMap[metricGroupSource.getType()].push_back(phMetricGroups[index]); + } - zet_metric_group_handle_t hMetricGroup = MetricGroup::fromHandle(phMetricGroups[index])->getMetricGroupForSubDevice(subDeviceIndex); - zet_metric_group_properties_t properties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; - MetricGroup::fromHandle(hMetricGroup)->getProperties(&properties); - auto domain = properties.domain; - // Domain already associated with the same handle. - if (domains[domain].first == hMetricGroup) { + for (auto const &entry : metricSources) { + auto const &metricSourceEntry = entry.second; + auto status = ZE_RESULT_SUCCESS; + if (!metricSourceEntry->isAvailable()) { continue; } - domains[domain].first = hMetricGroup; - domains[domain].second = false; - } -} + auto sourceType = metricSourceEntry->getType(); -ze_result_t MetricDeviceContext::activateAllDomains() { - for (auto &entry : domains) { - auto &metricGroup = entry.second; - DEBUG_BREAK_IF(metricGroup.first == nullptr); - MetricGroup::fromHandle(metricGroup.first)->activate(); - metricGroup.second = true; + if (metricGroupsPerMetricSourceMap.find(sourceType) == metricGroupsPerMetricSourceMap.end()) { + status = metricSourceEntry->activateMetricGroupsPreferDeferred(0, nullptr); + } else { + auto &metricGroupVec = metricGroupsPerMetricSourceMap[sourceType]; + status = metricSourceEntry->activateMetricGroupsPreferDeferred( + static_cast(metricGroupVec.size()), + metricGroupVec.data()); + } + + if (status != ZE_RESULT_SUCCESS) { + return status; + } } + return ZE_RESULT_SUCCESS; } -void MetricDeviceContext::deActivateDomain(uint32_t domain) { - auto &metricGroupPair = domains[domain]; - if (metricGroupPair.second == true) { - MetricGroup::fromHandle(metricGroupPair.first)->deactivate(); - } -} - -void MetricDeviceContext::deActivateAllDomains() { - for (auto &entry : domains) { - deActivateDomain(entry.first); - } - domains.clear(); -} - ze_result_t MetricDeviceContext::appendMetricMemoryBarrier(CommandList &commandList) { bool isSuccess = false; @@ -186,32 +148,16 @@ ze_result_t MetricDeviceContext::appendMetricMemoryBarrier(CommandList &commandL return isSuccess == false ? ZE_RESULT_ERROR_UNSUPPORTED_FEATURE : ZE_RESULT_SUCCESS; } -bool MetricDeviceContext::isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const { - for (auto const &entry : domains) { - auto const &metricGroup = entry.second; - if (metricGroup.first == hMetricGroup) { - return true; - } - } - return false; -} - -bool MetricDeviceContext::isMetricGroupActivated() const { - for (auto const &entry : domains) { - auto const &metricGroup = entry.second; - if (metricGroup.second == true) { - return true; - } - } - return false; -} - bool MetricDeviceContext::isImplicitScalingCapable() const { return multiDeviceCapable; } ze_result_t MetricDeviceContext::activateMetricGroups() { - return activateAllDomains(); + for (auto const &entry : metricSources) { + auto const &metricSource = entry.second; + metricSource->activateMetricGroupsAlreadyDeferred(); + } + return ZE_RESULT_SUCCESS; } uint32_t MetricDeviceContext::getSubDeviceIndex() const { @@ -299,4 +245,102 @@ ze_result_t MetricGroup::getMetricGroupExtendedProperties(MetricSource &metricSo return retVal; } +bool MultiDomainDeferredActivationTracker::activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) { + + // Activation: postpone until zetMetricStreamerOpen or zeCommandQueueExecuteCommandLists + // Deactivation: execute immediately. + if (phMetricGroups == nullptr) { + deActivateAllDomains(); + return true; + } + + auto isMetricGroupProvided = [phMetricGroups, count](const zet_metric_group_handle_t hMetricGroup) { + for (auto index = 0u; index < count; index++) { + if (hMetricGroup == phMetricGroups[index]) { + return true; + } + } + return false; + }; + + // Deactive existing metric groups which are not provided in phMetricGroups + std::vector deactivateList = {}; + for (const auto &[domainId, metricGroupPair] : domains) { + const auto &hMetricGroup = metricGroupPair.first; + if (isMetricGroupProvided(hMetricGroup) == false) { + deActivateDomain(domainId); + deactivateList.push_back(domainId); + } + } + + // Remove deactivated ones from the map + for (const auto &domainId : deactivateList) { + domains.erase(domainId); + } + + // Activate-deferred new metric groups if any + for (auto index = 0u; index < count; index++) { + + zet_metric_group_handle_t hMetricGroup = MetricGroup::fromHandle(phMetricGroups[index])->getMetricGroupForSubDevice(subDeviceIndex); + zet_metric_group_properties_t properties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; + auto metricGroup = MetricGroup::fromHandle(hMetricGroup); + metricGroup->getProperties(&properties); + auto domain = properties.domain; + + // Domain already associated with the same handle. + if (domains[domain].first == hMetricGroup) { + continue; + } + + domains[domain].first = hMetricGroup; + domains[domain].second = false; + } + return true; +} + +ze_result_t MultiDomainDeferredActivationTracker::activateMetricGroupsAlreadyDeferred() { + for (auto &entry : domains) { + auto &metricGroupEntry = entry.second; + DEBUG_BREAK_IF(metricGroupEntry.first == nullptr); + auto metricGroup = MetricGroup::fromHandle(metricGroupEntry.first); + metricGroup->activate(); + metricGroupEntry.second = true; + } + return ZE_RESULT_SUCCESS; +} + +void MultiDomainDeferredActivationTracker::deActivateDomain(uint32_t domain) { + auto &metricGroupPair = domains[domain]; + if (metricGroupPair.second == true) { + MetricGroup::fromHandle(metricGroupPair.first)->deactivate(); + } +} + +void MultiDomainDeferredActivationTracker::deActivateAllDomains() { + for (auto &entry : domains) { + deActivateDomain(entry.first); + } + domains.clear(); +} + +bool MultiDomainDeferredActivationTracker::isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const { + for (auto const &entry : domains) { + auto const &metricGroup = entry.second; + if (metricGroup.first == hMetricGroup) { + return true; + } + } + return false; +} + +bool MultiDomainDeferredActivationTracker::isMetricGroupActivatedInHw() const { + for (auto const &entry : domains) { + auto const &metricGroup = entry.second; + if (metricGroup.second == true) { + return true; + } + } + return false; +} + } // namespace L0 diff --git a/level_zero/tools/source/metrics/metric.h b/level_zero/tools/source/metrics/metric.h index 0352a136a7..f2a448b367 100644 --- a/level_zero/tools/source/metrics/metric.h +++ b/level_zero/tools/source/metrics/metric.h @@ -39,7 +39,32 @@ class MetricSource { virtual ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) = 0; virtual ze_result_t getTimerResolution(uint64_t &resolution) = 0; virtual ze_result_t getTimestampValidBits(uint64_t &validBits) = 0; + virtual ze_result_t activateMetricGroupsPreferDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) = 0; + virtual ze_result_t activateMetricGroupsAlreadyDeferred() = 0; virtual ~MetricSource() = default; + uint32_t getType() const { + return type; + } + + protected: + uint32_t type = MetricSource::metricSourceTypeUndefined; +}; + +class MultiDomainDeferredActivationTracker { + public: + MultiDomainDeferredActivationTracker(uint32_t subDeviceIndex) : subDeviceIndex(subDeviceIndex) {} + virtual ~MultiDomainDeferredActivationTracker() = default; + ze_result_t activateMetricGroupsAlreadyDeferred(); + virtual bool activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups); + bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const; + bool isMetricGroupActivatedInHw() const; + + protected: + void deActivateDomain(uint32_t domain); + void deActivateAllDomains(); + + std::map> domains = {}; + uint32_t subDeviceIndex{}; }; class MetricDeviceContext { @@ -47,11 +72,9 @@ class MetricDeviceContext { public: MetricDeviceContext(Device &device); ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups); - void activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups); + ze_result_t activateMetricGroupsPreferDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups); ze_result_t activateMetricGroups(); ze_result_t appendMetricMemoryBarrier(CommandList &commandList); - bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const; - bool isMetricGroupActivated() const; bool isImplicitScalingCapable() const; Device &getDevice() const; uint32_t getSubDeviceIndex() const; @@ -67,11 +90,7 @@ class MetricDeviceContext { private: bool enable(); - ze_result_t activateAllDomains(); - void deActivateAllDomains(); - void deActivateDomain(uint32_t domain); struct Device &device; - std::map> domains; bool multiDeviceCapable = false; uint32_t subDeviceIndex = 0; }; @@ -87,6 +106,7 @@ struct Metric : _zet_metric_handle_t { struct MetricGroup : _zet_metric_group_handle_t { virtual ~MetricGroup() = default; + MetricGroup() {} virtual ze_result_t getProperties(zet_metric_group_properties_t *pProperties) = 0; virtual ze_result_t metricGet(uint32_t *pCount, zet_metric_handle_t *phMetrics) = 0; @@ -124,6 +144,18 @@ struct MetricGroup : _zet_metric_group_handle_t { uint8_t *pExportData) = 0; }; +struct MetricGroupImp : public MetricGroup { + + MetricSource &getMetricSource() { + return metricSource; + } + ~MetricGroupImp() override = default; + MetricGroupImp(MetricSource &metricSource) : metricSource(metricSource) {} + + protected: + MetricSource &metricSource; +}; + struct MetricGroupCalculateHeader { static constexpr uint32_t magicValue = 0xFFFEDCBA; diff --git a/level_zero/tools/source/metrics/metric_ip_sampling_source.cpp b/level_zero/tools/source/metrics/metric_ip_sampling_source.cpp index 4b5313acd6..0ae3403204 100644 --- a/level_zero/tools/source/metrics/metric_ip_sampling_source.cpp +++ b/level_zero/tools/source/metrics/metric_ip_sampling_source.cpp @@ -31,6 +31,8 @@ std::unique_ptr IpSamplingMetricSourceImp::create(con IpSamplingMetricSourceImp::IpSamplingMetricSourceImp(const MetricDeviceContext &metricDeviceContext) : metricDeviceContext(metricDeviceContext) { metricIPSamplingpOsInterface = MetricIpSamplingOsInterface::create(metricDeviceContext.getDevice()); + activationTracker = std::make_unique(metricDeviceContext.getSubDeviceIndex()); + type = MetricSource::metricSourceTypeIpSampling; } ze_result_t IpSamplingMetricSourceImp::getTimerResolution(uint64_t &resolution) { @@ -70,7 +72,8 @@ void IpSamplingMetricSourceImp::cacheMetricGroup() { subDeviceMetricGroup.push_back(static_cast(MetricGroup::fromHandle(hMetricGroup))); } - cachedMetricGroup = MultiDeviceIpSamplingMetricGroupImp::create(subDeviceMetricGroup); + IpSamplingMetricSourceImp &source = deviceImp->getMetricDeviceContext().getMetricSource(); + cachedMetricGroup = MultiDeviceIpSamplingMetricGroupImp::create(source, subDeviceMetricGroup); return; } @@ -145,6 +148,23 @@ ze_result_t IpSamplingMetricSourceImp::appendMetricMemoryBarrier(CommandList &co return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } +ze_result_t IpSamplingMetricSourceImp::activateMetricGroupsPreferDeferred(uint32_t count, + zet_metric_group_handle_t *phMetricGroups) { + auto status = activationTracker->activateMetricGroupsDeferred(count, phMetricGroups); + if (!status) { + return ZE_RESULT_ERROR_UNKNOWN; + } + return ZE_RESULT_SUCCESS; +} + +ze_result_t IpSamplingMetricSourceImp::activateMetricGroupsAlreadyDeferred() { + return activationTracker->activateMetricGroupsAlreadyDeferred(); +} + +bool IpSamplingMetricSourceImp::isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const { + return activationTracker->isMetricGroupActivated(hMetricGroup); +} + void IpSamplingMetricSourceImp::setMetricOsInterface(std::unique_ptr &metricIPSamplingpOsInterface) { this->metricIPSamplingpOsInterface = std::move(metricIPSamplingpOsInterface); } @@ -179,7 +199,7 @@ ze_result_t IpSamplingMetricGroupBase::getExportData(const uint8_t *pRawData, si } IpSamplingMetricGroupImp::IpSamplingMetricGroupImp(IpSamplingMetricSourceImp &metricSource, - std::vector &metrics) : metricSource(metricSource) { + std::vector &metrics) : IpSamplingMetricGroupBase(metricSource) { this->metrics.reserve(metrics.size()); for (const auto &metric : metrics) { this->metrics.push_back(std::make_unique(metric)); @@ -628,9 +648,10 @@ ze_result_t MultiDeviceIpSamplingMetricGroupImp::getMetricTimestampsExp(const ze } std::unique_ptr MultiDeviceIpSamplingMetricGroupImp::create( + MetricSource &metricSource, std::vector &subDeviceMetricGroup) { UNRECOVERABLE_IF(subDeviceMetricGroup.size() == 0); - return std::unique_ptr(new (std::nothrow) MultiDeviceIpSamplingMetricGroupImp(subDeviceMetricGroup)); + return std::unique_ptr(new (std::nothrow) MultiDeviceIpSamplingMetricGroupImp(metricSource, subDeviceMetricGroup)); } IpSamplingMetricImp::IpSamplingMetricImp(zet_metric_properties_t &properties) : properties(properties) { diff --git a/level_zero/tools/source/metrics/metric_ip_sampling_source.h b/level_zero/tools/source/metrics/metric_ip_sampling_source.h index 611fedebdb..cffe3b9974 100644 --- a/level_zero/tools/source/metrics/metric_ip_sampling_source.h +++ b/level_zero/tools/source/metrics/metric_ip_sampling_source.h @@ -25,6 +25,10 @@ class IpSamplingMetricSourceImp : public MetricSource { bool isAvailable() override; ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) override; ze_result_t appendMetricMemoryBarrier(CommandList &commandList) override; + ze_result_t activateMetricGroupsAlreadyDeferred() override; + ze_result_t activateMetricGroupsPreferDeferred(const uint32_t count, + zet_metric_group_handle_t *phMetricGroups) override; + bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const; void setMetricOsInterface(std::unique_ptr &metricIPSamplingpOsInterface); static std::unique_ptr create(const MetricDeviceContext &metricDeviceContext); MetricIpSamplingOsInterface *getMetricOsInterface() { return metricIPSamplingpOsInterface.get(); } @@ -32,6 +36,9 @@ class IpSamplingMetricSourceImp : public MetricSource { const MetricDeviceContext &getMetricDeviceContext() const { return metricDeviceContext; } ze_result_t getTimerResolution(uint64_t &resolution) override; ze_result_t getTimestampValidBits(uint64_t &validBits) override; + void setActivationTracker(MultiDomainDeferredActivationTracker *inputActivationTracker) { + activationTracker.reset(inputActivationTracker); + } protected: void cacheMetricGroup(); @@ -40,6 +47,7 @@ class IpSamplingMetricSourceImp : public MetricSource { const MetricDeviceContext &metricDeviceContext; std::unique_ptr metricIPSamplingpOsInterface = nullptr; std::unique_ptr cachedMetricGroup = nullptr; + std::unique_ptr activationTracker{}; }; typedef struct StallSumIpData { @@ -56,7 +64,8 @@ typedef struct StallSumIpData { typedef std::map StallSumIpDataMap_t; -struct IpSamplingMetricGroupBase : public MetricGroup { +struct IpSamplingMetricGroupBase : public MetricGroupImp { + IpSamplingMetricGroupBase(MetricSource &metricSource) : MetricGroupImp(metricSource) {} static constexpr uint32_t rawReportSize = 64u; bool activate() override { return true; } bool deactivate() override { return true; }; @@ -93,7 +102,7 @@ struct IpSamplingMetricGroupImp : public IpSamplingMetricGroupBase { zet_metric_streamer_handle_t *phMetricStreamer) override; static std::unique_ptr create(IpSamplingMetricSourceImp &metricSource, std::vector &ipSamplingMetrics); - IpSamplingMetricSourceImp &getMetricSource() { return metricSource; } + IpSamplingMetricSourceImp &getMetricSource() { return static_cast(metricSource); } ze_result_t getCalculatedMetricCount(const uint8_t *pMultiMetricData, const size_t rawDataSize, uint32_t &metricValueCount, const uint32_t setIndex); ze_result_t getCalculatedMetricValues(const zet_metric_group_calculation_type_t type, const size_t rawDataSize, const uint8_t *pMultiMetricData, uint32_t &metricValueCount, @@ -109,12 +118,11 @@ struct IpSamplingMetricGroupImp : public IpSamplingMetricGroupBase { bool stallIpDataMapUpdate(StallSumIpDataMap_t &, const uint8_t *pRawIpData); void stallSumIpDataToTypedValues(uint64_t ip, StallSumIpData_t &sumIpData, std::vector &ipDataValues); bool isMultiDeviceCaptureData(const size_t rawDataSize, const uint8_t *pRawData); - IpSamplingMetricSourceImp &metricSource; }; struct MultiDeviceIpSamplingMetricGroupImp : public IpSamplingMetricGroupBase { - MultiDeviceIpSamplingMetricGroupImp(std::vector &subDeviceMetricGroup) : subDeviceMetricGroup(subDeviceMetricGroup){}; + MultiDeviceIpSamplingMetricGroupImp(MetricSource &metricSource, std::vector &subDeviceMetricGroup) : IpSamplingMetricGroupBase(metricSource), subDeviceMetricGroup(subDeviceMetricGroup){}; ~MultiDeviceIpSamplingMetricGroupImp() override = default; ze_result_t getProperties(zet_metric_group_properties_t *pProperties) override; ze_result_t metricGet(uint32_t *pCount, zet_metric_handle_t *phMetrics) override; @@ -135,7 +143,7 @@ struct MultiDeviceIpSamplingMetricGroupImp : public IpSamplingMetricGroupBase { zet_metric_streamer_desc_t *desc, ze_event_handle_t hNotificationEvent, zet_metric_streamer_handle_t *phMetricStreamer) override; - static std::unique_ptr create(std::vector &subDeviceMetricGroup); + static std::unique_ptr create(MetricSource &metricSource, std::vector &subDeviceMetricGroup); private: void closeSubDeviceStreamers(std::vector &subDeviceStreamers); diff --git a/level_zero/tools/source/metrics/metric_ip_sampling_streamer.cpp b/level_zero/tools/source/metrics/metric_ip_sampling_streamer.cpp index 953054521f..2ba1b597e7 100644 --- a/level_zero/tools/source/metrics/metric_ip_sampling_streamer.cpp +++ b/level_zero/tools/source/metrics/metric_ip_sampling_streamer.cpp @@ -42,21 +42,22 @@ ze_result_t IpSamplingMetricGroupImp::streamerOpen( auto device = Device::fromHandle(hDevice); // Check whether metric group is activated. - if (!device->getMetricDeviceContext().isMetricGroupActivated(this->toHandle())) { + IpSamplingMetricSourceImp &source = device->getMetricDeviceContext().getMetricSource(); + if (!source.isMetricGroupActivated(this->toHandle())) { return ZE_RESULT_NOT_READY; } // Check whether metric streamer is already open. - if (metricSource.pActiveStreamer != nullptr) { + if (source.pActiveStreamer != nullptr) { return ZE_RESULT_ERROR_HANDLE_OBJECT_IN_USE; } - auto pStreamerImp = new IpSamplingMetricStreamerImp(metricSource); + auto pStreamerImp = new IpSamplingMetricStreamerImp(source); UNRECOVERABLE_IF(pStreamerImp == nullptr); - const ze_result_t result = metricSource.getMetricOsInterface()->startMeasurement(desc->notifyEveryNReports, desc->samplingPeriod); + const ze_result_t result = source.getMetricOsInterface()->startMeasurement(desc->notifyEveryNReports, desc->samplingPeriod); if (result == ZE_RESULT_SUCCESS) { - metricSource.pActiveStreamer = pStreamerImp; + source.pActiveStreamer = pStreamerImp; pStreamerImp->attachEvent(hNotificationEvent); } else { delete pStreamerImp; diff --git a/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp b/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp index a844a161d2..6c7d42db80 100644 --- a/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp +++ b/level_zero/tools/source/metrics/metric_oa_enumeration_imp.cpp @@ -273,8 +273,7 @@ ze_result_t MetricEnumeration::cacheMetricInformation() { // Cache and aggregate all metric groups from all sub devices. for (uint32_t i = 0; i < metricGroupCount; i++) { - auto metricGroupRootDevice = new OaMetricGroupImp(); - metricGroupRootDevice->setMetricSource(&metricSource); + auto metricGroupRootDevice = new OaMetricGroupImp(metricSource); for (auto subDevice : deviceImp.subDevices) { MetricGroup *metricGroupSubDevice = subDevice->getMetricDeviceContext().getMetricSource().getMetricEnumeration().getMetricGroupByIndex(i); @@ -562,7 +561,7 @@ ze_result_t OaMetricGroupImp::getProperties(zet_metric_group_properties_t *pProp copyProperties(properties, *pProperties); pProperties->pNext = pNext; if (pNext) { - status = getMetricGroupExtendedProperties(*metricSource, pNext); + status = getMetricGroupExtendedProperties(metricSource, pNext); } } @@ -606,6 +605,7 @@ bool OaMetricGroupImp::activate() { return true; } + auto metricSource = getMetricSource(); auto hConfiguration = metricSource->getMetricsLibrary().getConfiguration(toHandle()); // Validate metrics library handle. if (!hConfiguration.IsValid()) { @@ -626,6 +626,7 @@ bool OaMetricGroupImp::deactivate() { return true; } + auto metricSource = getMetricSource(); auto hConfiguration = metricSource->getMetricsLibrary().getConfiguration(toHandle()); // Deactivate metric group configuration using metrics library. metricSource->getMetricsLibrary().deactivateConfiguration(hConfiguration); @@ -979,7 +980,6 @@ ze_result_t OaMetricGroupImp::initialize(const zet_metric_group_properties_t &so pReferenceMetricSet = &metricSet; pReferenceConcurrentGroup = &concurrentGroup; metrics = groupMetrics; - this->metricSource = &metricSource; return ZE_RESULT_SUCCESS; } @@ -1039,7 +1039,7 @@ void OaMetricGroupImp::copyValue(const MetricsDiscovery::TTypedValue_1_0 &source } const MetricEnumeration &OaMetricGroupImp::getMetricEnumeration() const { - return metricSource->getMetricEnumeration(); + return getMetricSource()->getMetricEnumeration(); } void OaMetricGroupImp::setCachedExportDataHeapSize(size_t size) { @@ -1079,7 +1079,7 @@ MetricGroup *OaMetricGroupImp::create(zet_metric_group_properties_t &properties, MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup, const std::vector &metrics, MetricSource &metricSource) { - auto pMetricGroup = new OaMetricGroupImp(); + auto pMetricGroup = new OaMetricGroupImp(metricSource); UNRECOVERABLE_IF(pMetricGroup == nullptr); pMetricGroup->initialize(properties, metricSet, concurrentGroup, metrics, static_cast(metricSource)); pMetricGroup->isPredefined = true; diff --git a/level_zero/tools/source/metrics/metric_oa_enumeration_imp.h b/level_zero/tools/source/metrics/metric_oa_enumeration_imp.h index cb3fb6da46..9c9aad038d 100644 --- a/level_zero/tools/source/metrics/metric_oa_enumeration_imp.h +++ b/level_zero/tools/source/metrics/metric_oa_enumeration_imp.h @@ -10,6 +10,7 @@ #include "shared/source/os_interface/os_library.h" #include "level_zero/tools/source/metrics/metric.h" +#include "level_zero/tools/source/metrics/metric_oa_source.h" #include @@ -18,8 +19,6 @@ namespace L0 { static constexpr std::string_view globalSymbolOaMaxBufferSize = "OABufferMaxSize"; static constexpr std::string_view globalSymbolOaMaxTimestamp = "MaxTimestamp"; -class OaMetricSourceImp; - struct MetricEnumeration { MetricEnumeration(OaMetricSourceImp &metricSource); virtual ~MetricEnumeration(); @@ -122,8 +121,9 @@ struct MetricEnumeration { static const char *oaConcurrentGroupName; }; -struct OaMetricGroupImp : MetricGroup { +struct OaMetricGroupImp : MetricGroupImp { ~OaMetricGroupImp() override; + OaMetricGroupImp(MetricSource &metricSource) : MetricGroupImp(metricSource) {} ze_result_t getProperties(zet_metric_group_properties_t *pProperties) override; ze_result_t metricGet(uint32_t *pCount, zet_metric_handle_t *phMetrics) override; @@ -178,8 +178,7 @@ struct OaMetricGroupImp : MetricGroup { MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup, const std::vector &metrics, MetricSource &metricSource); - OaMetricSourceImp *getMetricSource() { return metricSource; } - void setMetricSource(OaMetricSourceImp *inputMetricSource) { metricSource = inputMetricSource; } + OaMetricSourceImp *getMetricSource() const { return static_cast(&metricSource); } static ze_result_t getProperties(const zet_metric_group_handle_t handle, zet_metric_group_properties_t *pProperties); uint32_t getRawReportSize(); const MetricEnumeration &getMetricEnumeration() const; @@ -207,7 +206,6 @@ struct OaMetricGroupImp : MetricGroup { MetricsDiscovery::IConcurrentGroup_1_5 *pReferenceConcurrentGroup = nullptr; std::vector metricGroups; - OaMetricSourceImp *metricSource = nullptr; size_t cachedExportDataHeapSize = 0; bool isPredefined{}; diff --git a/level_zero/tools/source/metrics/metric_oa_export_data.cpp b/level_zero/tools/source/metrics/metric_oa_export_data.cpp index d6598a1e82..e4e100d6fa 100644 --- a/level_zero/tools/source/metrics/metric_oa_export_data.cpp +++ b/level_zero/tools/source/metrics/metric_oa_export_data.cpp @@ -718,6 +718,8 @@ ze_result_t OaMetricGroupImp::getExportDataHeapSize(size_t &exportDataHeapSize) } HeapUsageTracker memoryTracker(0, 0, HeapUsageTracker::OperationModeTrackOnly); + + OaMetricSourceImp *metricSource = getMetricSource(); MetricsDiscovery::IMetricsDevice_1_5 *mdDevice = metricSource->getMetricEnumeration().getMdapiDevice(); MetricsDiscovery::IAdapter_1_9 *mdAdapter = metricSource->getMetricEnumeration().getMdapiAdapter(); @@ -763,6 +765,8 @@ ze_result_t OaMetricGroupImp::getExportData(const uint8_t *pRawData, uintptr_t endHeapAddress = startHeapAddress + requiredHeapSize; HeapUsageTracker memoryTracker(startHeapAddress, endHeapAddress); + + OaMetricSourceImp *metricSource = getMetricSource(); MetricsDiscovery::IMetricsDevice_1_5 *mdDevice = metricSource->getMetricEnumeration().getMdapiDevice(); MetricsDiscovery::IAdapter_1_9 *mdAdapter = metricSource->getMetricEnumeration().getMdapiAdapter(); MetricOaExporter01 exporter01(*mdDevice, *mdAdapter, *pReferenceMetricSet, *pReferenceConcurrentGroup, memoryTracker); diff --git a/level_zero/tools/source/metrics/metric_oa_query_imp.cpp b/level_zero/tools/source/metrics/metric_oa_query_imp.cpp index 924df3d089..f43ca0dc53 100644 --- a/level_zero/tools/source/metrics/metric_oa_query_imp.cpp +++ b/level_zero/tools/source/metrics/metric_oa_query_imp.cpp @@ -586,7 +586,7 @@ ze_result_t OaMetricQueryPoolImp::destroy() { // Check open queries. if (metricSource.getMetricsLibrary().getMetricQueryCount() == 0) { - if (!metricSource.isMetricGroupActivated()) { + if (!metricSource.isMetricGroupActivatedInHw()) { metricSource.getMetricsLibrary().release(); } } diff --git a/level_zero/tools/source/metrics/metric_oa_source.cpp b/level_zero/tools/source/metrics/metric_oa_source.cpp index eec2460b35..a434a85b59 100644 --- a/level_zero/tools/source/metrics/metric_oa_source.cpp +++ b/level_zero/tools/source/metrics/metric_oa_source.cpp @@ -27,6 +27,8 @@ OaMetricSourceImp::OaMetricSourceImp(const MetricDeviceContext &metricDeviceCont metricEnumeration(std::unique_ptr(new(std::nothrow) MetricEnumeration(*this))), metricsLibrary(std::unique_ptr(new(std::nothrow) MetricsLibrary(*this))) { metricOAOsInterface = MetricOAOsInterface::create(metricDeviceContext.getDevice()); + activationTracker = std::make_unique(metricDeviceContext.getSubDeviceIndex()); + type = MetricSource::metricSourceTypeOa; } OaMetricSourceImp::~OaMetricSourceImp() = default; @@ -156,11 +158,11 @@ uint32_t OaMetricSourceImp::getSubDeviceIndex() { } bool OaMetricSourceImp::isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const { - return metricDeviceContext.isMetricGroupActivated(hMetricGroup); + return activationTracker->isMetricGroupActivated(hMetricGroup); } -bool OaMetricSourceImp::isMetricGroupActivated() const { - return metricDeviceContext.isMetricGroupActivated(); +bool OaMetricSourceImp::isMetricGroupActivatedInHw() const { + return activationTracker->isMetricGroupActivatedInHw(); } bool OaMetricSourceImp::isImplicitScalingCapable() const { @@ -171,6 +173,16 @@ void OaMetricSourceImp::setMetricOsInterface(std::unique_ptrmetricOAOsInterface = std::move(metricOAOsInterface); } +ze_result_t OaMetricSourceImp::activateMetricGroupsPreferDeferred(uint32_t count, + zet_metric_group_handle_t *phMetricGroups) { + activationTracker->activateMetricGroupsDeferred(count, phMetricGroups); + return ZE_RESULT_SUCCESS; +} + +ze_result_t OaMetricSourceImp::activateMetricGroupsAlreadyDeferred() { + return activationTracker->activateMetricGroupsAlreadyDeferred(); +} + template <> OaMetricSourceImp &MetricDeviceContext::getMetricSource() const { return static_cast(*metricSources.at(MetricSource::metricSourceTypeOa)); diff --git a/level_zero/tools/source/metrics/metric_oa_source.h b/level_zero/tools/source/metrics/metric_oa_source.h index 33ad88d76b..ff85116ec2 100644 --- a/level_zero/tools/source/metrics/metric_oa_source.h +++ b/level_zero/tools/source/metrics/metric_oa_source.h @@ -41,11 +41,11 @@ class OaMetricSourceImp : public MetricSource { ze_result_t getTimerResolution(uint64_t &resolution) override; ze_result_t getTimestampValidBits(uint64_t &validBits) override; - ze_result_t activateMetricGroups(); - ze_result_t activateMetricGroupsDeferred(const uint32_t count, - zet_metric_group_handle_t *phMetricGroups); + ze_result_t activateMetricGroupsAlreadyDeferred() override; + ze_result_t activateMetricGroupsPreferDeferred(const uint32_t count, + zet_metric_group_handle_t *phMetricGroups) override; bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const; - bool isMetricGroupActivated() const; + bool isMetricGroupActivatedInHw() const; void setUseCompute(const bool useCompute); bool isComputeUsed() const; uint32_t getSubDeviceIndex(); @@ -65,6 +65,7 @@ class OaMetricSourceImp : public MetricSource { MetricStreamer *pMetricStreamer = nullptr; bool useCompute = false; std::unique_ptr metricOAOsInterface = nullptr; + std::unique_ptr activationTracker{}; }; template <> diff --git a/level_zero/tools/test/unit_tests/sources/metrics/CMakeLists.txt b/level_zero/tools/test/unit_tests/sources/metrics/CMakeLists.txt index 5933693a14..dcafc90e7a 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/CMakeLists.txt +++ b/level_zero/tools/test/unit_tests/sources/metrics/CMakeLists.txt @@ -11,6 +11,7 @@ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/metric_query_pool_fixture.cpp ${CMAKE_CURRENT_SOURCE_DIR}/metric_query_pool_fixture.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric_oa.h + ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric_source.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric_oa.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric_oa_enumeration.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric_oa_enumeration.cpp diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.h b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.h index ec152bd6a8..900ff48bd7 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.h +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.h @@ -15,6 +15,7 @@ #include "level_zero/tools/source/metrics/metric_oa_enumeration_imp.h" #include "level_zero/tools/source/metrics/metric_oa_query_imp.h" #include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.h" +#include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h" namespace L0 { namespace ult { diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.h b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.h index baad121833..10533bd5c5 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.h +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.h @@ -294,6 +294,7 @@ struct Mock : public MetricEnumeration { template <> struct Mock : public OaMetricGroupImp { ~Mock() override = default; + Mock(MetricSource &metricSource) : OaMetricGroupImp(metricSource) {} ADDMETHOD_NOBASE(metricGet, ze_result_t, ZE_RESULT_SUCCESS, (uint32_t *, zet_metric_handle_t *)); ADDMETHOD_NOBASE(calculateMetricValues, ze_result_t, ZE_RESULT_SUCCESS, (const zet_metric_group_calculation_type_t, size_t, const uint8_t *, uint32_t *, zet_typed_value_t *)); @@ -317,6 +318,7 @@ struct Mock : public OaMetricGroupImp { }; struct MetricGroupImpTest : public OaMetricGroupImp { + MetricGroupImpTest(MetricSource &metricSource) : OaMetricGroupImp(metricSource) {} using OaMetricGroupImp::copyValue; using OaMetricGroupImp::pReferenceConcurrentGroup; using OaMetricGroupImp::pReferenceMetricSet; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h new file mode 100644 index 0000000000..b387f987c1 --- /dev/null +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2020-2023 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "level_zero/core/source/cmdlist/cmdlist.h" +#include "level_zero/tools/source/metrics/metric.h" + +namespace L0 { +namespace ult { + +class MockMetricSource : public L0::MetricSource { + public: + void enable() override {} + bool isAvailable() override { return false; } + ze_result_t appendMetricMemoryBarrier(L0::CommandList &commandList) override { return ZE_RESULT_ERROR_UNKNOWN; } + ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) override { return ZE_RESULT_ERROR_UNKNOWN; } + ze_result_t getTimerResolution(uint64_t &resolution) override { return ZE_RESULT_ERROR_UNKNOWN; } + ze_result_t getTimestampValidBits(uint64_t &validBits) override { return ZE_RESULT_ERROR_UNKNOWN; } + ze_result_t activateMetricGroupsPreferDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) override { return ZE_RESULT_ERROR_UNKNOWN; } + ze_result_t activateMetricGroupsAlreadyDeferred() override { return ZE_RESULT_ERROR_UNKNOWN; } + ~MockMetricSource() override = default; +}; + +} // namespace ult +} // namespace L0 diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_ip_sampling_enumeration.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_ip_sampling_enumeration.cpp index 8bdc7ad68f..9df61d5e74 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_ip_sampling_enumeration.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_ip_sampling_enumeration.cpp @@ -1054,5 +1054,38 @@ TEST_F(MetricExportDataIpSamplingTest, GivenIncorrectExportDataSizeWhenMetricGro } } +class MockMultiDomainDeferredActivationTracker : public MultiDomainDeferredActivationTracker { + + public: + ~MockMultiDomainDeferredActivationTracker() override = default; + MockMultiDomainDeferredActivationTracker(uint32_t subdeviceIndex) : MultiDomainDeferredActivationTracker(subdeviceIndex) {} + + bool activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) override { + return false; + } +}; + +TEST_F(MetricIpSamplingEnumerationTest, GivenEnumerationIsSuccessfulAndActivationFailsThenErrorIsReturned) { + EXPECT_EQ(ZE_RESULT_SUCCESS, testDevices[0]->getMetricDeviceContext().enableMetricApi()); + + for (auto device : testDevices) { + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + MockMultiDomainDeferredActivationTracker *mockTracker = new MockMultiDomainDeferredActivationTracker(0); + metricSource.setActivationTracker(mockTracker); + } + + for (auto device : testDevices) { + + uint32_t metricGroupCount = 0; + zetMetricGroupGet(device->toHandle(), &metricGroupCount, nullptr); + std::vector metricGroups; + metricGroups.resize(metricGroupCount); + ASSERT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, metricGroups.data()), ZE_RESULT_SUCCESS); + ASSERT_NE(metricGroups[0], nullptr); + + EXPECT_EQ(zetContextActivateMetricGroups(context->toHandle(), device->toHandle(), 1, &metricGroups[0]), ZE_RESULT_ERROR_UNKNOWN); + } +} + } // namespace ult } // namespace L0 diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_1.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_1.cpp index 442fc49d96..94afca88fc 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_1.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_1.cpp @@ -2611,7 +2611,8 @@ INSTANTIATE_TEST_CASE_P(parameterizedMetricEnumerationTestInformationTypes, TEST_F(MetricEnumerationTest, givenMetricSetWhenActivateIsCalledActivateReturnsTrue) { Mock metricsSet; - MetricGroupImpTest metricGroup; + MockMetricSource mockMetricSource{}; + MetricGroupImpTest metricGroup(mockMetricSource); metricGroup.pReferenceMetricSet = &metricsSet; @@ -2621,7 +2622,8 @@ TEST_F(MetricEnumerationTest, givenMetricSetWhenActivateIsCalledActivateReturnsT TEST_F(MetricEnumerationTest, givenMetricSetWhenActivateIsCalledActivateReturnsFalse) { Mock metricsSet; - MetricGroupImpTest metricGroup; + MockMetricSource mockMetricSource{}; + MetricGroupImpTest metricGroup(mockMetricSource); metricGroup.pReferenceMetricSet = &metricsSet; metricsSet.ActivateResult = TCompletionCode::CC_ERROR_GENERAL; @@ -2632,7 +2634,8 @@ TEST_F(MetricEnumerationTest, givenMetricSetWhenActivateIsCalledActivateReturnsF TEST_F(MetricEnumerationTest, givenMetricSetWhenDeactivateIsCalledDeactivateReturnsTrue) { Mock metricsSet; - MetricGroupImpTest metricGroup; + MockMetricSource mockMetricSource{}; + MetricGroupImpTest metricGroup(mockMetricSource); metricGroup.pReferenceMetricSet = &metricsSet; @@ -2642,7 +2645,8 @@ TEST_F(MetricEnumerationTest, givenMetricSetWhenDeactivateIsCalledDeactivateRetu TEST_F(MetricEnumerationTest, givenMetricSetWhenDeactivateIsCalledDeactivateReturnsFalse) { Mock metricsSet; - MetricGroupImpTest metricGroup; + MockMetricSource mockMetricSource{}; + MetricGroupImpTest metricGroup(mockMetricSource); metricGroup.pReferenceMetricSet = &metricsSet; metricsSet.DeactivateResult = TCompletionCode::CC_ERROR_GENERAL; @@ -2653,7 +2657,8 @@ TEST_F(MetricEnumerationTest, givenMetricSetWhenDeactivateIsCalledDeactivateRetu TEST_F(MetricEnumerationTest, givenMetricSetWhenWaitForReportsIsCalledWaitForReportsReturnsSuccess) { Mock concurrentGroup; - MetricGroupImpTest metricGroup; + MockMetricSource mockMetricSource{}; + MetricGroupImpTest metricGroup(mockMetricSource); metricGroup.pReferenceConcurrentGroup = &concurrentGroup; @@ -2664,7 +2669,8 @@ TEST_F(MetricEnumerationTest, givenMetricSetWhenWaitForReportsIsCalledWaitForRep TEST_F(MetricEnumerationTest, givenMetricSetWhenWaitForReportsIsCalledWaitForReportsReturnsNotReady) { Mock concurrentGroup; - MetricGroupImpTest metricGroup; + MockMetricSource mockMetricSource{}; + MetricGroupImpTest metricGroup(mockMetricSource); metricGroup.pReferenceConcurrentGroup = &concurrentGroup; concurrentGroup.WaitForReportsResult = TCompletionCode::CC_ERROR_GENERAL; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_2.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_2.cpp index c5e9e6776b..8ef41cf99d 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_2.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_enumeration_2.cpp @@ -21,7 +21,8 @@ using MetricEnumerationTest = Test; TEST_F(MetricEnumerationTest, givenTimeAndBufferSizeWhenOpenIoStreamReturnsErrorThenTheMetricGroupOpenIoStreamReturnsErrorUnknown) { Mock concurrentGroup; - MetricGroupImpTest metricGroup; + MockMetricSource mockSource{}; + MetricGroupImpTest metricGroup(mockSource); metricGroup.pReferenceConcurrentGroup = &concurrentGroup; concurrentGroup.openIoStreamResult = TCompletionCode::CC_ERROR_GENERAL; @@ -35,7 +36,8 @@ TEST_F(MetricEnumerationTest, givenTimeAndBufferSizeWhenOpenIoStreamReturnsError TEST_F(MetricEnumerationTest, givenReportCountAndReportDataWhenReadIoStreamReturnsOkTheMetricGroupReadIoStreamReturnsSuccess) { Mock concurrentGroup; - MetricGroupImpTest metricGroup; + MockMetricSource mockSource{}; + MetricGroupImpTest metricGroup(mockSource); metricGroup.pReferenceConcurrentGroup = &concurrentGroup; @@ -48,7 +50,9 @@ TEST_F(MetricEnumerationTest, givenReportCountAndReportDataWhenReadIoStreamRetur TEST_F(MetricEnumerationTest, givenReportCountAndReportDataWhenReadIoStreamReturnsPendingTheMetricGroupReadIoStreamReturnsSuccess) { Mock concurrentGroup; - MetricGroupImpTest metricGroup; + + MockMetricSource mockSource{}; + MetricGroupImpTest metricGroup(mockSource); metricGroup.pReferenceConcurrentGroup = &concurrentGroup; concurrentGroup.readIoStreamResult = TCompletionCode::CC_READ_PENDING; @@ -62,7 +66,8 @@ TEST_F(MetricEnumerationTest, givenReportCountAndReportDataWhenReadIoStreamRetur TEST_F(MetricEnumerationTest, givenReportCountAndReportDataWhenReadIoStreamReturnsErrorThenMetrigGroupReadIoStreamReturnsError) { Mock concurrentGroup; - MetricGroupImpTest metricGroup; + MockMetricSource mockSource{}; + MetricGroupImpTest metricGroup(mockSource); metricGroup.pReferenceConcurrentGroup = &concurrentGroup; concurrentGroup.readIoStreamResult = TCompletionCode::CC_ERROR_GENERAL; @@ -76,7 +81,8 @@ TEST_F(MetricEnumerationTest, givenReportCountAndReportDataWhenReadIoStreamRetur TEST_F(MetricEnumerationTest, givenTimeAndBufferSizeWhenCloseIoStreamIsCalledCloseAndFailThenIoStreamReturnsErrorUnknown) { Mock concurrentGroup; - MetricGroupImpTest metricGroup; + MockMetricSource mockSource{}; + MetricGroupImpTest metricGroup(mockSource); metricGroup.pReferenceConcurrentGroup = &concurrentGroup; concurrentGroup.CloseIoStreamResult = TCompletionCode::CC_ERROR_GENERAL; @@ -87,7 +93,8 @@ TEST_F(MetricEnumerationTest, givenTTypedValueWhenCopyValueIsCalledReturnsFilled MetricsDiscovery::TTypedValue_1_0 source = {}; zet_typed_value_t destination = {}; - MetricGroupImpTest metricGroup = {}; + MockMetricSource mockSource{}; + MetricGroupImpTest metricGroup(mockSource); for (int vType = MetricsDiscovery::VALUE_TYPE_UINT32; vType < MetricsDiscovery::VALUE_TYPE_LAST; vType++) { diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_1.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_1.cpp index 382cb1afa4..9e0abead04 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_1.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_1.cpp @@ -21,7 +21,9 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryPoolCreateIsC zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -53,7 +55,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectMetricGroupTypeWhenZetMetricQueryPoolC zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_TIME_BASED; @@ -79,7 +83,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectParameterWhenZetMetricQueryPoolCreateI zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -110,7 +116,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectContextWhenZetMetricQueryPoolCreateIsC zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -132,7 +140,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectContextDataWhenZetMetricQueryPoolCreat zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -154,7 +164,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectGpuReportSizeWhenZetMetricQueryPoolCre zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -185,7 +197,9 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryCreateIsCalle zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -227,7 +241,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectSlotIndexWhenZetMetricQueryCreateIsCal zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -267,7 +283,9 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryResetIsCalled zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -312,7 +330,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetCommandListAppendMetri zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -360,7 +380,9 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ std::unique_ptr commandList(CommandList::create(productFamily, device, NEO::EngineGroupType::renderCompute, 0u, returnValue)); zet_command_list_handle_t commandListHandle = commandList->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -490,7 +512,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetCommandListAppendMetri eventDesc.wait = ZE_EVENT_SCOPE_FLAG_HOST; eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -565,7 +589,8 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ eventDesc.wait = ZE_EVENT_SCOPE_FLAG_HOST; eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -646,7 +671,9 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetMetricQueryGetDataIsCa eventDesc.wait = ZE_EVENT_SCOPE_FLAG_HOST; eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -726,7 +753,9 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall eventDesc.wait = ZE_EVENT_SCOPE_FLAG_HOST; eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -819,7 +848,9 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall eventDesc.wait = ZE_EVENT_SCOPE_FLAG_HOST; eventDesc.signal = ZE_EVENT_SCOPE_FLAG_DEVICE; - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_2.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_2.cpp index 4f713a4db5..7e8197b946 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_2.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_2.cpp @@ -31,7 +31,8 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenStreamerIsOpenThenQueryPool streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_3.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_3.cpp index e7a8d15c26..f49e2e2b93 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_3.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_query_pool_3.cpp @@ -23,7 +23,9 @@ TEST_F(MetricQueryPoolTest, givenMetricQueryIsActiveWhenMetricQueryPoolDestroyIs zet_device_handle_t metricDevice = device->toHandle(); - Mock metricGroup; + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -165,6 +167,101 @@ TEST_F(MetricQueryPoolTest, givenMetricQueryIsActiveWhenMetricGroupDeactivateIsC EXPECT_NE(mockMetricsLibrary->getInitializationState(), ZE_RESULT_SUCCESS); } +TEST_F(MetricQueryPoolTest, givenMetricGroupIsActiveWhenQueryPoolDestroyIsCalledThenMetricLibraryIsNotReleased) { + + zet_device_handle_t metricDevice = device->toHandle(); + auto &metricSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + + metricsDeviceParams.ConcurrentGroupsCount = 1; + + Mock metricsConcurrentGroup; + TConcurrentGroupParams_1_0 metricsConcurrentGroupParams = {}; + metricsConcurrentGroupParams.MetricSetsCount = 1; + metricsConcurrentGroupParams.SymbolName = "OA"; + metricsConcurrentGroupParams.Description = "OA description"; + + 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; + + 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_group_handle_t metricGroupHandle = {}; + + zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; + metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; + + zet_metric_query_handle_t queryHandle = {}; + zet_metric_query_pool_handle_t poolHandle = {}; + zet_metric_query_pool_desc_t poolDesc = {}; + poolDesc.stype = ZET_STRUCTURE_TYPE_METRIC_QUERY_POOL_DESC; + poolDesc.count = 1; + poolDesc.type = ZET_METRIC_QUERY_POOL_TYPE_PERFORMANCE; + + TypedValue_1_0 value = {}; + value.Type = ValueType::Uint32; + value.ValueUInt32 = 64; + + QueryHandle_1_0 metricsLibraryQueryHandle = {&value}; + ContextHandle_1_0 metricsLibraryContextHandle = {&value}; + ConfigurationHandle_1_0 metricsLibraryConfigurationHandle = {&value}; + + openMetricsAdapter(); + + setupDefaultMocksForMetricDevice(metricsDevice); + + metricsDevice.getConcurrentGroupResults.push_back(&metricsConcurrentGroup); + + metricsConcurrentGroup.GetParamsResult = &metricsConcurrentGroupParams; + metricsConcurrentGroup.getMetricSetResult = &metricsSet; + + metricsSet.GetParamsResult = &metricsSetParams; + metricsSet.GetMetricResult = &metric; + + metric.GetParamsResult = &metricParams; + + mockMetricsLibrary->g_mockApi->contextCreateOutHandle = metricsLibraryContextHandle; + mockMetricsLibrary->g_mockApi->queryCreateOutHandle = metricsLibraryQueryHandle; + mockMetricsLibrary->g_mockApi->getParameterOutValue = value; + + uint32_t metricGroupCount = 0; + EXPECT_EQ(zetMetricGroupGet(metricDevice, &metricGroupCount, nullptr), ZE_RESULT_SUCCESS); + EXPECT_EQ(metricGroupCount, 1u); + + EXPECT_EQ(zetMetricGroupGet(metricDevice, &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS); + EXPECT_EQ(metricGroupCount, 1u); + EXPECT_NE(metricGroupHandle, nullptr); + + EXPECT_EQ(zetContextActivateMetricGroups(context->toHandle(), metricDevice, 1, &metricGroupHandle), ZE_RESULT_SUCCESS); + + EXPECT_EQ(zetMetricQueryPoolCreate(context->toHandle(), metricDevice, metricGroupHandle, &poolDesc, &poolHandle), ZE_RESULT_SUCCESS); + EXPECT_NE(poolHandle, nullptr); + + EXPECT_EQ(zetMetricQueryCreate(poolHandle, 0, &queryHandle), ZE_RESULT_SUCCESS); + EXPECT_NE(queryHandle, nullptr); + + EXPECT_EQ(mockMetricsLibrary->getInitializationState(), ZE_RESULT_SUCCESS); + + metricSource.activateMetricGroupsAlreadyDeferred(); + + EXPECT_EQ(zetMetricQueryDestroy(queryHandle), ZE_RESULT_SUCCESS); + EXPECT_EQ(zetMetricQueryPoolDestroy(poolHandle), ZE_RESULT_SUCCESS); + + EXPECT_EQ(mockMetricsLibrary->getInitializationState(), ZE_RESULT_SUCCESS); + + EXPECT_EQ(zetContextActivateMetricGroups(context->toHandle(), metricDevice, 0, nullptr), ZE_RESULT_SUCCESS); +} + TEST_F(MultiDeviceMetricQueryPoolTest, givenSubDeviceWhenGetSubDeviceClientOptionsIsCalledThenReturnSubDeviceProperties) { auto &deviceImp = *static_cast(devices[0]); diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_1.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_1.cpp index aee4db57df..36762f1833 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_1.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_1.cpp @@ -33,7 +33,8 @@ TEST_F(MetricStreamerTest, givenInvalidMetricGroupTypeWhenZetMetricStreamerOpenI zet_metric_streamer_desc_t streamerDesc = {}; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -59,7 +60,8 @@ TEST_F(MetricStreamerTest, givenValidArgumentsWhenZetMetricStreamerOpenIsCalledT streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -133,7 +135,8 @@ TEST_F(MetricStreamerTest, givenRawReportSizeAsZeroWhenZetMetricStreamerOpenIsCa streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -207,7 +210,8 @@ TEST_F(MetricStreamerTest, givenValidArgumentsAndMetricGroupsIsNotActivatedWhenZ streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -264,7 +268,8 @@ TEST_F(MetricStreamerTest, givenValidArgumentsWhenZetMetricStreamerOpenIsCalledT streamerDesc.samplingPeriod = 1000; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -348,7 +353,8 @@ TEST_F(MetricStreamerTest, givenCorrectArgumentsWhenZetMetricQueryPoolCreateExtI streamerDesc.samplingPeriod = 1000; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricGroupProperties.samplingType = ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED; @@ -402,7 +408,8 @@ TEST_F(MetricStreamerTest, givenInvalidArgumentsWhenZetMetricStreamerReadDataIsC streamerDesc.samplingPeriod = 1000; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -481,7 +488,8 @@ TEST_F(MetricStreamerTest, givenValidArgumentsWhenZetMetricStreamerReadDataIsCal streamerDesc.samplingPeriod = 1000; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -564,7 +572,8 @@ TEST_F(MetricStreamerTest, givenValidArgumentsWhenZetMetricStreamerReadDataIsCal streamerDesc.stype = ZET_STRUCTURE_TYPE_METRIC_STREAMER_DESC; streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -643,7 +652,8 @@ TEST_F(MetricStreamerTest, givenInvalidArgumentsWhenZetCommandListAppendMetricSt streamerDesc.samplingPeriod = 1000; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -727,7 +737,8 @@ TEST_F(MetricStreamerTest, givenValidArgumentsWhenZetCommandListAppendMetricStre streamerDesc.samplingPeriod = 1000; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -828,7 +839,8 @@ TEST_F(MetricStreamerTest, givenMultipleMarkerInsertionsWhenZetCommandListAppend streamerDesc.samplingPeriod = 1000; // One api: metric group handle. - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_2.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_2.cpp index ea59b38f77..906de3aafa 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_2.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_2.cpp @@ -30,7 +30,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenInvalidMetricGroupTypeWhenZetMetricSt streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -95,8 +97,7 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerOp streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; - zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); + zet_metric_group_handle_t metricGroupHandle{}; zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -165,7 +166,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenEnableWalkerPartitionIsOnWhenZetMetri streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -234,7 +237,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerOp streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -287,7 +292,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsAndCloseIoStreamFailsWh streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -368,7 +375,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerOp streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -440,7 +449,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerRe streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -530,7 +541,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerRe streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -599,7 +612,9 @@ TEST_F(MetricStreamerMultiDeviceTest, givenMultipleMarkerInsertionsWhenZetComman streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricSource); + zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_3.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_3.cpp index 648749ef18..cb566a3ef7 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_3.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_oa_streamer_3.cpp @@ -36,7 +36,8 @@ TEST_F(MetricStreamerMultiDeviceTest, givenEnableWalkerPartitionIsOnWhenZetComma streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricOaSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr}; @@ -115,7 +116,8 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricGroupCalcu streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricOaSource = (static_cast(devices[0]))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); metricsDeviceParams.ConcurrentGroupsCount = 1; @@ -202,7 +204,8 @@ TEST_F(MetricStreamerTest, givenRawReportSizeIsNotAlignedToOaBufferSizeWhenZetMe streamerDesc.stype = ZET_STRUCTURE_TYPE_METRIC_STREAMER_DESC; streamerDesc.notifyEveryNReports = 32768; streamerDesc.samplingPeriod = 1000; - Mock metricGroup; + auto &metricOaSource = (static_cast(device))->getMetricDeviceContext().getMetricSource(); + Mock metricGroup(metricOaSource); zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle(); metricsDeviceParams.ConcurrentGroupsCount = 1;