From d76515a18d82ccf6525f37761b01dda214ec0460 Mon Sep 17 00:00:00 2001 From: Robert Krzemien Date: Thu, 16 Jul 2020 14:01:25 +0200 Subject: [PATCH] Metric Api: Moved the initialization to zeInit Change-Id: Ia390389e514facb3d81cc28d97bf017367e9f728 Signed-off-by: Robert Krzemien --- level_zero/core/source/driver/driver.cpp | 26 +- level_zero/core/source/driver/driver.h | 2 +- level_zero/core/source/driver/driver_imp.h | 5 +- .../core/test/unit_tests/mocks/mock_driver.h | 4 +- .../unit_tests/sources/driver/test_driver.cpp | 27 +- level_zero/tools/source/metrics/metric.cpp | 27 +- level_zero/tools/source/metrics/metric.h | 4 +- level_zero/tools/source/tools_init_imp.cpp | 5 - .../unit_tests/sources/metrics/CMakeLists.txt | 4 +- .../sources/metrics/mock_metric.cpp | 253 ----------------- .../unit_tests/sources/metrics/mock_metric.h | 129 +-------- .../metrics/mock_metric_enumeration.cpp | 264 ++++++++++++++++++ .../sources/metrics/mock_metric_enumeration.h | 150 ++++++++++ opencl/test/unit_test/libult/io_functions.cpp | 1 + .../test/unit_test/mocks/mock_io_functions.h | 8 +- 15 files changed, 482 insertions(+), 427 deletions(-) create mode 100644 level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.cpp create mode 100644 level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.h diff --git a/level_zero/core/source/driver/driver.cpp b/level_zero/core/source/driver/driver.cpp index 8804e2fa63..4248470d77 100644 --- a/level_zero/core/source/driver/driver.cpp +++ b/level_zero/core/source/driver/driver.cpp @@ -13,8 +13,9 @@ #include "shared/source/os_interface/device_factory.h" #include "level_zero/core/source/device/device.h" -#include "level_zero/core/source/driver/driver_handle.h" +#include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/core/source/driver/driver_imp.h" +#include "level_zero/tools/source/metrics/metric.h" #include #include @@ -24,8 +25,8 @@ namespace L0 { _ze_driver_handle_t *GlobalDriverHandle; uint32_t driverCount = 1; -void DriverImp::initialize(bool *result) { - *result = false; +void DriverImp::initialize(ze_result_t *result) { + *result = ZE_RESULT_ERROR_UNINITIALIZED; NEO::EnvironmentVariableReader envReader; L0EnvVariables envVariables = {}; @@ -33,6 +34,8 @@ void DriverImp::initialize(bool *result) { envReader.getSetting("ZE_AFFINITY_MASK", std::string("")); envVariables.programDebugging = envReader.getSetting("ZET_ENABLE_PROGRAM_DEBUGGING", false); + envVariables.metrics = + envReader.getSetting("ZE_ENABLE_METRICS", false); auto executionEnvironment = new NEO::ExecutionEnvironment(); UNRECOVERABLE_IF(nullptr == executionEnvironment); @@ -47,20 +50,29 @@ void DriverImp::initialize(bool *result) { if (!neoDevices.empty()) { GlobalDriverHandle = DriverHandle::create(std::move(neoDevices), envVariables); if (GlobalDriverHandle != nullptr) { - *result = true; + *result = ZE_RESULT_SUCCESS; + + if (envVariables.metrics) { + *result = MetricContext::enableMetricApi(); + if (*result != ZE_RESULT_SUCCESS) { + delete GlobalDriver; + GlobalDriverHandle = nullptr; + GlobalDriver = nullptr; + } + } } } } -bool DriverImp::initStatus(false); +ze_result_t DriverImp::initStatus(ZE_RESULT_ERROR_UNINITIALIZED); ze_result_t DriverImp::driverInit(ze_init_flag_t flag) { std::call_once(initDriverOnce, [this]() { - bool result; + ze_result_t result; this->initialize(&result); initStatus = result; }); - return ((initStatus) ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_UNINITIALIZED); + return initStatus; } ze_result_t driverHandleGet(uint32_t *pCount, ze_driver_handle_t *phDriverHandles) { diff --git a/level_zero/core/source/driver/driver.h b/level_zero/core/source/driver/driver.h index ea4268c71a..1cfaa3608d 100644 --- a/level_zero/core/source/driver/driver.h +++ b/level_zero/core/source/driver/driver.h @@ -14,7 +14,7 @@ namespace L0 { struct Driver { virtual ze_result_t driverInit(_ze_init_flag_t) = 0; - virtual void initialize(bool *result) = 0; + virtual void initialize(ze_result_t *result) = 0; static Driver *get() { return driver; } virtual ~Driver() = default; diff --git a/level_zero/core/source/driver/driver_imp.h b/level_zero/core/source/driver/driver_imp.h index 1952308298..d5018cc9fd 100644 --- a/level_zero/core/source/driver/driver_imp.h +++ b/level_zero/core/source/driver/driver_imp.h @@ -18,16 +18,17 @@ class DriverImp : public Driver { public: ze_result_t driverInit(_ze_init_flag_t) override; - void initialize(bool *result) override; + void initialize(ze_result_t *result) override; protected: std::once_flag initDriverOnce; - static bool initStatus; + static ze_result_t initStatus; }; struct L0EnvVariables { std::string affinityMask; bool programDebugging; + bool metrics; }; } // namespace L0 diff --git a/level_zero/core/test/unit_tests/mocks/mock_driver.h b/level_zero/core/test/unit_tests/mocks/mock_driver.h index 4d6b9c2bfc..cc16e37a10 100644 --- a/level_zero/core/test/unit_tests/mocks/mock_driver.h +++ b/level_zero/core/test/unit_tests/mocks/mock_driver.h @@ -32,11 +32,11 @@ struct Mock : public Driver { (override)); MOCK_METHOD(void, initialize, - (bool *result), + (ze_result_t * result), (override)); ze_result_t mockInit(ze_init_flag_t) { return this->DriverImp::driverInit(ZE_INIT_FLAG_NONE); } - void mockInitialize(bool *result) { *result = true; } + void mockInitialize(ze_result_t *result) { *result = ZE_RESULT_SUCCESS; } Driver *previousDriver = nullptr; }; diff --git a/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp b/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp index 50fa7bd11e..9520a75b3b 100644 --- a/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp +++ b/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp @@ -95,26 +95,43 @@ TEST(DriverImpTest, givenDriverImpWhenInitializedThenEnvVariablesAreRead) { VariableBackup mockDeviceFlagBackup(&IoFunctions::returnMockEnvValue, true); VariableBackup mockGetenvCalledBackup(&IoFunctions::mockGetenvCalled, 0); + VariableBackup> notMockableEnvValuesBackup(&IoFunctions::notMockableEnvValues, {"ZE_ENABLE_METRICS"}); - bool result = false; + ze_result_t result = ZE_RESULT_ERROR_UNINITIALIZED; DriverImp driverImp; driverImp.initialize(&result); - EXPECT_TRUE(result); - EXPECT_LE(2u, IoFunctions::mockGetenvCalled); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + EXPECT_LE(3u, IoFunctions::mockGetenvCalled); delete L0::GlobalDriver; L0::GlobalDriverHandle = nullptr; L0::GlobalDriver = nullptr; } +TEST(DriverImpTest, givenMissingMetricApiDependenciesWhenInitializingDriverImpThenGlobalDriverHandleIsNull) { + NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo.get(); + hwInfo.capabilityTable.levelZeroSupported = true; + + VariableBackup mockDeviceFlagBackup(&IoFunctions::returnMockEnvValue, true); + VariableBackup mockGetenvCalledBackup(&IoFunctions::mockGetenvCalled, 0); + + ze_result_t result = ZE_RESULT_ERROR_UNINITIALIZED; + DriverImp driverImp; + driverImp.initialize(&result); + EXPECT_NE(ZE_RESULT_SUCCESS, result); + EXPECT_EQ(nullptr, L0::GlobalDriverHandle); + EXPECT_EQ(nullptr, L0::GlobalDriver); +} + TEST(DriverImpTest, givenEnabledProgramDebuggingWhenCreatingExecutionEnvironmentThenPerContextMemorySpaceIsTrue) { NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo.get(); hwInfo.capabilityTable.levelZeroSupported = true; VariableBackup mockDeviceFlagBackup(&IoFunctions::returnMockEnvValue, true); VariableBackup mockGetenvCalledBackup(&IoFunctions::mockGetenvCalled, 0); + VariableBackup> notMockableEnvValuesBackup(&IoFunctions::notMockableEnvValues, {"ZE_ENABLE_METRICS"}); - bool result = false; + ze_result_t result = ZE_RESULT_ERROR_UNINITIALIZED; DriverImp driverImp; driverImp.initialize(&result); @@ -133,7 +150,7 @@ TEST(DriverImpTest, givenNoProgramDebuggingEnvVarWhenCreatingExecutionEnvironmen VariableBackup mockDeviceFlagBackup(&IoFunctions::returnMockEnvValue, false); - bool result = false; + ze_result_t result = ZE_RESULT_ERROR_UNINITIALIZED; DriverImp driverImp; driverImp.initialize(&result); diff --git a/level_zero/tools/source/metrics/metric.cpp b/level_zero/tools/source/metrics/metric.cpp index e80e05c507..3d1dee34cc 100644 --- a/level_zero/tools/source/metrics/metric.cpp +++ b/level_zero/tools/source/metrics/metric.cpp @@ -158,40 +158,31 @@ bool MetricContextImp::isMetricGroupActivated(const zet_metric_group_handle_t hM ze_result_t MetricContextImp::activateMetricGroups() { return metricGroupDomains.activate(); } -void MetricContext::enableMetricApi(ze_result_t &result) { - if (!getenv_tobool("ZE_ENABLE_METRICS")) { - result = ZE_RESULT_SUCCESS; - return; - } - +ze_result_t MetricContext::enableMetricApi() { if (!isMetricApiAvailable()) { - result = static_cast(0x70020000); - return; + return static_cast(0x70020000); } DriverHandle *driverHandle = L0::DriverHandle::fromHandle(GlobalDriverHandle); uint32_t count = 0; - result = driverHandle->getDevice(&count, nullptr); - if (result != ZE_RESULT_SUCCESS) { - result = ZE_RESULT_ERROR_UNKNOWN; - return; + if (driverHandle->getDevice(&count, nullptr) != ZE_RESULT_SUCCESS) { + return ZE_RESULT_ERROR_UNINITIALIZED; } std::vector devices(count); - result = driverHandle->getDevice(&count, devices.data()); - if (result != ZE_RESULT_SUCCESS) { - result = ZE_RESULT_ERROR_UNKNOWN; - return; + if (driverHandle->getDevice(&count, devices.data()) != ZE_RESULT_SUCCESS) { + return ZE_RESULT_ERROR_UNINITIALIZED; } for (auto deviceHandle : devices) { Device *device = L0::Device::fromHandle(deviceHandle); if (!device->getMetricContext().loadDependencies()) { - result = static_cast(0x70020000); - return; + return static_cast(0x70020000); } } + + return ZE_RESULT_SUCCESS; } std::unique_ptr MetricContext::create(Device &device) { diff --git a/level_zero/tools/source/metrics/metric.h b/level_zero/tools/source/metrics/metric.h index 21835a92a7..add9640108 100644 --- a/level_zero/tools/source/metrics/metric.h +++ b/level_zero/tools/source/metrics/metric.h @@ -43,8 +43,8 @@ struct MetricContext { virtual void setMetricsLibrary(MetricsLibrary &metricsLibrary) = 0; virtual void setMetricEnumeration(MetricEnumeration &metricEnumeration) = 0; - // Called by zetInit. - static void enableMetricApi(ze_result_t &result); + // Called by zeInit. + static ze_result_t enableMetricApi(); // Metric groups activation. virtual ze_result_t activateMetricGroups() = 0; diff --git a/level_zero/tools/source/tools_init_imp.cpp b/level_zero/tools/source/tools_init_imp.cpp index 0c35de7586..02100f22a6 100644 --- a/level_zero/tools/source/tools_init_imp.cpp +++ b/level_zero/tools/source/tools_init_imp.cpp @@ -7,7 +7,6 @@ #include "level_zero/tools/source/tools_init_imp.h" -#include "level_zero/tools/source/metrics/metric.h" #include "level_zero/tools/source/pin/pin.h" #include "level_zero/tools/source/sysman/sysman.h" #include "level_zero/tools/source/tools_init.h" @@ -18,10 +17,6 @@ namespace L0 { static void enableTools(ze_result_t &result, ze_init_flag_t flag, bool *ptoolsAreEnabled) { - MetricContext::enableMetricApi(std::ref(result)); - if (result != ZE_RESULT_SUCCESS) { - return; - } SysmanHandleContext::init(flag); PinContext::init(flag, std::ref(result)); if (result != ZE_RESULT_SUCCESS) { 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 f46fec6692..fc04e8d008 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/CMakeLists.txt +++ b/level_zero/tools/test/unit_tests/sources/metrics/CMakeLists.txt @@ -8,8 +8,8 @@ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric.h - ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric_enumeration.h + ${CMAKE_CURRENT_SOURCE_DIR}/mock_metric_enumeration.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_metric_enumeration.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_metric_query_pool.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_metric_tracer.cpp diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.cpp b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.cpp index a71a709f99..cde45a6b88 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.cpp @@ -18,9 +18,6 @@ void MetricDeviceFixture::SetUp() { DeviceFixture::SetUp(); // Initialize metric api. - ze_result_t result = ZE_RESULT_SUCCESS; - MetricContext::enableMetricApi(result); - EXPECT_EQ(result, ZE_RESULT_SUCCESS); auto &metricContext = device->getMetricContext(); metricContext.setInitializationState(ZE_RESULT_SUCCESS); @@ -166,53 +163,6 @@ StatusCode MockMetricsLibraryApi::GetData(GetReportData_1_0 *data) { return Mock::g_mockApi->MockGetData(data); } -Mock::Mock(::L0::MetricContext &metricContext) : MetricEnumeration(metricContext) { -} - -Mock::~Mock() { -} - -MockMetricsDiscoveryApi *Mock::g_mockApi = nullptr; - -TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDevice(IMetricsDevice_1_5 **device) { - return Mock::g_mockApi->MockOpenMetricsDevice(device); -} - -TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDeviceFromFile(const char *fileName, void *openParams, IMetricsDevice_1_5 **device) { - return Mock::g_mockApi->MockOpenMetricsDeviceFromFile(fileName, openParams, device); -} - -TCompletionCode MockMetricsDiscoveryApi::CloseMetricsDevice(IMetricsDevice_1_5 *device) { - return Mock::g_mockApi->MockCloseMetricsDevice(device); -} - -TCompletionCode MockMetricsDiscoveryApi::SaveMetricsDeviceToFile(const char *fileName, void *saveParams, IMetricsDevice_1_5 *device) { - return Mock::g_mockApi->MockSaveMetricsDeviceToFile(fileName, saveParams, device); -} - -void Mock::setMockedApi(MockMetricsDiscoveryApi *mockedApi) { - - if (mockedApi) { - - // Mock class used to communicate with metrics library. - metricEnumeration = &metricContext.getMetricEnumeration(); - metricContext.setMetricEnumeration(*this); - - // Mock metrics library api functions. - openMetricsDevice = mockedApi->OpenMetricsDevice; - closeMetricsDevice = mockedApi->CloseMetricsDevice; - openMetricsDeviceFromFile = mockedApi->OpenMetricsDeviceFromFile; - - // Mock metrics library api. - Mock::g_mockApi = mockedApi; - - } else { - - // Restore an original class used to communicate with metrics library. - metricContext.setMetricEnumeration(*metricEnumeration); - } -} - Mock::Mock() {} Mock::~Mock() {} @@ -223,206 +173,3 @@ Mock::~Mock() {} } // namespace ult } // namespace L0 - -namespace MetricsDiscovery { - -IMetricsDevice_1_0::~IMetricsDevice_1_0() {} - -TMetricsDeviceParams_1_0 *IMetricsDevice_1_0::GetParams(void) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IConcurrentGroup_1_0 *IMetricsDevice_1_0::GetConcurrentGroup(uint32_t) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TGlobalSymbol_1_0 *IMetricsDevice_1_0::GetGlobalSymbol(uint32_t) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TTypedValue_1_0 *IMetricsDevice_1_0::GetGlobalSymbolValueByName(const char *name) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TCompletionCode IMetricsDevice_1_0::GetLastError(void) { - UNRECOVERABLE_IF(true); - return TCompletionCode::CC_ERROR_NOT_SUPPORTED; -} - -TCompletionCode IMetricsDevice_1_0::GetGpuCpuTimestamps(uint64_t *, uint64_t *, - uint32_t *) { - UNRECOVERABLE_IF(true); - return TCompletionCode::CC_ERROR_NOT_SUPPORTED; -} - -IConcurrentGroup_1_1 *IMetricsDevice_1_1::GetConcurrentGroup(uint32_t) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TMetricsDeviceParams_1_2 *MetricsDiscovery::IMetricsDevice_1_2::GetParams(void) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IOverride_1_2 *IMetricsDevice_1_2::GetOverride(unsigned int) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IOverride_1_2 *IMetricsDevice_1_2::GetOverrideByName(char const *) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IConcurrentGroup_1_5 *IMetricsDevice_1_5::GetConcurrentGroup(uint32_t) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IConcurrentGroup_1_0::~IConcurrentGroup_1_0() {} - -TConcurrentGroupParams_1_0 *IConcurrentGroup_1_0::GetParams(void) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IMetricSet_1_0 *IConcurrentGroup_1_0::GetMetricSet(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TCompletionCode IConcurrentGroup_1_0::OpenIoStream(IMetricSet_1_0 *metricSet, uint32_t processId, uint32_t *nsTimerPeriod, uint32_t *oaBufferSize) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -TCompletionCode IConcurrentGroup_1_0::ReadIoStream(uint32_t *reportsCount, char *reportData, uint32_t readFlags) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -TCompletionCode IConcurrentGroup_1_0::CloseIoStream(void) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -TCompletionCode IConcurrentGroup_1_0::WaitForReports(uint32_t milliseconds) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -IInformation_1_0 *IConcurrentGroup_1_0::GetIoMeasurementInformation(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IInformation_1_0 *IConcurrentGroup_1_0::GetIoGpuContextInformation(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IMetricSet_1_1 *IConcurrentGroup_1_1::GetMetricSet(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TCompletionCode IConcurrentGroup_1_3::SetIoStreamSamplingType(TSamplingType type) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -IMetricSet_1_5 *IConcurrentGroup_1_5::GetMetricSet(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IMetricSet_1_0::~IMetricSet_1_0() {} - -TMetricSetParams_1_0 *IMetricSet_1_0::GetParams(void) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IMetric_1_0 *IMetricSet_1_0::GetMetric(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IInformation_1_0 *IMetricSet_1_0::GetInformation(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IMetricSet_1_0 *IMetricSet_1_0::GetComplementaryMetricSet(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TCompletionCode IMetricSet_1_0::Activate(void) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -TCompletionCode IMetricSet_1_0::Deactivate(void) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -IMetric_1_0 *IMetricSet_1_0::AddCustomMetric( - const char *symbolName, const char *shortName, const char *groupName, const char *longName, const char *dxToOglAlias, - uint32_t usageFlagsMask, uint32_t apiMask, TMetricResultType resultType, const char *resultUnits, TMetricType metricType, - int64_t loWatermark, int64_t hiWatermark, THwUnitType hwType, const char *ioReadEquation, const char *deltaFunction, - const char *queryReadEquation, const char *normalizationEquation, const char *maxValueEquation, const char *signalName) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IMetricSet_1_1 ::~IMetricSet_1_1() {} - -TCompletionCode IMetricSet_1_1::SetApiFiltering(uint32_t apiMask) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -TCompletionCode IMetricSet_1_1::CalculateMetrics(const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, - uint32_t outSize, uint32_t *outReportCount, bool enableContextFiltering) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -TCompletionCode IMetricSet_1_1::CalculateIoMeasurementInformation(TTypedValue_1_0 *out, uint32_t outSize) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -IMetricSet_1_4 ::~IMetricSet_1_4() {} - -TMetricSetParams_1_4 *IMetricSet_1_4::GetParams(void) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -IMetricSet_1_5 *IMetricSet_1_5::GetComplementaryMetricSet(uint32_t index) { - UNRECOVERABLE_IF(true); - return nullptr; -} - -TCompletionCode IMetricSet_1_5::CalculateMetrics(const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, - uint32_t outSize, uint32_t *outReportCount, TTypedValue_1_0 *outMaxValues, uint32_t outMaxValuesSize) { - UNRECOVERABLE_IF(true); - return CC_ERROR_NOT_SUPPORTED; -} - -IMetric_1_0 ::~IMetric_1_0() {} - -TMetricParams_1_0 *IMetric_1_0::GetParams() { - UNRECOVERABLE_IF(true); - return nullptr; -} - -} // namespace MetricsDiscovery diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.h b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.h index dcd111eedc..fa215b3f07 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.h +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric.h @@ -13,15 +13,11 @@ #include "level_zero/tools/source/metrics/metric.h" #include "level_zero/tools/source/metrics/metric_enumeration_imp.h" #include "level_zero/tools/source/metrics/metric_query_imp.h" +#include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.h" namespace L0 { namespace ult { -template <> -struct WhiteBox<::L0::MetricGroup> : public ::L0::MetricGroup { - using BaseClass = ::L0::MetricGroup; -}; - template <> struct WhiteBox<::L0::MetricQuery> : public ::L0::MetricQuery { using BaseClass = ::L0::MetricQuery; @@ -32,7 +28,6 @@ struct WhiteBox<::L0::MetricQueryPool> : public ::L0::MetricQueryPool { using BaseClass = ::L0::MetricQuery; }; -using MetricGroup = WhiteBox<::L0::MetricGroup>; using MetricQuery = WhiteBox<::L0::MetricQuery>; using MetricQueryPool = WhiteBox<::L0::MetricQueryPool>; @@ -125,128 +120,6 @@ struct Mock : public MetricsLibrary { static MockMetricsLibraryApi *g_mockApi; }; -using MetricsDiscovery::IConcurrentGroup_1_5; -using MetricsDiscovery::IInformation_1_0; -using MetricsDiscovery::IMetric_1_0; -using MetricsDiscovery::IMetricsDevice_1_5; -using MetricsDiscovery::IMetricSet_1_0; -using MetricsDiscovery::IMetricSet_1_5; -using MetricsDiscovery::IOverride_1_2; -using MetricsDiscovery::TCompletionCode; -using MetricsDiscovery::TConcurrentGroupParams_1_0; -using MetricsDiscovery::TGlobalSymbol_1_0; -using MetricsDiscovery::TMetricParams_1_0; -using MetricsDiscovery::TMetricsDeviceParams_1_2; -using MetricsDiscovery::TMetricSetParams_1_4; -using MetricsDiscovery::TSamplingType; -using MetricsDiscovery::TTypedValue_1_0; - -struct MockMetricsDiscoveryApi { - - // Original api functions. - static TCompletionCode MD_STDCALL OpenMetricsDevice(IMetricsDevice_1_5 **device); - static TCompletionCode MD_STDCALL OpenMetricsDeviceFromFile(const char *fileName, void *openParams, IMetricsDevice_1_5 **device); - static TCompletionCode MD_STDCALL CloseMetricsDevice(IMetricsDevice_1_5 *device); - static TCompletionCode MD_STDCALL SaveMetricsDeviceToFile(const char *fileName, void *saveParams, IMetricsDevice_1_5 *device); - - // Mocked api functions. - MOCK_METHOD(TCompletionCode, MockOpenMetricsDevice, (IMetricsDevice_1_5 **)); - MOCK_METHOD(TCompletionCode, MockOpenMetricsDeviceFromFile, (const char *, void *, IMetricsDevice_1_5 **)); - MOCK_METHOD(TCompletionCode, MockCloseMetricsDevice, (IMetricsDevice_1_5 *)); - MOCK_METHOD(TCompletionCode, MockSaveMetricsDeviceToFile, (const char *, void *, IMetricsDevice_1_5 *)); -}; - -template <> -class Mock : public IMetricsDevice_1_5 { - public: - Mock(){}; - - MOCK_METHOD(TMetricsDeviceParams_1_2 *, GetParams, (), (override)); - MOCK_METHOD(IOverride_1_2 *, GetOverride, (uint32_t index), (override)); - MOCK_METHOD(IOverride_1_2 *, GetOverrideByName, (const char *symbolName), (override)); - MOCK_METHOD(IConcurrentGroup_1_5 *, GetConcurrentGroup, (uint32_t index), (override)); - MOCK_METHOD(TGlobalSymbol_1_0 *, GetGlobalSymbol, (uint32_t index), (override)); - MOCK_METHOD(TTypedValue_1_0 *, GetGlobalSymbolValueByName, (const char *name), (override)); - MOCK_METHOD(TCompletionCode, GetLastError, (), (override)); - MOCK_METHOD(TCompletionCode, GetGpuCpuTimestamps, (uint64_t * gpuTimestampNs, uint64_t *cpuTimestampNs, uint32_t *cpuId), (override)); -}; - -template <> -class Mock : public IConcurrentGroup_1_5 { - public: - Mock(){}; - - MOCK_METHOD(IMetricSet_1_5 *, GetMetricSet, (uint32_t index), (override)); - MOCK_METHOD(TConcurrentGroupParams_1_0 *, GetParams, (), (override)); - MOCK_METHOD(TCompletionCode, OpenIoStream, (IMetricSet_1_0 * metricSet, uint32_t processId, uint32_t *nsTimerPeriod, uint32_t *oaBufferSize), (override)); - MOCK_METHOD(TCompletionCode, ReadIoStream, (uint32_t * reportsCount, char *reportData, uint32_t readFlags), (override)); - MOCK_METHOD(TCompletionCode, CloseIoStream, (), (override)); - MOCK_METHOD(TCompletionCode, WaitForReports, (uint32_t milliseconds), (override)); - MOCK_METHOD(TCompletionCode, SetIoStreamSamplingType, (TSamplingType type), (override)); - MOCK_METHOD(IInformation_1_0 *, GetIoMeasurementInformation, (uint32_t index), (override)); - MOCK_METHOD(IInformation_1_0 *, GetIoGpuContextInformation, (uint32_t index), (override)); -}; - -template <> -class Mock : public IMetricSet_1_5 { - public: - Mock(){}; - - MOCK_METHOD(TMetricSetParams_1_4 *, GetParams, (), (override)); - MOCK_METHOD(IMetric_1_0 *, GetMetric, (uint32_t index), (override)); - MOCK_METHOD(IInformation_1_0 *, GetInformation, (uint32_t index), (override)); - MOCK_METHOD(TCompletionCode, Activate, (), (override)); - MOCK_METHOD(TCompletionCode, Deactivate, (), (override)); - MOCK_METHOD(TCompletionCode, SetApiFiltering, (uint32_t apiMask), (override)); - MOCK_METHOD(TCompletionCode, CalculateMetrics, (const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, uint32_t outSize, uint32_t *outReportCount, bool enableContextFiltering), (override)); - MOCK_METHOD(TCompletionCode, CalculateIoMeasurementInformation, (TTypedValue_1_0 * out, uint32_t outSize), (override)); - MOCK_METHOD(IMetricSet_1_5 *, GetComplementaryMetricSet, (uint32_t index), (override)); - MOCK_METHOD(TCompletionCode, CalculateMetrics, (const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, uint32_t outSize, uint32_t *outReportCount, TTypedValue_1_0 *outMaxValues, uint32_t outMaxValuesSize), (override)); -}; - -template <> -class Mock : public IMetric_1_0 { - public: - Mock(){}; - - MOCK_METHOD(TMetricParams_1_0 *, GetParams, (), (override)); -}; - -template <> -struct Mock : public MetricEnumeration { - Mock(::L0::MetricContext &metricContext); - ~Mock() override; - - // Api mock enable/disable. - void setMockedApi(MockMetricsDiscoveryApi *mockedApi); - - // Mock metric enumeration functions. - MOCK_METHOD(bool, isInitialized, (), (override)); - MOCK_METHOD(ze_result_t, loadMetricsDiscovery, (), (override)); - - // Mock metrics discovery api. - static MockMetricsDiscoveryApi *g_mockApi; - - // Original metric enumeration obtained from metric context. - ::L0::MetricEnumeration *metricEnumeration = nullptr; -}; - -template <> -struct Mock : public MetricGroup { - Mock() {} - - 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(uint32_t, getRawReportSize, (), (override)); - MOCK_METHOD(bool, activate, (), (override)); - MOCK_METHOD(bool, deactivate, (), (override)); - MOCK_METHOD(ze_result_t, waitForReports, (const uint32_t), (override)); - MOCK_METHOD(ze_result_t, openIoStream, (uint32_t &, uint32_t &), (override)); - MOCK_METHOD(ze_result_t, readIoStream, (uint32_t &, uint8_t &), (override)); - MOCK_METHOD(ze_result_t, closeIoStream, (), (override)); -}; - template <> struct Mock : public MetricQueryPool { Mock(); diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.cpp b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.cpp new file mode 100644 index 0000000000..182d690e90 --- /dev/null +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.cpp @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric.h" + +namespace L0 { +namespace ult { + +Mock::Mock(::L0::MetricContext &metricContext) : MetricEnumeration(metricContext) { +} + +Mock::~Mock() { +} + +MockMetricsDiscoveryApi *Mock::g_mockApi = nullptr; + +TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDevice(IMetricsDevice_1_5 **device) { + return Mock::g_mockApi->MockOpenMetricsDevice(device); +} + +TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDeviceFromFile(const char *fileName, void *openParams, IMetricsDevice_1_5 **device) { + return Mock::g_mockApi->MockOpenMetricsDeviceFromFile(fileName, openParams, device); +} + +TCompletionCode MockMetricsDiscoveryApi::CloseMetricsDevice(IMetricsDevice_1_5 *device) { + return Mock::g_mockApi->MockCloseMetricsDevice(device); +} + +TCompletionCode MockMetricsDiscoveryApi::SaveMetricsDeviceToFile(const char *fileName, void *saveParams, IMetricsDevice_1_5 *device) { + return Mock::g_mockApi->MockSaveMetricsDeviceToFile(fileName, saveParams, device); +} + +void Mock::setMockedApi(MockMetricsDiscoveryApi *mockedApi) { + + if (mockedApi) { + + // Mock class used to communicate with metrics library. + metricEnumeration = &metricContext.getMetricEnumeration(); + metricContext.setMetricEnumeration(*this); + + // Mock metrics library api functions. + openMetricsDevice = mockedApi->OpenMetricsDevice; + closeMetricsDevice = mockedApi->CloseMetricsDevice; + openMetricsDeviceFromFile = mockedApi->OpenMetricsDeviceFromFile; + + // Mock metrics library api. + Mock::g_mockApi = mockedApi; + + } else { + + // Restore an original class used to communicate with metrics library. + metricContext.setMetricEnumeration(*metricEnumeration); + } +} + +} // namespace ult +} // namespace L0 + +namespace MetricsDiscovery { + +IMetricsDevice_1_0::~IMetricsDevice_1_0() {} + +TMetricsDeviceParams_1_0 *IMetricsDevice_1_0::GetParams(void) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IConcurrentGroup_1_0 *IMetricsDevice_1_0::GetConcurrentGroup(uint32_t) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TGlobalSymbol_1_0 *IMetricsDevice_1_0::GetGlobalSymbol(uint32_t) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TTypedValue_1_0 *IMetricsDevice_1_0::GetGlobalSymbolValueByName(const char *name) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TCompletionCode IMetricsDevice_1_0::GetLastError(void) { + UNRECOVERABLE_IF(true); + return TCompletionCode::CC_ERROR_NOT_SUPPORTED; +} + +TCompletionCode IMetricsDevice_1_0::GetGpuCpuTimestamps(uint64_t *, uint64_t *, + uint32_t *) { + UNRECOVERABLE_IF(true); + return TCompletionCode::CC_ERROR_NOT_SUPPORTED; +} + +IConcurrentGroup_1_1 *IMetricsDevice_1_1::GetConcurrentGroup(uint32_t) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TMetricsDeviceParams_1_2 *MetricsDiscovery::IMetricsDevice_1_2::GetParams(void) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IOverride_1_2 *IMetricsDevice_1_2::GetOverride(unsigned int) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IOverride_1_2 *IMetricsDevice_1_2::GetOverrideByName(char const *) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IConcurrentGroup_1_5 *IMetricsDevice_1_5::GetConcurrentGroup(uint32_t) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IConcurrentGroup_1_0::~IConcurrentGroup_1_0() {} + +TConcurrentGroupParams_1_0 *IConcurrentGroup_1_0::GetParams(void) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IMetricSet_1_0 *IConcurrentGroup_1_0::GetMetricSet(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TCompletionCode IConcurrentGroup_1_0::OpenIoStream(IMetricSet_1_0 *metricSet, uint32_t processId, uint32_t *nsTimerPeriod, uint32_t *oaBufferSize) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +TCompletionCode IConcurrentGroup_1_0::ReadIoStream(uint32_t *reportsCount, char *reportData, uint32_t readFlags) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +TCompletionCode IConcurrentGroup_1_0::CloseIoStream(void) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +TCompletionCode IConcurrentGroup_1_0::WaitForReports(uint32_t milliseconds) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +IInformation_1_0 *IConcurrentGroup_1_0::GetIoMeasurementInformation(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IInformation_1_0 *IConcurrentGroup_1_0::GetIoGpuContextInformation(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IMetricSet_1_1 *IConcurrentGroup_1_1::GetMetricSet(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TCompletionCode IConcurrentGroup_1_3::SetIoStreamSamplingType(TSamplingType type) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +IMetricSet_1_5 *IConcurrentGroup_1_5::GetMetricSet(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IMetricSet_1_0::~IMetricSet_1_0() {} + +TMetricSetParams_1_0 *IMetricSet_1_0::GetParams(void) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IMetric_1_0 *IMetricSet_1_0::GetMetric(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IInformation_1_0 *IMetricSet_1_0::GetInformation(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IMetricSet_1_0 *IMetricSet_1_0::GetComplementaryMetricSet(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TCompletionCode IMetricSet_1_0::Activate(void) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +TCompletionCode IMetricSet_1_0::Deactivate(void) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +IMetric_1_0 *IMetricSet_1_0::AddCustomMetric( + const char *symbolName, const char *shortName, const char *groupName, const char *longName, const char *dxToOglAlias, + uint32_t usageFlagsMask, uint32_t apiMask, TMetricResultType resultType, const char *resultUnits, TMetricType metricType, + int64_t loWatermark, int64_t hiWatermark, THwUnitType hwType, const char *ioReadEquation, const char *deltaFunction, + const char *queryReadEquation, const char *normalizationEquation, const char *maxValueEquation, const char *signalName) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IMetricSet_1_1 ::~IMetricSet_1_1() {} + +TCompletionCode IMetricSet_1_1::SetApiFiltering(uint32_t apiMask) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +TCompletionCode IMetricSet_1_1::CalculateMetrics(const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, + uint32_t outSize, uint32_t *outReportCount, bool enableContextFiltering) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +TCompletionCode IMetricSet_1_1::CalculateIoMeasurementInformation(TTypedValue_1_0 *out, uint32_t outSize) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +IMetricSet_1_4 ::~IMetricSet_1_4() {} + +TMetricSetParams_1_4 *IMetricSet_1_4::GetParams(void) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +IMetricSet_1_5 *IMetricSet_1_5::GetComplementaryMetricSet(uint32_t index) { + UNRECOVERABLE_IF(true); + return nullptr; +} + +TCompletionCode IMetricSet_1_5::CalculateMetrics(const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, + uint32_t outSize, uint32_t *outReportCount, TTypedValue_1_0 *outMaxValues, uint32_t outMaxValuesSize) { + UNRECOVERABLE_IF(true); + return CC_ERROR_NOT_SUPPORTED; +} + +IMetric_1_0 ::~IMetric_1_0() {} + +TMetricParams_1_0 *IMetric_1_0::GetParams() { + UNRECOVERABLE_IF(true); + return nullptr; +} + +} // namespace MetricsDiscovery 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 new file mode 100644 index 0000000000..ac409ff5dd --- /dev/null +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_enumeration.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once +#include "level_zero/core/source/device/device.h" +#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h" +#include "level_zero/core/test/unit_tests/mock.h" +#include "level_zero/core/test/unit_tests/white_box.h" +#include "level_zero/tools/source/metrics/metric.h" +#include "level_zero/tools/source/metrics/metric_enumeration_imp.h" +#include "level_zero/tools/source/metrics/metric_query_imp.h" + +namespace L0 { +namespace ult { + +template <> +struct WhiteBox<::L0::MetricGroup> : public ::L0::MetricGroup { + using BaseClass = ::L0::MetricGroup; +}; + +using MetricGroup = WhiteBox<::L0::MetricGroup>; + +using MetricsDiscovery::IConcurrentGroup_1_5; +using MetricsDiscovery::IInformation_1_0; +using MetricsDiscovery::IMetric_1_0; +using MetricsDiscovery::IMetricsDevice_1_5; +using MetricsDiscovery::IMetricSet_1_0; +using MetricsDiscovery::IMetricSet_1_5; +using MetricsDiscovery::IOverride_1_2; +using MetricsDiscovery::TCompletionCode; +using MetricsDiscovery::TConcurrentGroupParams_1_0; +using MetricsDiscovery::TGlobalSymbol_1_0; +using MetricsDiscovery::TMetricParams_1_0; +using MetricsDiscovery::TMetricsDeviceParams_1_2; +using MetricsDiscovery::TMetricSetParams_1_4; +using MetricsDiscovery::TSamplingType; +using MetricsDiscovery::TTypedValue_1_0; + +struct MockMetricsDiscoveryApi { + + // Original api functions. + static TCompletionCode MD_STDCALL OpenMetricsDevice(IMetricsDevice_1_5 **device); + static TCompletionCode MD_STDCALL OpenMetricsDeviceFromFile(const char *fileName, void *openParams, IMetricsDevice_1_5 **device); + static TCompletionCode MD_STDCALL CloseMetricsDevice(IMetricsDevice_1_5 *device); + static TCompletionCode MD_STDCALL SaveMetricsDeviceToFile(const char *fileName, void *saveParams, IMetricsDevice_1_5 *device); + + // Mocked api functions. + MOCK_METHOD(TCompletionCode, MockOpenMetricsDevice, (IMetricsDevice_1_5 **)); + MOCK_METHOD(TCompletionCode, MockOpenMetricsDeviceFromFile, (const char *, void *, IMetricsDevice_1_5 **)); + MOCK_METHOD(TCompletionCode, MockCloseMetricsDevice, (IMetricsDevice_1_5 *)); + MOCK_METHOD(TCompletionCode, MockSaveMetricsDeviceToFile, (const char *, void *, IMetricsDevice_1_5 *)); +}; + +template <> +class Mock : public IMetricsDevice_1_5 { + public: + Mock(){}; + + MOCK_METHOD(TMetricsDeviceParams_1_2 *, GetParams, (), (override)); + MOCK_METHOD(IOverride_1_2 *, GetOverride, (uint32_t index), (override)); + MOCK_METHOD(IOverride_1_2 *, GetOverrideByName, (const char *symbolName), (override)); + MOCK_METHOD(IConcurrentGroup_1_5 *, GetConcurrentGroup, (uint32_t index), (override)); + MOCK_METHOD(TGlobalSymbol_1_0 *, GetGlobalSymbol, (uint32_t index), (override)); + MOCK_METHOD(TTypedValue_1_0 *, GetGlobalSymbolValueByName, (const char *name), (override)); + MOCK_METHOD(TCompletionCode, GetLastError, (), (override)); + MOCK_METHOD(TCompletionCode, GetGpuCpuTimestamps, (uint64_t * gpuTimestampNs, uint64_t *cpuTimestampNs, uint32_t *cpuId), (override)); +}; + +template <> +class Mock : public IConcurrentGroup_1_5 { + public: + Mock(){}; + + MOCK_METHOD(IMetricSet_1_5 *, GetMetricSet, (uint32_t index), (override)); + MOCK_METHOD(TConcurrentGroupParams_1_0 *, GetParams, (), (override)); + MOCK_METHOD(TCompletionCode, OpenIoStream, (IMetricSet_1_0 * metricSet, uint32_t processId, uint32_t *nsTimerPeriod, uint32_t *oaBufferSize), (override)); + MOCK_METHOD(TCompletionCode, ReadIoStream, (uint32_t * reportsCount, char *reportData, uint32_t readFlags), (override)); + MOCK_METHOD(TCompletionCode, CloseIoStream, (), (override)); + MOCK_METHOD(TCompletionCode, WaitForReports, (uint32_t milliseconds), (override)); + MOCK_METHOD(TCompletionCode, SetIoStreamSamplingType, (TSamplingType type), (override)); + MOCK_METHOD(IInformation_1_0 *, GetIoMeasurementInformation, (uint32_t index), (override)); + MOCK_METHOD(IInformation_1_0 *, GetIoGpuContextInformation, (uint32_t index), (override)); +}; + +template <> +class Mock : public IMetricSet_1_5 { + public: + Mock(){}; + + MOCK_METHOD(TMetricSetParams_1_4 *, GetParams, (), (override)); + MOCK_METHOD(IMetric_1_0 *, GetMetric, (uint32_t index), (override)); + MOCK_METHOD(IInformation_1_0 *, GetInformation, (uint32_t index), (override)); + MOCK_METHOD(TCompletionCode, Activate, (), (override)); + MOCK_METHOD(TCompletionCode, Deactivate, (), (override)); + MOCK_METHOD(TCompletionCode, SetApiFiltering, (uint32_t apiMask), (override)); + MOCK_METHOD(TCompletionCode, CalculateMetrics, (const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, uint32_t outSize, uint32_t *outReportCount, bool enableContextFiltering), (override)); + MOCK_METHOD(TCompletionCode, CalculateIoMeasurementInformation, (TTypedValue_1_0 * out, uint32_t outSize), (override)); + MOCK_METHOD(IMetricSet_1_5 *, GetComplementaryMetricSet, (uint32_t index), (override)); + MOCK_METHOD(TCompletionCode, CalculateMetrics, (const unsigned char *rawData, uint32_t rawDataSize, TTypedValue_1_0 *out, uint32_t outSize, uint32_t *outReportCount, TTypedValue_1_0 *outMaxValues, uint32_t outMaxValuesSize), (override)); +}; + +template <> +class Mock : public IMetric_1_0 { + public: + Mock(){}; + + MOCK_METHOD(TMetricParams_1_0 *, GetParams, (), (override)); +}; + +template <> +struct Mock : public MetricEnumeration { + Mock(::L0::MetricContext &metricContext); + ~Mock() override; + + // Api mock enable/disable. + void setMockedApi(MockMetricsDiscoveryApi *mockedApi); + + // Mock metric enumeration functions. + MOCK_METHOD(bool, isInitialized, (), (override)); + MOCK_METHOD(ze_result_t, loadMetricsDiscovery, (), (override)); + + // Mock metrics discovery api. + static MockMetricsDiscoveryApi *g_mockApi; + + // Original metric enumeration obtained from metric context. + ::L0::MetricEnumeration *metricEnumeration = nullptr; +}; + +template <> +struct Mock : public MetricGroup { + Mock() {} + + 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(uint32_t, getRawReportSize, (), (override)); + MOCK_METHOD(bool, activate, (), (override)); + MOCK_METHOD(bool, deactivate, (), (override)); + MOCK_METHOD(ze_result_t, waitForReports, (const uint32_t), (override)); + MOCK_METHOD(ze_result_t, openIoStream, (uint32_t &, uint32_t &), (override)); + MOCK_METHOD(ze_result_t, readIoStream, (uint32_t &, uint8_t &), (override)); + MOCK_METHOD(ze_result_t, closeIoStream, (), (override)); +}; + +} // namespace ult +} // namespace L0 diff --git a/opencl/test/unit_test/libult/io_functions.cpp b/opencl/test/unit_test/libult/io_functions.cpp index c7e6848509..2f39e262ef 100644 --- a/opencl/test/unit_test/libult/io_functions.cpp +++ b/opencl/test/unit_test/libult/io_functions.cpp @@ -21,6 +21,7 @@ uint32_t mockGetenvCalled = 0; bool returnMockEnvValue = false; std::string mockEnvValue = "1"; +std::set notMockableEnvValues = {""}; } // namespace IoFunctions } // namespace NEO diff --git a/opencl/test/unit_test/mocks/mock_io_functions.h b/opencl/test/unit_test/mocks/mock_io_functions.h index bf023deb77..490b7eb134 100644 --- a/opencl/test/unit_test/mocks/mock_io_functions.h +++ b/opencl/test/unit_test/mocks/mock_io_functions.h @@ -9,6 +9,7 @@ #include "shared/source/utilities/io_functions.h" #include +#include #include namespace NEO { @@ -20,6 +21,7 @@ extern uint32_t mockGetenvCalled; extern bool returnMockEnvValue; extern std::string mockEnvValue; +extern std::set notMockableEnvValues; inline FILE *mockFopen(const char *filename, const char *mode) { mockFopenCalled++; @@ -38,8 +40,10 @@ inline int mockFclose(FILE *stream) { inline char *mockGetenv(const char *name) noexcept { mockGetenvCalled++; - if (returnMockEnvValue) { - return const_cast(mockEnvValue.c_str()); + if (notMockableEnvValues.find(name) == notMockableEnvValues.end()) { + if (returnMockEnvValue) { + return const_cast(mockEnvValue.c_str()); + } } return getenv(name); }