mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-07 21:27:04 +08:00
Create WddmResidencyController to encapsulate basic residency data
Change-Id: I6dd94405ca5ea3a13b137c1e0ead72e615d36e00 Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
88bd89cb58
commit
b2dd8a9a1d
@@ -67,6 +67,7 @@ class WddmCommandStreamFixture {
|
||||
|
||||
mockWddmMM = new MockWddmMemoryManager(wddm, *executionEnvironment);
|
||||
memManager.reset(mockWddmMM);
|
||||
memManager->registerOsContext(new OsContext(executionEnvironment->osInterface.get(), 0u));
|
||||
csr->setMemoryManager(memManager.get());
|
||||
|
||||
ASSERT_NE(nullptr, memManager);
|
||||
@@ -266,6 +267,7 @@ TEST(WddmPreemptionHeaderTests, givenWddmCommandStreamReceiverWhenPreemptionIsOf
|
||||
BatchBuffer batchBuffer{cs.getGraphicsAllocation(), 0, 0, nullptr, false, false, QueueThrottle::MEDIUM, cs.getUsed(), &cs};
|
||||
OsContext *osContext = new OsContext(executionEnvironment.osInterface.get(), 0u);
|
||||
osContext->incRefInternal();
|
||||
executionEnvironment.memoryManager->registerOsContext(osContext);
|
||||
executionEnvironment.commandStreamReceivers[0u]->flush(batchBuffer, EngineType::ENGINE_RCS, executionEnvironment.commandStreamReceivers[0u]->getResidencyAllocations(), *osContext);
|
||||
auto commandHeader = wddm->submitResult.commandHeaderSubmitted;
|
||||
COMMAND_BUFFER_HEADER *pHeader = reinterpret_cast<COMMAND_BUFFER_HEADER *>(commandHeader);
|
||||
@@ -293,6 +295,7 @@ TEST(WddmPreemptionHeaderTests, givenWddmCommandStreamReceiverWhenPreemptionIsOn
|
||||
BatchBuffer batchBuffer{cs.getGraphicsAllocation(), 0, 0, nullptr, false, false, QueueThrottle::MEDIUM, cs.getUsed(), &cs};
|
||||
OsContext *osContext = new OsContext(executionEnvironment.osInterface.get(), 0u);
|
||||
osContext->incRefInternal();
|
||||
executionEnvironment.memoryManager->registerOsContext(osContext);
|
||||
executionEnvironment.commandStreamReceivers[0u]->flush(batchBuffer, EngineType::ENGINE_RCS, executionEnvironment.commandStreamReceivers[0u]->getResidencyAllocations(), *osContext);
|
||||
auto commandHeader = wddm->submitResult.commandHeaderSubmitted;
|
||||
COMMAND_BUFFER_HEADER *pHeader = reinterpret_cast<COMMAND_BUFFER_HEADER *>(commandHeader);
|
||||
|
||||
@@ -18,8 +18,8 @@ class MockWddmMemoryManager : public WddmMemoryManager {
|
||||
using BaseClass::checkTrimCandidateListCompaction;
|
||||
using BaseClass::compactTrimCandidateList;
|
||||
using BaseClass::createWddmAllocation;
|
||||
using BaseClass::lastPeriodicTrimFenceValues;
|
||||
using BaseClass::removeFromTrimCandidateList;
|
||||
using BaseClass::residencyControllers;
|
||||
using BaseClass::trimCandidateList;
|
||||
using BaseClass::trimCandidatesCount;
|
||||
using BaseClass::trimResidency;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "runtime/mem_obj/image.h"
|
||||
#include "runtime/os_interface/os_library.h"
|
||||
#include "runtime/os_interface/windows/os_context_win.h"
|
||||
#include "runtime/os_interface/windows/wddm_residency_controller.h"
|
||||
#include "runtime/platform/platform.h"
|
||||
#include "runtime/utilities/tag_allocator.h"
|
||||
|
||||
@@ -54,22 +55,22 @@ TEST(WddmMemoryManager, NonAssignable) {
|
||||
EXPECT_FALSE(std::is_copy_assignable<WddmMemoryManager>::value);
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenRegisteringOsContextThenLastPeriodicTrimFenceValuesIsResizedAccordinglyToContextId) {
|
||||
TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenRegisteringOsContextThenResidencyControllersIsResizedAccordinglyToContextId) {
|
||||
memoryManager->registerOsContext(new OsContext(osInterface.get(), 0u));
|
||||
EXPECT_EQ(1, memoryManager->lastPeriodicTrimFenceValues.size());
|
||||
EXPECT_EQ(0, memoryManager->lastPeriodicTrimFenceValues[0]);
|
||||
EXPECT_EQ(1u, memoryManager->residencyControllers.size());
|
||||
EXPECT_EQ(0u, memoryManager->residencyControllers[0]->getLastTrimFenceValue());
|
||||
|
||||
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]);
|
||||
EXPECT_EQ(3u, memoryManager->residencyControllers.size());
|
||||
EXPECT_EQ(0u, memoryManager->residencyControllers[0]->getLastTrimFenceValue());
|
||||
EXPECT_EQ(nullptr, memoryManager->residencyControllers[1]);
|
||||
EXPECT_EQ(0u, memoryManager->residencyControllers[2]->getLastTrimFenceValue());
|
||||
|
||||
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]);
|
||||
EXPECT_EQ(3u, memoryManager->residencyControllers.size());
|
||||
EXPECT_EQ(0u, memoryManager->residencyControllers[0]->getLastTrimFenceValue());
|
||||
EXPECT_EQ(0u, memoryManager->residencyControllers[1]->getLastTrimFenceValue());
|
||||
EXPECT_EQ(0u, memoryManager->residencyControllers[2]->getLastTrimFenceValue());
|
||||
}
|
||||
|
||||
TEST(WddmMemoryManagerAllocator32BitTest, allocator32BitIsCreatedWithCorrectBase) {
|
||||
@@ -1137,7 +1138,7 @@ TEST_F(WddmMemoryManagerResidencyTest, givenNotUsedAllocationsFromPreviousPeriod
|
||||
allocation2.getResidencyData().resident = true;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
memoryManager->residencyControllers[0]->setLastTrimFenceValue(10);
|
||||
// Set current fence value to greater value
|
||||
osContext->get()->getMonitoredFence().currentFenceValue = 20;
|
||||
|
||||
@@ -1173,7 +1174,7 @@ TEST_F(WddmMemoryManagerResidencyTest, givenOneUsedAllocationFromPreviousPeriodi
|
||||
allocation2.getResidencyData().resident = true;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
memoryManager->residencyControllers[0]->setLastTrimFenceValue(10);
|
||||
// Set current fence value to greater value
|
||||
osContext->get()->getMonitoredFence().currentFenceValue = 20;
|
||||
|
||||
@@ -1219,7 +1220,7 @@ TEST_F(WddmMemoryManagerResidencyTest, givenTripleAllocationWithUsedAndUnusedFra
|
||||
allocationTriple->fragmentsStorage.fragmentStorageData[2].residency->resident = true;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
memoryManager->residencyControllers[0]->setLastTrimFenceValue(10);
|
||||
// Set current fence value to greater value
|
||||
osContext->get()->getMonitoredFence().currentFenceValue = 20;
|
||||
|
||||
@@ -1248,14 +1249,14 @@ TEST_F(WddmMemoryManagerResidencyTest, givenPeriodicTrimWhenTrimCallbackCalledTh
|
||||
trimNotification.NumBytesToTrim = 0;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
memoryManager->residencyControllers[0]->setLastTrimFenceValue(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->lastPeriodicTrimFenceValues[0]);
|
||||
EXPECT_EQ(20u, memoryManager->residencyControllers[0]->getLastTrimFenceValue());
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerResidencyTest, givenRestartPeriodicTrimWhenTrimCallbackCalledThenLastPeriodicTrimFenceIsSetToCurrentFenceValue) {
|
||||
@@ -1266,14 +1267,14 @@ TEST_F(WddmMemoryManagerResidencyTest, givenRestartPeriodicTrimWhenTrimCallbackC
|
||||
trimNotification.NumBytesToTrim = 0;
|
||||
|
||||
// Set last periodic fence value
|
||||
memoryManager->lastPeriodicTrimFenceValues[0] = 10;
|
||||
memoryManager->residencyControllers[0]->setLastTrimFenceValue(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->lastPeriodicTrimFenceValues[0]);
|
||||
EXPECT_EQ(20u, memoryManager->residencyControllers[0]->getLastTrimFenceValue());
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerResidencyTest, trimToBudgetWithZeroSizeReturnsTrue) {
|
||||
|
||||
@@ -123,6 +123,7 @@ class WddmMemoryManagerFixtureWithGmockWddm : public GmmEnvironmentFixture {
|
||||
memoryManager = new (std::nothrow) MockWddmMemoryManager(wddm, executionEnvironment);
|
||||
//assert we have memory manager
|
||||
ASSERT_NE(nullptr, memoryManager);
|
||||
memoryManager->registerOsContext(osContext);
|
||||
|
||||
ON_CALL(*wddm, createAllocationsAndMapGpuVa(::testing::_)).WillByDefault(::testing::Invoke(wddm, &GmockWddm::baseCreateAllocationAndMapGpuVa));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user