Metric Api: Moved the initialization to zeInit

Change-Id: Ia390389e514facb3d81cc28d97bf017367e9f728
Signed-off-by: Robert Krzemien <robert.krzemien@intel.com>
This commit is contained in:
Robert Krzemien
2020-07-16 14:01:25 +02:00
committed by sys_ocldev
parent 70babc4b69
commit d76515a18d
15 changed files with 482 additions and 427 deletions

View File

@@ -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<ze_result_t>(0x70020000);
return;
return static_cast<ze_result_t>(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<ze_device_handle_t> 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<ze_result_t>(0x70020000);
return;
return static_cast<ze_result_t>(0x70020000);
}
}
return ZE_RESULT_SUCCESS;
}
std::unique_ptr<MetricContext> MetricContext::create(Device &device) {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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

View File

@@ -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<MetricsLibrary>::g_mockApi->MockGetData(data);
}
Mock<MetricEnumeration>::Mock(::L0::MetricContext &metricContext) : MetricEnumeration(metricContext) {
}
Mock<MetricEnumeration>::~Mock() {
}
MockMetricsDiscoveryApi *Mock<MetricEnumeration>::g_mockApi = nullptr;
TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDevice(IMetricsDevice_1_5 **device) {
return Mock<MetricEnumeration>::g_mockApi->MockOpenMetricsDevice(device);
}
TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDeviceFromFile(const char *fileName, void *openParams, IMetricsDevice_1_5 **device) {
return Mock<MetricEnumeration>::g_mockApi->MockOpenMetricsDeviceFromFile(fileName, openParams, device);
}
TCompletionCode MockMetricsDiscoveryApi::CloseMetricsDevice(IMetricsDevice_1_5 *device) {
return Mock<MetricEnumeration>::g_mockApi->MockCloseMetricsDevice(device);
}
TCompletionCode MockMetricsDiscoveryApi::SaveMetricsDeviceToFile(const char *fileName, void *saveParams, IMetricsDevice_1_5 *device) {
return Mock<MetricEnumeration>::g_mockApi->MockSaveMetricsDeviceToFile(fileName, saveParams, device);
}
void Mock<MetricEnumeration>::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<MetricEnumeration>::g_mockApi = mockedApi;
} else {
// Restore an original class used to communicate with metrics library.
metricContext.setMetricEnumeration(*metricEnumeration);
}
}
Mock<MetricQuery>::Mock() {}
Mock<MetricQuery>::~Mock() {}
@@ -223,206 +173,3 @@ Mock<MetricQueryPool>::~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

View File

@@ -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<MetricsLibrary> : 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<IMetricsDevice_1_5> : 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<IConcurrentGroup_1_5> : 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<IMetricSet_1_5> : 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<IMetric_1_0> : public IMetric_1_0 {
public:
Mock(){};
MOCK_METHOD(TMetricParams_1_0 *, GetParams, (), (override));
};
template <>
struct Mock<MetricEnumeration> : 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<MetricGroup> : 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<MetricQueryPool> : public MetricQueryPool {
Mock();

View File

@@ -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<MetricEnumeration>::Mock(::L0::MetricContext &metricContext) : MetricEnumeration(metricContext) {
}
Mock<MetricEnumeration>::~Mock() {
}
MockMetricsDiscoveryApi *Mock<MetricEnumeration>::g_mockApi = nullptr;
TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDevice(IMetricsDevice_1_5 **device) {
return Mock<MetricEnumeration>::g_mockApi->MockOpenMetricsDevice(device);
}
TCompletionCode MockMetricsDiscoveryApi::OpenMetricsDeviceFromFile(const char *fileName, void *openParams, IMetricsDevice_1_5 **device) {
return Mock<MetricEnumeration>::g_mockApi->MockOpenMetricsDeviceFromFile(fileName, openParams, device);
}
TCompletionCode MockMetricsDiscoveryApi::CloseMetricsDevice(IMetricsDevice_1_5 *device) {
return Mock<MetricEnumeration>::g_mockApi->MockCloseMetricsDevice(device);
}
TCompletionCode MockMetricsDiscoveryApi::SaveMetricsDeviceToFile(const char *fileName, void *saveParams, IMetricsDevice_1_5 *device) {
return Mock<MetricEnumeration>::g_mockApi->MockSaveMetricsDeviceToFile(fileName, saveParams, device);
}
void Mock<MetricEnumeration>::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<MetricEnumeration>::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

View File

@@ -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<IMetricsDevice_1_5> : 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<IConcurrentGroup_1_5> : 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<IMetricSet_1_5> : 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<IMetric_1_0> : public IMetric_1_0 {
public:
Mock(){};
MOCK_METHOD(TMetricParams_1_0 *, GetParams, (), (override));
};
template <>
struct Mock<MetricEnumeration> : 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<MetricGroup> : 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