mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-04 15:53:45 +08:00
Store vector of trim candidate list positions in WddmAllocation
Change-Id: I2fb247238802fc1ccd98e42d7714063f5231249f Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
9f895c1ecc
commit
44dd4c9145
@@ -694,7 +694,7 @@ TEST_F(WddmCommandStreamMockGdiTest, makeResidentClearsResidencyAllocations) {
|
||||
EXPECT_EQ(1u, csr->getResidencyAllocations().size());
|
||||
EXPECT_EQ(0u, csr->getEvictionAllocations().size());
|
||||
|
||||
EXPECT_EQ(trimListUnusedPosition, ((WddmAllocation *)commandBuffer)->getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, ((WddmAllocation *)commandBuffer)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
|
||||
csr->processResidency(csr->getResidencyAllocations(), *device->getOsContext());
|
||||
|
||||
@@ -703,7 +703,7 @@ TEST_F(WddmCommandStreamMockGdiTest, makeResidentClearsResidencyAllocations) {
|
||||
EXPECT_EQ(0u, csr->getResidencyAllocations().size());
|
||||
EXPECT_EQ(0u, csr->getEvictionAllocations().size());
|
||||
|
||||
EXPECT_EQ(0u, ((WddmAllocation *)commandBuffer)->getTrimCandidateListPosition());
|
||||
EXPECT_EQ(0u, ((WddmAllocation *)commandBuffer)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
|
||||
memoryManager->freeGraphicsMemory(commandBuffer);
|
||||
}
|
||||
@@ -777,12 +777,12 @@ HWTEST_F(WddmCommandStreamMockGdiTest, givenRecordedCommandBufferWhenItIsSubmitt
|
||||
EXPECT_TRUE(found);
|
||||
}
|
||||
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)tagAllocation)->getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)commandBuffer)->getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, ((WddmAllocation *)dshAlloc)->getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, ((WddmAllocation *)iohAlloc)->getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)sshAlloc)->getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)csrCommandStream)->getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)tagAllocation)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)commandBuffer)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
EXPECT_EQ(trimListUnusedPosition, ((WddmAllocation *)dshAlloc)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
EXPECT_EQ(trimListUnusedPosition, ((WddmAllocation *)iohAlloc)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)sshAlloc)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
EXPECT_NE(trimListUnusedPosition, ((WddmAllocation *)csrCommandStream)->getTrimCandidateListPosition(device->getOsContext()->getContextId()));
|
||||
|
||||
memoryManager->freeGraphicsMemory(dshAlloc);
|
||||
memoryManager->freeGraphicsMemory(iohAlloc);
|
||||
|
||||
@@ -55,6 +55,21 @@ TEST(WddmMemoryManager, NonAssignable) {
|
||||
EXPECT_FALSE(std::is_copy_assignable<WddmMemoryManager>::value);
|
||||
}
|
||||
|
||||
TEST(WddmAllocationTest, givenAllocationIsTrimCandidateInOneOsContextWhenGettingTrimCandidatePositionThenReturnItsPositionAndUnusedPositionInOtherContexts) {
|
||||
WddmAllocation allocation{nullptr, 0, nullptr, 0, nullptr, MemoryPool::MemoryNull, 3u};
|
||||
OsContext osContext{nullptr, 1u};
|
||||
allocation.setTrimCandidateListPosition(osContext.getContextId(), 700u);
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition(0u));
|
||||
EXPECT_EQ(700u, allocation.getTrimCandidateListPosition(1u));
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition(2u));
|
||||
}
|
||||
|
||||
TEST(WddmAllocationTest, givenRequestedContextIdTooLargeWhenGettingTrimCandidateListPositionThenReturnUnusedPosition) {
|
||||
WddmAllocation allocation{nullptr, 0, nullptr, 0, nullptr, MemoryPool::MemoryNull, 1u};
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition(1u));
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition(1000u));
|
||||
}
|
||||
|
||||
TEST(WddmMemoryManagerAllocator32BitTest, allocator32BitIsCreatedWithCorrectBase) {
|
||||
ExecutionEnvironment executionEnvironment;
|
||||
std::unique_ptr<WddmMock> wddm(static_cast<WddmMock *>(Wddm::createWddm()));
|
||||
@@ -1005,7 +1020,7 @@ TEST_F(WddmMemoryManagerResidencyTest, givenOneUsedAllocationFromPreviousPeriodi
|
||||
// 1 allocation evicted
|
||||
EXPECT_EQ(1u, wddm->makeNonResidentResult.called);
|
||||
// removed from trim candidate list
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation1.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation1.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
|
||||
//marked nonresident
|
||||
EXPECT_FALSE(allocation1.getResidencyData().resident);
|
||||
@@ -1126,9 +1141,9 @@ TEST_F(WddmMemoryManagerResidencyTest, trimToBudgetAllDoneAllocations) {
|
||||
osContext->get()->getResidencyController().compactTrimCandidateList();
|
||||
EXPECT_EQ(1u, osContext->get()->getResidencyController().peekTrimCandidateList().size());
|
||||
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation1.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation2.getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, allocation3.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation1.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation2.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
EXPECT_NE(trimListUnusedPosition, allocation3.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerResidencyTest, trimToBudgetReturnsFalseWhenNumBytesToTrimIsNotZero) {
|
||||
@@ -1184,9 +1199,9 @@ TEST_F(WddmMemoryManagerResidencyTest, trimToBudgetStopsEvictingWhenNumBytesToTr
|
||||
EXPECT_EQ(2u, wddm->makeNonResidentResult.called);
|
||||
EXPECT_EQ(1u, osContext->get()->getResidencyController().peekTrimCandidateList().size());
|
||||
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation1.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation2.getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, allocation3.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation1.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation2.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
EXPECT_NE(trimListUnusedPosition, allocation3.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmMemoryManagerResidencyTest, trimToBudgetMarksEvictedAllocationNonResident) {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include "runtime/os_interface/windows/wddm_residency_controller.h"
|
||||
#include "runtime/os_interface/os_context.h"
|
||||
#include "unit_tests/os_interface/windows/mock_wddm_allocation.h"
|
||||
|
||||
#include "test.h"
|
||||
@@ -17,24 +18,40 @@ class MockWddmResidencyController : public WddmResidencyController {
|
||||
public:
|
||||
using WddmResidencyController::trimCandidateList;
|
||||
using WddmResidencyController::trimCandidatesCount;
|
||||
using WddmResidencyController::WddmResidencyController;
|
||||
};
|
||||
|
||||
struct WddmResidencyControllerTest : ::testing::Test {
|
||||
void SetUp() {
|
||||
residencyController = std::make_unique<MockWddmResidencyController>();
|
||||
osContext = std::make_unique<OsContext>(nullptr, 0u);
|
||||
residencyController = std::make_unique<MockWddmResidencyController>(osContext->getContextId());
|
||||
}
|
||||
|
||||
std::unique_ptr<OsContext> osContext;
|
||||
std::unique_ptr<MockWddmResidencyController> residencyController;
|
||||
};
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, givenUsedAllocationWhenCallingRemoveFromTrimCandidateListIfUsedThenRemoveIt) {
|
||||
MockWddmAllocation allocation;
|
||||
residencyController->addToTrimCandidateList(&allocation);
|
||||
residencyController->removeFromTrimCandidateListIfUsed(&allocation, false);
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, givenUnusedAllocationWhenCallingRemoveFromTrimCandidateListIfUsedThenIgnore) {
|
||||
MockWddmAllocation allocation;
|
||||
residencyController->removeFromTrimCandidateListIfUsed(&allocation, false);
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, addToTrimCandidateListPlacesAllocationInContainerAndAssignsPosition) {
|
||||
MockWddmAllocation allocation;
|
||||
residencyController->addToTrimCandidateList(&allocation);
|
||||
|
||||
EXPECT_NE(0u, residencyController->trimCandidateList.size());
|
||||
EXPECT_NE(trimListUnusedPosition, allocation.getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, allocation.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
|
||||
size_t position = allocation.getTrimCandidateListPosition();
|
||||
size_t position = allocation.getTrimCandidateListPosition(osContext->getContextId());
|
||||
ASSERT_LT(position, residencyController->trimCandidateList.size());
|
||||
|
||||
EXPECT_EQ(&allocation, residencyController->trimCandidateList[position]);
|
||||
@@ -47,9 +64,9 @@ TEST_F(WddmResidencyControllerTest, addToTrimCandidateListDoesNotInsertAllocatio
|
||||
|
||||
residencyController->addToTrimCandidateList(&allocation);
|
||||
|
||||
EXPECT_NE(trimListUnusedPosition, allocation.getTrimCandidateListPosition());
|
||||
EXPECT_NE(trimListUnusedPosition, allocation.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
|
||||
size_t position = allocation.getTrimCandidateListPosition();
|
||||
size_t position = allocation.getTrimCandidateListPosition(osContext->getContextId());
|
||||
ASSERT_LT(position, residencyController->trimCandidateList.size());
|
||||
|
||||
EXPECT_EQ(&allocation, residencyController->trimCandidateList[position]);
|
||||
@@ -58,7 +75,7 @@ TEST_F(WddmResidencyControllerTest, addToTrimCandidateListDoesNotInsertAllocatio
|
||||
residencyController->addToTrimCandidateList(&allocation);
|
||||
|
||||
EXPECT_EQ(previousSize, residencyController->trimCandidateList.size());
|
||||
EXPECT_EQ(position, allocation.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(position, allocation.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, removeFromTrimCandidateListAssignsUnusedPosition) {
|
||||
@@ -67,14 +84,14 @@ TEST_F(WddmResidencyControllerTest, removeFromTrimCandidateListAssignsUnusedPosi
|
||||
residencyController->addToTrimCandidateList(&allocation);
|
||||
residencyController->removeFromTrimCandidateList(&allocation, false);
|
||||
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(trimListUnusedPosition, allocation.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, removeFromTrimCandidateListRemovesAllocationInAssignedPosition) {
|
||||
MockWddmAllocation allocation;
|
||||
|
||||
residencyController->addToTrimCandidateList(&allocation);
|
||||
size_t position = allocation.getTrimCandidateListPosition();
|
||||
size_t position = allocation.getTrimCandidateListPosition(osContext->getContextId());
|
||||
|
||||
residencyController->removeFromTrimCandidateList(&allocation, false);
|
||||
|
||||
@@ -123,8 +140,8 @@ TEST_F(WddmResidencyControllerTest, successiveAddingToTrimCandidateListAssignsNe
|
||||
residencyController->addToTrimCandidateList(&allocation3);
|
||||
|
||||
EXPECT_EQ(3u, residencyController->trimCandidateList.size());
|
||||
EXPECT_NE(allocation1.getTrimCandidateListPosition(), allocation2.getTrimCandidateListPosition());
|
||||
EXPECT_NE(allocation2.getTrimCandidateListPosition(), allocation3.getTrimCandidateListPosition());
|
||||
EXPECT_NE(allocation1.getTrimCandidateListPosition(osContext->getContextId()), allocation2.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
EXPECT_NE(allocation2.getTrimCandidateListPosition(osContext->getContextId()), allocation3.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, DISABLED_removingNotLastAllocationFromTrimCandidateListSubstituesLastPositionAllocation) {
|
||||
@@ -138,8 +155,8 @@ TEST_F(WddmResidencyControllerTest, DISABLED_removingNotLastAllocationFromTrimCa
|
||||
|
||||
EXPECT_EQ(2u, residencyController->trimCandidateList.size());
|
||||
|
||||
EXPECT_EQ(2u, allocation3.getTrimCandidateListPosition());
|
||||
EXPECT_NE(allocation2.getTrimCandidateListPosition(), allocation3.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(2u, allocation3.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
EXPECT_NE(allocation2.getTrimCandidateListPosition(osContext->getContextId()), allocation3.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, removingNotLastAllocationFromTrimCandidateListPutsNullEntry) {
|
||||
@@ -148,8 +165,8 @@ TEST_F(WddmResidencyControllerTest, removingNotLastAllocationFromTrimCandidateLi
|
||||
residencyController->addToTrimCandidateList(&allocation1);
|
||||
residencyController->addToTrimCandidateList(&allocation2);
|
||||
residencyController->addToTrimCandidateList(&allocation3);
|
||||
size_t position2 = allocation2.getTrimCandidateListPosition();
|
||||
size_t position3 = allocation3.getTrimCandidateListPosition();
|
||||
size_t position2 = allocation2.getTrimCandidateListPosition(osContext->getContextId());
|
||||
size_t position3 = allocation3.getTrimCandidateListPosition(osContext->getContextId());
|
||||
|
||||
residencyController->removeFromTrimCandidateList(&allocation2, false);
|
||||
|
||||
@@ -166,8 +183,8 @@ TEST_F(WddmResidencyControllerTest, compactTrimCandidateListRemovesInitialNullEn
|
||||
residencyController->addToTrimCandidateList(&allocation3);
|
||||
residencyController->addToTrimCandidateList(&allocation4);
|
||||
|
||||
size_t position3 = allocation3.getTrimCandidateListPosition();
|
||||
size_t position4 = allocation4.getTrimCandidateListPosition();
|
||||
size_t position3 = allocation3.getTrimCandidateListPosition(osContext->getContextId());
|
||||
size_t position4 = allocation4.getTrimCandidateListPosition(osContext->getContextId());
|
||||
|
||||
residencyController->removeFromTrimCandidateList(&allocation2, false);
|
||||
residencyController->removeFromTrimCandidateList(&allocation1, false);
|
||||
@@ -179,10 +196,10 @@ TEST_F(WddmResidencyControllerTest, compactTrimCandidateListRemovesInitialNullEn
|
||||
EXPECT_EQ(2u, residencyController->trimCandidateList.size());
|
||||
|
||||
EXPECT_EQ(residencyController->trimCandidateList[0], &allocation3);
|
||||
EXPECT_EQ(0u, allocation3.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(0u, allocation3.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
|
||||
EXPECT_EQ(residencyController->trimCandidateList[1], &allocation4);
|
||||
EXPECT_EQ(1u, allocation4.getTrimCandidateListPosition());
|
||||
EXPECT_EQ(1u, allocation4.getTrimCandidateListPosition(osContext->getContextId()));
|
||||
}
|
||||
|
||||
TEST_F(WddmResidencyControllerTest, compactTrimCandidateListWithNonNullEntries) {
|
||||
|
||||
Reference in New Issue
Block a user