mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 14:55:24 +08:00
Update sysman engine and scheduler as per lastest spec
Signed-off-by: Mayank Raghuwanshi <mayank.raghuwanshi@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
4c6e38c9e5
commit
1c3107fc7e
@@ -8,6 +8,8 @@
|
||||
#pragma once
|
||||
#include "shared/source/os_interface/linux/engine_info_impl.h"
|
||||
|
||||
#include "opencl/test/unit_test/os_interface/linux/drm_mock.h"
|
||||
|
||||
#include "level_zero/core/test/unit_tests/mock.h"
|
||||
#include "level_zero/core/test/unit_tests/mocks/mock_memory_manager.h"
|
||||
#include "level_zero/tools/source/sysman/engine/linux/os_engine_imp.h"
|
||||
@@ -23,13 +25,14 @@ constexpr int64_t mockPmuFd = 10;
|
||||
constexpr uint64_t mockTimestamp = 87654321;
|
||||
constexpr uint64_t mockActiveTime = 987654321;
|
||||
const uint32_t microSecondsToNanoSeconds = 1000u;
|
||||
constexpr uint16_t I915_INVALID_ENGINE_CLASS = UINT16_MAX;
|
||||
const std::string deviceDir("device");
|
||||
struct MockMemoryManagerInEngineSysman : public MemoryManagerMock {
|
||||
MockMemoryManagerInEngineSysman(NEO::ExecutionEnvironment &executionEnvironment) : MemoryManagerMock(const_cast<NEO::ExecutionEnvironment &>(executionEnvironment)) {}
|
||||
};
|
||||
class EngineNeoDrm : public Drm {
|
||||
public:
|
||||
using Drm::engineInfo;
|
||||
using Drm::getEngineInfo;
|
||||
const int mockFd = 0;
|
||||
EngineNeoDrm(RootDeviceEnvironment &rootDeviceEnvironment) : Drm(std::make_unique<HwDeviceId>(mockFd, ""), rootDeviceEnvironment) {}
|
||||
};
|
||||
@@ -38,7 +41,7 @@ struct Mock<EngineNeoDrm> : public EngineNeoDrm {
|
||||
Mock<EngineNeoDrm>(RootDeviceEnvironment &rootDeviceEnvironment) : EngineNeoDrm(rootDeviceEnvironment) {}
|
||||
|
||||
bool queryEngineInfoMockPositiveTest() {
|
||||
drm_i915_engine_info i915engineInfo[5] = {};
|
||||
drm_i915_engine_info i915engineInfo[6] = {};
|
||||
i915engineInfo[0].engine.engine_class = I915_ENGINE_CLASS_RENDER;
|
||||
i915engineInfo[0].engine.engine_instance = 0;
|
||||
i915engineInfo[1].engine.engine_class = I915_ENGINE_CLASS_VIDEO;
|
||||
@@ -49,8 +52,10 @@ struct Mock<EngineNeoDrm> : public EngineNeoDrm {
|
||||
i915engineInfo[3].engine.engine_instance = 0;
|
||||
i915engineInfo[4].engine.engine_class = I915_ENGINE_CLASS_VIDEO_ENHANCE;
|
||||
i915engineInfo[4].engine.engine_instance = 0;
|
||||
i915engineInfo[5].engine.engine_class = I915_INVALID_ENGINE_CLASS;
|
||||
i915engineInfo[5].engine.engine_instance = 0;
|
||||
|
||||
this->engineInfo.reset(new EngineInfoImpl(i915engineInfo, 5));
|
||||
this->engineInfo.reset(new EngineInfoImpl(i915engineInfo, 6));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -58,7 +63,7 @@ struct Mock<EngineNeoDrm> : public EngineNeoDrm {
|
||||
return false;
|
||||
}
|
||||
|
||||
MOCK_METHOD(bool, queryEngineInfo, (), (override));
|
||||
MOCK_METHOD(bool, sysmanQueryEngineInfo, (), (override));
|
||||
};
|
||||
|
||||
class MockPmuInterfaceImp : public PmuInterfaceImp {
|
||||
@@ -121,5 +126,12 @@ struct Mock<EngineSysfsAccess> : public EngineSysfsAccess {
|
||||
Mock<EngineSysfsAccess>() = default;
|
||||
};
|
||||
|
||||
class DrmMockEngineInfoFailing : public DrmMock {
|
||||
public:
|
||||
using DrmMock::DrmMock;
|
||||
DrmMockEngineInfoFailing(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMock(rootDeviceEnvironment) {}
|
||||
int handleRemainingRequests(unsigned long request, void *arg) override { return -1; }
|
||||
};
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
||||
@@ -14,7 +14,7 @@ using ::testing::Return;
|
||||
class OsEngine;
|
||||
namespace L0 {
|
||||
namespace ult {
|
||||
constexpr uint32_t handleComponentCount = 4u;
|
||||
constexpr uint32_t handleComponentCount = 5u;
|
||||
class ZesEngineFixture : public SysmanDeviceFixture {
|
||||
protected:
|
||||
std::unique_ptr<Mock<EngineNeoDrm>> pDrm;
|
||||
@@ -50,7 +50,7 @@ class ZesEngineFixture : public SysmanDeviceFixture {
|
||||
pOriginalPmuInterface = pLinuxSysmanImp->pPmuInterface;
|
||||
pLinuxSysmanImp->pDrm = pDrm.get();
|
||||
pLinuxSysmanImp->pPmuInterface = pPmuInterface.get();
|
||||
ON_CALL(*pDrm.get(), queryEngineInfo())
|
||||
ON_CALL(*pDrm.get(), sysmanQueryEngineInfo())
|
||||
.WillByDefault(::testing::Invoke(pDrm.get(), &Mock<EngineNeoDrm>::queryEngineInfoMockPositiveTest));
|
||||
|
||||
ON_CALL(*pPmuInterface.get(), perfEventOpen(_, _, _, _, _))
|
||||
@@ -116,6 +116,10 @@ TEST_F(ZesEngineFixture, GivenValidEngineHandlesWhenCallingZesEngineGetPropertie
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetProperties(handle[3], &properties));
|
||||
EXPECT_EQ(ZES_ENGINE_GROUP_COPY_SINGLE, properties.type);
|
||||
EXPECT_FALSE(properties.onSubdevice);
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetProperties(handle[4], &properties));
|
||||
EXPECT_EQ(ZES_ENGINE_GROUP_MEDIA_ENHANCEMENT_SINGLE, properties.type);
|
||||
EXPECT_FALSE(properties.onSubdevice);
|
||||
}
|
||||
|
||||
TEST_F(ZesEngineFixture, GivenValidEngineHandleAndIntegratedDeviceWhenCallingZesEngineGetActivityThenVerifyCallReturnsSuccess) {
|
||||
@@ -201,11 +205,35 @@ TEST_F(ZesEngineFixture, GivenValidEngineHandleWhenCallingZesEngineGetActivityAn
|
||||
|
||||
TEST_F(ZesEngineFixture, GivenValidOsSysmanPointerWhenRetrievingEngineTypeAndInstancesAndIfEngineInfoQueryFailsThenErrorIsReturned) {
|
||||
std::multimap<zes_engine_group_t, uint32_t> engineGroupInstance;
|
||||
ON_CALL(*pDrm.get(), queryEngineInfo())
|
||||
ON_CALL(*pDrm.get(), sysmanQueryEngineInfo())
|
||||
.WillByDefault(::testing::Invoke(pDrm.get(), &Mock<EngineNeoDrm>::queryEngineInfoMockReturnFalse));
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, OsEngine::getNumEngineTypeAndInstances(engineGroupInstance, pOsSysman));
|
||||
}
|
||||
|
||||
TEST_F(ZesEngineFixture, givenEngineInfoQuerySupportedWhenQueryingEngineInfoThenEngineInfoIsCreatedWithEngines) {
|
||||
auto drm = std::make_unique<DrmMockEngine>((const_cast<NEO::RootDeviceEnvironment &>(neoDevice->getRootDeviceEnvironment())));
|
||||
ASSERT_NE(nullptr, drm);
|
||||
drm->sysmanQueryEngineInfo();
|
||||
auto engineInfo = static_cast<EngineInfoImpl *>(drm->getEngineInfo());
|
||||
ASSERT_NE(nullptr, engineInfo);
|
||||
EXPECT_EQ(2u, engineInfo->engines.size());
|
||||
}
|
||||
|
||||
TEST_F(ZesEngineFixture, GivenEngineInfoWithVideoQuerySupportedWhenQueryingEngineInfoWithVideoThenEngineInfoIsCreatedWithEngines) {
|
||||
auto drm = std::make_unique<DrmMockEngine>((const_cast<NEO::RootDeviceEnvironment &>(neoDevice->getRootDeviceEnvironment())));
|
||||
ASSERT_NE(nullptr, drm);
|
||||
drm->sysmanQueryEngineInfo();
|
||||
auto engineInfo = static_cast<EngineInfoImpl *>(drm->getEngineInfo());
|
||||
ASSERT_NE(nullptr, engineInfo);
|
||||
EXPECT_EQ(2u, engineInfo->engines.size());
|
||||
}
|
||||
|
||||
TEST_F(ZesEngineFixture, GivenEngineInfoWithVideoQueryFailsThenFailureIsReturned) {
|
||||
auto drm = std::make_unique<DrmMockEngineInfoFailing>((const_cast<NEO::RootDeviceEnvironment &>(neoDevice->getRootDeviceEnvironment())));
|
||||
ASSERT_NE(nullptr, drm);
|
||||
EXPECT_FALSE(drm->sysmanQueryEngineInfo());
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -442,7 +442,7 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul
|
||||
ze_result_t result = zesSchedulerGetProperties(handle, &properties);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_TRUE(properties.canControl);
|
||||
EXPECT_LE(properties.engines, ZES_ENGINE_TYPE_FLAG_DMA);
|
||||
EXPECT_LE(properties.engines, ZES_ENGINE_TYPE_FLAG_RENDER);
|
||||
EXPECT_EQ(properties.supportedModes, static_cast<uint32_t>((1 << ZES_SCHED_MODE_TIMEOUT) | (1 << ZES_SCHED_MODE_TIMESLICE) | (1 << ZES_SCHED_MODE_EXCLUSIVE)));
|
||||
}
|
||||
}
|
||||
@@ -452,7 +452,7 @@ TEST_F(SysmanMultiDeviceFixture, GivenValidDevicePointerWhenGettingSchedProperti
|
||||
std::vector<std::string> listOfEngines;
|
||||
ze_device_properties_t deviceProperties = {};
|
||||
Device::fromHandle(device)->getProperties(&deviceProperties);
|
||||
LinuxSchedulerImp *pLinuxSchedulerImp = new LinuxSchedulerImp(pOsSysman, ZES_ENGINE_TYPE_FLAG_COMPUTE, listOfEngines,
|
||||
LinuxSchedulerImp *pLinuxSchedulerImp = new LinuxSchedulerImp(pOsSysman, ZES_ENGINE_TYPE_FLAG_RENDER, listOfEngines,
|
||||
deviceProperties.flags & ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE, deviceProperties.subdeviceId);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, pLinuxSchedulerImp->getProperties(properties));
|
||||
EXPECT_EQ(properties.subdeviceId, deviceProperties.subdeviceId);
|
||||
|
||||
Reference in New Issue
Block a user