mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
Change MemoryManager::lastPeriodicTrimFenceValue to a vector
Also start registering OsContext to MemoryManager in WddmMemoryManagerResidencyTest along with some cleanup in fixture's SetUp Change-Id: I3f6763ae0cd9bf638cdc5dbbfbc60dfb0fd0ef05 Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
cbd017d495
commit
ea9e7bea31
@@ -18,7 +18,7 @@ class MockWddmMemoryManager : public WddmMemoryManager {
|
||||
using BaseClass::checkTrimCandidateListCompaction;
|
||||
using BaseClass::compactTrimCandidateList;
|
||||
using BaseClass::createWddmAllocation;
|
||||
using BaseClass::lastPeriodicTrimFenceValue;
|
||||
using BaseClass::lastPeriodicTrimFenceValues;
|
||||
using BaseClass::removeFromTrimCandidateList;
|
||||
using BaseClass::trimCandidateList;
|
||||
using BaseClass::trimCandidatesCount;
|
||||
|
||||
@@ -25,22 +25,21 @@ using namespace ::testing;
|
||||
void WddmMemoryManagerFixture::SetUp() {
|
||||
GmmEnvironmentFixture::SetUp();
|
||||
GdiDllFixture::SetUp();
|
||||
wddm.reset(static_cast<WddmMock *>(Wddm::createWddm()));
|
||||
ASSERT_NE(nullptr, wddm);
|
||||
|
||||
wddm = static_cast<WddmMock *>(Wddm::createWddm());
|
||||
if (platformDevices[0]->capabilityTable.ftrRenderCompressedBuffers || platformDevices[0]->capabilityTable.ftrRenderCompressedImages) {
|
||||
GMM_DEVICE_CALLBACKS_INT dummyDeviceCallbacks = {};
|
||||
GMM_TRANSLATIONTABLE_CALLBACKS dummyTTCallbacks = {};
|
||||
wddm->resetPageTableManager(GmmPageTableMngr::create(&dummyDeviceCallbacks, 0, &dummyTTCallbacks));
|
||||
}
|
||||
EXPECT_TRUE(wddm->init());
|
||||
uint64_t heap32Base = (uint64_t)(0x800000000000);
|
||||
if (sizeof(uintptr_t) == 4) {
|
||||
heap32Base = 0x1000;
|
||||
}
|
||||
constexpr uint64_t heap32Base = (is32bit) ? 0x1000 : 0x800000000000;
|
||||
wddm->setHeap32(heap32Base, 1000 * MemoryConstants::pageSize - 1);
|
||||
memoryManager.reset(new (std::nothrow) MockWddmMemoryManager(wddm.get()));
|
||||
//assert we have memory manager
|
||||
ASSERT_NE(nullptr, memoryManager);
|
||||
|
||||
osInterface = std::make_unique<OSInterface>();
|
||||
osInterface->get()->setWddm(wddm);
|
||||
|
||||
memoryManager = std::make_unique<MockWddmMemoryManager>(wddm);
|
||||
}
|
||||
|
||||
TEST(WddmMemoryManager, NonCopyable) {
|
||||
@@ -53,6 +52,24 @@ TEST(WddmMemoryManager, NonAssignable) {
|
||||
EXPECT_FALSE(std::is_copy_assignable<WddmMemoryManager>::value);
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenRegisteringOsContextThenLastPeriodicTrimFenceValuesIsResizedAccordinglyToContextId) {
|
||||
memoryManager->registerOsContext(new OsContext(osInterface.get(), 0u));
|
||||
EXPECT_EQ(1, memoryManager->lastPeriodicTrimFenceValues.size());
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[0]);
|
||||
|
||||
memoryManager->registerOsContext(new OsContext(osInterface.get(), 2u));
|
||||
EXPECT_EQ(3, memoryManager->lastPeriodicTrimFenceValues.size());
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[0]);
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[1]);
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[2]);
|
||||
|
||||
memoryManager->registerOsContext(new OsContext(osInterface.get(), 1u));
|
||||
EXPECT_EQ(3, memoryManager->lastPeriodicTrimFenceValues.size());
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[0]);
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[1]);
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[2]);
|
||||
}
|
||||
|
||||
TEST(WddmMemoryManagerAllocator32BitTest, allocator32BitIsCreatedWithCorrectBase) {
|
||||
std::unique_ptr<WddmMock> wddm(static_cast<WddmMock *>(Wddm::createWddm()));
|
||||
uint64_t base = 0x56000;
|
||||
@@ -206,7 +223,6 @@ TEST_F(WddmMemoryManagerTest, givenDefaultWddmMemoryManagerWhenAskedForVirtualPa
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerTest, GivenGraphicsAllocationWhenAddAndRemoveAllocationToHostPtrManagerThenfragmentHasCorrectValues) {
|
||||
memoryManager.reset(new (std::nothrow) MockWddmMemoryManager(wddm.get()));
|
||||
void *cpuPtr = (void *)0x30000;
|
||||
size_t size = 0x1000;
|
||||
|
||||
@@ -1115,7 +1131,7 @@ TEST_F(WddmMemoryManagerResidencyTest, givenNotUsedAllocationsFromPreviousPeriod
|
||||
allocation2.getResidencyData().resident = true;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValue = 10;
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
// Set current fence value to greater value
|
||||
osContext->get()->getMonitoredFence().currentFenceValue = 20;
|
||||
|
||||
@@ -1151,7 +1167,7 @@ TEST_F(WddmMemoryManagerResidencyTest, givenOneUsedAllocationFromPreviousPeriodi
|
||||
allocation2.getResidencyData().resident = true;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValue = 10;
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
// Set current fence value to greater value
|
||||
osContext->get()->getMonitoredFence().currentFenceValue = 20;
|
||||
|
||||
@@ -1197,7 +1213,7 @@ TEST_F(WddmMemoryManagerResidencyTest, givenTripleAllocationWithUsedAndUnusedFra
|
||||
allocationTriple->fragmentsStorage.fragmentStorageData[2].residency->resident = true;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValue = 10;
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
// Set current fence value to greater value
|
||||
osContext->get()->getMonitoredFence().currentFenceValue = 20;
|
||||
|
||||
@@ -1226,14 +1242,14 @@ TEST_F(WddmMemoryManagerResidencyTest, givenPeriodicTrimWhenTrimCallbackCalledTh
|
||||
trimNotification.NumBytesToTrim = 0;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValue = 10;
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
// Set current fence value to greater value
|
||||
*osContext->get()->getMonitoredFence().cpuAddress = 20;
|
||||
|
||||
memoryManager->trimCandidateList.resize(0);
|
||||
memoryManager->trimResidency(trimNotification.Flags, trimNotification.NumBytesToTrim);
|
||||
|
||||
EXPECT_EQ(20u, memoryManager->lastPeriodicTrimFenceValue);
|
||||
EXPECT_EQ(20u, memoryManager->lastPeriodicTrimFenceValues[0]);
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerResidencyTest, givenRestartPeriodicTrimWhenTrimCallbackCalledThenLastPeriodicTrimFenceIsSetToCurrentFenceValue) {
|
||||
@@ -1244,14 +1260,14 @@ TEST_F(WddmMemoryManagerResidencyTest, givenRestartPeriodicTrimWhenTrimCallbackC
|
||||
trimNotification.NumBytesToTrim = 0;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValue = 10;
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
// Set current fence value to greater value
|
||||
*osContext->get()->getMonitoredFence().cpuAddress = 20;
|
||||
|
||||
memoryManager->trimCandidateList.resize(0);
|
||||
memoryManager->trimResidency(trimNotification.Flags, trimNotification.NumBytesToTrim);
|
||||
|
||||
EXPECT_EQ(20u, memoryManager->lastPeriodicTrimFenceValue);
|
||||
EXPECT_EQ(20u, memoryManager->lastPeriodicTrimFenceValues[0]);
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerResidencyTest, trimToBudgetWithZeroSizeReturnsTrue) {
|
||||
|
||||
@@ -32,9 +32,9 @@ class WddmMemoryManagerFixture : public GmmEnvironmentFixture, public GdiDllFixt
|
||||
GdiDllFixture::TearDown();
|
||||
GmmEnvironmentFixture::TearDown();
|
||||
}
|
||||
|
||||
std::unique_ptr<OSInterface> osInterface;
|
||||
std::unique_ptr<MockWddmMemoryManager> memoryManager;
|
||||
std::unique_ptr<WddmMock> wddm;
|
||||
WddmMock *wddm;
|
||||
};
|
||||
|
||||
typedef ::Test<WddmMemoryManagerFixture> WddmMemoryManagerTest;
|
||||
@@ -43,32 +43,34 @@ class MockWddmMemoryManagerFixture : public GmmEnvironmentFixture {
|
||||
public:
|
||||
void SetUp() {
|
||||
GmmEnvironmentFixture::SetUp();
|
||||
wddm = (static_cast<WddmMock *>(Wddm::createWddm()));
|
||||
|
||||
gdi = new MockGdi();
|
||||
|
||||
wddm = static_cast<WddmMock *>(Wddm::createWddm());
|
||||
wddm->gdi.reset(gdi);
|
||||
constexpr uint64_t heap32Base = (is32bit) ? 0x1000 : 0x800000000000;
|
||||
wddm->setHeap32(heap32Base, 1000 * MemoryConstants::pageSize - 1);
|
||||
EXPECT_TRUE(wddm->init());
|
||||
|
||||
osInterface = std::make_unique<OSInterface>();
|
||||
osInterface->get()->setWddm(wddm);
|
||||
gdi = new MockGdi();
|
||||
wddm->gdi.reset(gdi);
|
||||
EXPECT_TRUE(wddm->init());
|
||||
|
||||
osContext = new OsContext(osInterface.get(), 0u);
|
||||
osContext->incRefInternal();
|
||||
uint64_t heap32Base = (uint64_t)(0x800000000000);
|
||||
if (sizeof(uintptr_t) == 4) {
|
||||
heap32Base = 0x1000;
|
||||
}
|
||||
wddm->setHeap32(heap32Base, 1000 * MemoryConstants::pageSize - 1);
|
||||
memoryManager.reset(new (std::nothrow) MockWddmMemoryManager(wddm));
|
||||
//assert we have memory manager
|
||||
ASSERT_NE(nullptr, memoryManager);
|
||||
|
||||
memoryManager = std::make_unique<MockWddmMemoryManager>(wddm);
|
||||
memoryManager->registerOsContext(osContext);
|
||||
}
|
||||
|
||||
void TearDown() {
|
||||
osContext->decRefInternal();
|
||||
GmmEnvironmentFixture::TearDown();
|
||||
}
|
||||
|
||||
std::unique_ptr<OSInterface> osInterface;
|
||||
std::unique_ptr<MockWddmMemoryManager> memoryManager;
|
||||
WddmMock *wddm = nullptr;
|
||||
std::unique_ptr<OSInterface> osInterface;
|
||||
OsContext *osContext;
|
||||
OsContext *osContext = nullptr;
|
||||
MockGdi *gdi = nullptr;
|
||||
};
|
||||
|
||||
@@ -145,15 +147,6 @@ class BufferWithWddmMemory : public ::testing::Test,
|
||||
void SetUp() {
|
||||
WddmMemoryManagerFixture::SetUp();
|
||||
tmp = context.getMemoryManager();
|
||||
EXPECT_TRUE(wddm->init());
|
||||
uint64_t heap32Base = (uint64_t)(0x800000000000);
|
||||
if (sizeof(uintptr_t) == 4) {
|
||||
heap32Base = 0x1000;
|
||||
}
|
||||
wddm->setHeap32(heap32Base, 1000 * MemoryConstants::pageSize - 1);
|
||||
memoryManager.reset(new (std::nothrow) MockWddmMemoryManager(wddm.get()));
|
||||
//assert we have memory manager
|
||||
ASSERT_NE(nullptr, memoryManager);
|
||||
context.setMemoryManager(memoryManager.get());
|
||||
flags = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user