mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
[29/n] Internal 4GB allocator.
- Internal allocations may now coexists with non internal on reusable list. - Caller now specifies if internal allocation is needed. - If criteria are not met , then allocation is not returned. Change-Id: I7da3a4f944768b7c8a873e44fd47248f1d76bf9e
This commit is contained in:
@ -1775,7 +1775,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, InForced32BitAllocationsModeDoNotS
|
||||
auto newScratchAllocation = commandStreamReceiver->getScratchAllocation();
|
||||
EXPECT_NE(scratchAllocation, newScratchAllocation); // Allocation changed
|
||||
|
||||
std::unique_ptr<GraphicsAllocation> allocationReusable = pDevice->getMemoryManager()->obtainReusableAllocation(4096);
|
||||
std::unique_ptr<GraphicsAllocation> allocationReusable = pDevice->getMemoryManager()->obtainReusableAllocation(4096, false);
|
||||
|
||||
if (allocationReusable.get() != nullptr) {
|
||||
if (is64bit) {
|
||||
@ -1809,7 +1809,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, InForced32BitAllocationsModeStore3
|
||||
auto newScratchAllocation = commandStreamReceiver->getScratchAllocation();
|
||||
EXPECT_NE(scratchAllocation, newScratchAllocation); // Allocation changed
|
||||
|
||||
std::unique_ptr<GraphicsAllocation> allocationTemporary = pDevice->getMemoryManager()->graphicsAllocations.detachAllocation(0, nullptr);
|
||||
std::unique_ptr<GraphicsAllocation> allocationTemporary = pDevice->getMemoryManager()->graphicsAllocations.detachAllocation(0, nullptr, true);
|
||||
|
||||
EXPECT_EQ(scratchAllocation, allocationTemporary.get());
|
||||
pDevice->getMemoryManager()->freeGraphicsMemory(allocationTemporary.release());
|
||||
|
@ -211,7 +211,7 @@ HWTEST_F(CommandStreamReceiverTest, dontReuseSurfaceIfStillInUse) {
|
||||
|
||||
*hwTag = 1;
|
||||
|
||||
auto newAllocation = memoryManager->obtainReusableAllocation(1);
|
||||
auto newAllocation = memoryManager->obtainReusableAllocation(1, false);
|
||||
|
||||
EXPECT_EQ(nullptr, newAllocation);
|
||||
}
|
||||
|
@ -333,7 +333,7 @@ TEST_F(MemoryAllocatorTest, obtainAllocationFromEmptyReuseListReturnNullPtr) {
|
||||
|
||||
auto allocation = memoryManager->allocateGraphicsMemory(1, host_ptr);
|
||||
|
||||
auto allocation2 = memoryManager->obtainReusableAllocation(1);
|
||||
auto allocation2 = memoryManager->obtainReusableAllocation(1, false);
|
||||
EXPECT_EQ(nullptr, allocation2);
|
||||
memoryManager->freeGraphicsMemory(allocation);
|
||||
}
|
||||
@ -345,7 +345,7 @@ TEST_F(MemoryAllocatorTest, obtainAllocationFromReusableList) {
|
||||
|
||||
memoryManager->storeAllocation(std::unique_ptr<GraphicsAllocation>(allocation), REUSABLE_ALLOCATION);
|
||||
|
||||
auto allocation2 = memoryManager->obtainReusableAllocation(1);
|
||||
auto allocation2 = memoryManager->obtainReusableAllocation(1, false);
|
||||
EXPECT_EQ(allocation, allocation2.get());
|
||||
|
||||
EXPECT_TRUE(memoryManager->allocationsForReuse.peekIsEmpty());
|
||||
@ -380,7 +380,7 @@ TEST_F(MemoryAllocatorTest, obtainAllocationFromMidlleOfReusableList) {
|
||||
EXPECT_TRUE(memoryManager->allocationsForReuse.peekContains(*allocation2));
|
||||
EXPECT_TRUE(memoryManager->allocationsForReuse.peekContains(*allocation3));
|
||||
|
||||
auto reusableAllocation = memoryManager->obtainReusableAllocation(10000);
|
||||
auto reusableAllocation = memoryManager->obtainReusableAllocation(10000, false);
|
||||
|
||||
EXPECT_EQ(nullptr, reusableAllocation->next);
|
||||
EXPECT_EQ(nullptr, reusableAllocation->prev);
|
||||
@ -393,6 +393,48 @@ TEST_F(MemoryAllocatorTest, obtainAllocationFromMidlleOfReusableList) {
|
||||
memoryManager->freeGraphicsMemory(reusableAllocation.release());
|
||||
}
|
||||
|
||||
TEST_F(MemoryAllocatorTest, givenNonInternalAllocationWhenItIsPutOnReusableListWhenInternalAllocationIsRequestedThenNullIsReturned) {
|
||||
EXPECT_TRUE(memoryManager->allocationsForReuse.peekIsEmpty());
|
||||
|
||||
auto allocation = memoryManager->allocateGraphicsMemory(4096, 4096);
|
||||
memoryManager->storeAllocation(std::unique_ptr<GraphicsAllocation>(allocation), REUSABLE_ALLOCATION);
|
||||
|
||||
EXPECT_FALSE(memoryManager->allocationsForReuse.peekIsEmpty());
|
||||
|
||||
auto internalAllocation = memoryManager->obtainReusableAllocation(1, true);
|
||||
EXPECT_EQ(nullptr, internalAllocation);
|
||||
}
|
||||
|
||||
TEST_F(MemoryAllocatorTest, givenInternalAllocationWhenItIsPutOnReusableListWhenNonInternalAllocationIsRequestedThenNullIsReturned) {
|
||||
EXPECT_TRUE(memoryManager->allocationsForReuse.peekIsEmpty());
|
||||
|
||||
auto allocation = memoryManager->allocateGraphicsMemory(4096, 4096);
|
||||
allocation->is32BitAllocation = true;
|
||||
|
||||
memoryManager->storeAllocation(std::unique_ptr<GraphicsAllocation>(allocation), REUSABLE_ALLOCATION);
|
||||
|
||||
EXPECT_FALSE(memoryManager->allocationsForReuse.peekIsEmpty());
|
||||
|
||||
auto internalAllocation = memoryManager->obtainReusableAllocation(1, false);
|
||||
EXPECT_EQ(nullptr, internalAllocation);
|
||||
}
|
||||
|
||||
TEST_F(MemoryAllocatorTest, givenInternalAllocationWhenItIsPutOnReusableListWhenInternalAllocationIsRequestedThenItIsReturned) {
|
||||
EXPECT_TRUE(memoryManager->allocationsForReuse.peekIsEmpty());
|
||||
|
||||
auto allocation = memoryManager->allocateGraphicsMemory(4096, 4096);
|
||||
allocation->is32BitAllocation = true;
|
||||
|
||||
memoryManager->storeAllocation(std::unique_ptr<GraphicsAllocation>(allocation), REUSABLE_ALLOCATION);
|
||||
|
||||
EXPECT_FALSE(memoryManager->allocationsForReuse.peekIsEmpty());
|
||||
|
||||
auto internalAllocation = memoryManager->obtainReusableAllocation(1, true);
|
||||
EXPECT_EQ(allocation, internalAllocation.get());
|
||||
internalAllocation.release();
|
||||
memoryManager->freeGraphicsMemory(allocation);
|
||||
}
|
||||
|
||||
TEST_F(MemoryAllocatorTest, AlignedHostPtrWithAlignedSizeWhenAskedForGraphicsAllocationReturnsNullStorageFromHostPtrManager) {
|
||||
auto ptr = (void *)0x1000;
|
||||
auto graphicsAllocation = memoryManager->allocateGraphicsMemory(4096, ptr);
|
||||
|
Reference in New Issue
Block a user