2018-11-02 17:01:56 +08:00
|
|
|
/*
|
2019-01-07 16:29:49 +08:00
|
|
|
* Copyright (C) 2018-2019 Intel Corporation
|
2018-11-02 17:01:56 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2019-06-13 18:29:21 +08:00
|
|
|
#include "runtime/helpers/array_count.h"
|
2018-11-07 16:33:55 +08:00
|
|
|
#include "unit_tests/mocks/mock_graphics_allocation.h"
|
2018-11-02 17:01:56 +08:00
|
|
|
|
2019-02-27 18:39:32 +08:00
|
|
|
#include "gtest/gtest.h"
|
|
|
|
|
2019-03-26 18:59:46 +08:00
|
|
|
using namespace NEO;
|
2018-11-02 17:01:56 +08:00
|
|
|
|
2018-12-04 22:11:29 +08:00
|
|
|
TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenIsCreatedThenAllInspectionIdsAreSetToZero) {
|
2019-02-26 18:37:51 +08:00
|
|
|
MockGraphicsAllocation graphicsAllocation(GraphicsAllocation::AllocationType::UNKNOWN, nullptr, 0u, 0u, maxOsContextCount, MemoryPool::MemoryNull, true);
|
2018-12-04 22:11:29 +08:00
|
|
|
for (auto i = 0u; i < maxOsContextCount; i++) {
|
|
|
|
EXPECT_EQ(0u, graphicsAllocation.getInspectionId(i));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-02 17:01:56 +08:00
|
|
|
TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenIsCreatedThenTaskCountsAreInitializedProperly) {
|
2019-02-26 18:37:51 +08:00
|
|
|
GraphicsAllocation graphicsAllocation1(GraphicsAllocation::AllocationType::UNKNOWN, nullptr, 0u, 0u, 0u, MemoryPool::MemoryNull, true);
|
|
|
|
GraphicsAllocation graphicsAllocation2(GraphicsAllocation::AllocationType::UNKNOWN, nullptr, 0u, 0u, MemoryPool::MemoryNull, true);
|
2018-11-02 17:01:56 +08:00
|
|
|
for (auto i = 0u; i < maxOsContextCount; i++) {
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_EQ(MockGraphicsAllocation::objectNotUsed, graphicsAllocation1.getTaskCount(i));
|
|
|
|
EXPECT_EQ(MockGraphicsAllocation::objectNotUsed, graphicsAllocation2.getTaskCount(i));
|
|
|
|
EXPECT_EQ(MockGraphicsAllocation::objectNotResident, graphicsAllocation1.getResidencyTaskCount(i));
|
|
|
|
EXPECT_EQ(MockGraphicsAllocation::objectNotResident, graphicsAllocation2.getResidencyTaskCount(i));
|
2018-11-02 17:01:56 +08:00
|
|
|
}
|
|
|
|
}
|
2018-11-06 18:38:49 +08:00
|
|
|
|
2018-11-02 17:01:56 +08:00
|
|
|
TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenUpdatedTaskCountThenAllocationWasUsed) {
|
2018-11-07 20:04:10 +08:00
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_FALSE(graphicsAllocation.isUsed());
|
2018-11-02 17:01:56 +08:00
|
|
|
graphicsAllocation.updateTaskCount(0u, 0u);
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_TRUE(graphicsAllocation.isUsed());
|
2018-11-02 17:01:56 +08:00
|
|
|
}
|
|
|
|
TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenUpdatedTaskCountThenOnlyOneTaskCountIsUpdated) {
|
2018-11-07 20:04:10 +08:00
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
2018-11-02 17:01:56 +08:00
|
|
|
graphicsAllocation.updateTaskCount(1u, 0u);
|
|
|
|
EXPECT_EQ(1u, graphicsAllocation.getTaskCount(0u));
|
|
|
|
for (auto i = 1u; i < maxOsContextCount; i++) {
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_EQ(MockGraphicsAllocation::objectNotUsed, graphicsAllocation.getTaskCount(i));
|
2018-11-02 17:01:56 +08:00
|
|
|
}
|
|
|
|
graphicsAllocation.updateTaskCount(2u, 1u);
|
|
|
|
EXPECT_EQ(1u, graphicsAllocation.getTaskCount(0u));
|
|
|
|
EXPECT_EQ(2u, graphicsAllocation.getTaskCount(1u));
|
|
|
|
for (auto i = 2u; i < maxOsContextCount; i++) {
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_EQ(MockGraphicsAllocation::objectNotUsed, graphicsAllocation.getTaskCount(i));
|
2018-11-02 17:01:56 +08:00
|
|
|
}
|
|
|
|
}
|
2018-11-07 16:33:55 +08:00
|
|
|
TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenUpdatedTaskCountToobjectNotUsedValueThenUnregisterContext) {
|
2018-11-07 20:04:10 +08:00
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_FALSE(graphicsAllocation.isUsed());
|
2018-11-02 17:01:56 +08:00
|
|
|
graphicsAllocation.updateTaskCount(0u, 0u);
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_TRUE(graphicsAllocation.isUsed());
|
|
|
|
graphicsAllocation.updateTaskCount(MockGraphicsAllocation::objectNotUsed, 0u);
|
|
|
|
EXPECT_FALSE(graphicsAllocation.isUsed());
|
2018-11-02 17:01:56 +08:00
|
|
|
}
|
|
|
|
TEST(GraphicsAllocationTest, whenTwoContextsUpdatedTaskCountAndOneOfThemUnregisteredThenOneContextUsageRemains) {
|
2018-11-07 20:04:10 +08:00
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_FALSE(graphicsAllocation.isUsed());
|
2018-11-02 17:01:56 +08:00
|
|
|
graphicsAllocation.updateTaskCount(0u, 0u);
|
|
|
|
graphicsAllocation.updateTaskCount(0u, 1u);
|
2018-11-07 16:33:55 +08:00
|
|
|
EXPECT_TRUE(graphicsAllocation.isUsed());
|
|
|
|
graphicsAllocation.updateTaskCount(MockGraphicsAllocation::objectNotUsed, 0u);
|
|
|
|
EXPECT_TRUE(graphicsAllocation.isUsed());
|
|
|
|
graphicsAllocation.updateTaskCount(MockGraphicsAllocation::objectNotUsed, 0u);
|
|
|
|
EXPECT_TRUE(graphicsAllocation.isUsed());
|
|
|
|
graphicsAllocation.updateTaskCount(MockGraphicsAllocation::objectNotUsed, 1u);
|
|
|
|
EXPECT_FALSE(graphicsAllocation.isUsed());
|
2018-11-02 17:01:56 +08:00
|
|
|
}
|
2018-11-06 18:38:49 +08:00
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenUpdatedResidencyTaskCountToNonDefaultValueThenAllocationIsResident) {
|
2018-11-07 20:04:10 +08:00
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
2018-11-06 18:38:49 +08:00
|
|
|
EXPECT_FALSE(graphicsAllocation.isResident(0u));
|
2018-11-07 16:33:55 +08:00
|
|
|
uint32_t residencyTaskCount = 1u;
|
2018-11-06 18:38:49 +08:00
|
|
|
graphicsAllocation.updateResidencyTaskCount(residencyTaskCount, 0u);
|
|
|
|
EXPECT_EQ(residencyTaskCount, graphicsAllocation.getResidencyTaskCount(0u));
|
|
|
|
EXPECT_TRUE(graphicsAllocation.isResident(0u));
|
2018-11-07 16:33:55 +08:00
|
|
|
graphicsAllocation.updateResidencyTaskCount(MockGraphicsAllocation::objectNotResident, 0u);
|
|
|
|
EXPECT_EQ(MockGraphicsAllocation::objectNotResident, graphicsAllocation.getResidencyTaskCount(0u));
|
2018-11-06 18:38:49 +08:00
|
|
|
EXPECT_FALSE(graphicsAllocation.isResident(0u));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenResidentGraphicsAllocationWhenResetResidencyTaskCountThenAllocationIsNotResident) {
|
2018-11-07 20:04:10 +08:00
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
2018-12-18 21:02:08 +08:00
|
|
|
graphicsAllocation.updateResidencyTaskCount(1u, 0u);
|
2018-11-06 18:38:49 +08:00
|
|
|
EXPECT_TRUE(graphicsAllocation.isResident(0u));
|
|
|
|
|
2019-01-07 16:29:49 +08:00
|
|
|
graphicsAllocation.releaseResidencyInOsContext(0u);
|
2018-11-06 18:38:49 +08:00
|
|
|
EXPECT_FALSE(graphicsAllocation.isResident(0u));
|
|
|
|
}
|
2018-12-18 21:02:08 +08:00
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenNonResidentGraphicsAllocationWhenCheckIfResidencyTaskCountIsBelowAnyValueThenReturnTrue) {
|
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
|
|
|
EXPECT_FALSE(graphicsAllocation.isResident(0u));
|
|
|
|
EXPECT_TRUE(graphicsAllocation.isResidencyTaskCountBelow(0u, 0u));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenResidentGraphicsAllocationWhenCheckIfResidencyTaskCountIsBelowCurrentResidencyTaskCountThenReturnFalse) {
|
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
|
|
|
auto currentResidencyTaskCount = 1u;
|
|
|
|
graphicsAllocation.updateResidencyTaskCount(currentResidencyTaskCount, 0u);
|
|
|
|
EXPECT_TRUE(graphicsAllocation.isResident(0u));
|
|
|
|
EXPECT_FALSE(graphicsAllocation.isResidencyTaskCountBelow(currentResidencyTaskCount, 0u));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenResidentGraphicsAllocationWhenCheckIfResidencyTaskCountIsBelowHigherThanCurrentResidencyTaskCountThenReturnTrue) {
|
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
|
|
|
auto currentResidencyTaskCount = 1u;
|
|
|
|
graphicsAllocation.updateResidencyTaskCount(currentResidencyTaskCount, 0u);
|
|
|
|
EXPECT_TRUE(graphicsAllocation.isResident(0u));
|
|
|
|
EXPECT_TRUE(graphicsAllocation.isResidencyTaskCountBelow(currentResidencyTaskCount + 1u, 0u));
|
|
|
|
}
|
2019-02-18 17:49:21 +08:00
|
|
|
|
2019-06-13 16:58:38 +08:00
|
|
|
TEST(GraphicsAllocationTest, whenAllocationTypeIsConstantSurfaceThenCpuAccessIsRequired) {
|
|
|
|
EXPECT_TRUE(GraphicsAllocation::isCpuAccessRequired(GraphicsAllocation::AllocationType::CONSTANT_SURFACE));
|
|
|
|
}
|
|
|
|
|
2019-02-18 17:49:21 +08:00
|
|
|
TEST(GraphicsAllocationTest, whenAllocationTypeIsLinearStreamThenCpuAccessIsRequired) {
|
|
|
|
EXPECT_TRUE(GraphicsAllocation::isCpuAccessRequired(GraphicsAllocation::AllocationType::LINEAR_STREAM));
|
|
|
|
}
|
|
|
|
|
2019-03-28 16:06:20 +08:00
|
|
|
TEST(GraphicsAllocationTest, whenAllocationTypeIsKernelIsaThenCpuAccessIsNotRequired) {
|
|
|
|
EXPECT_FALSE(GraphicsAllocation::isCpuAccessRequired(GraphicsAllocation::AllocationType::KERNEL_ISA));
|
2019-02-18 17:49:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, whenAllocationTypeIsInternalHeapThenCpuAccessIsRequired) {
|
|
|
|
EXPECT_TRUE(GraphicsAllocation::isCpuAccessRequired(GraphicsAllocation::AllocationType::INTERNAL_HEAP));
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, whenAllocationTypeIsTimestampPacketThenCpuAccessIsRequired) {
|
|
|
|
EXPECT_TRUE(GraphicsAllocation::isCpuAccessRequired(GraphicsAllocation::AllocationType::TIMESTAMP_PACKET_TAG_BUFFER));
|
|
|
|
}
|
2019-02-20 19:43:37 +08:00
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, whenAllocationTypeIsCommandBufferThenCpuAccessIsRequired) {
|
|
|
|
EXPECT_TRUE(GraphicsAllocation::isCpuAccessRequired(GraphicsAllocation::AllocationType::COMMAND_BUFFER));
|
|
|
|
}
|
2019-03-26 21:40:43 +08:00
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenDefaultAllocationWhenGettingNumHandlesThenOneIsReturned) {
|
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
|
|
|
EXPECT_EQ(1u, graphicsAllocation.getNumHandles());
|
|
|
|
}
|
2019-06-03 16:22:59 +08:00
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenDefaultGraphicsAllocationWhenInternalHandleIsBeingObtainedThenZeroIsReturned) {
|
|
|
|
MockGraphicsAllocation graphicsAllocation;
|
2019-06-06 22:26:47 +08:00
|
|
|
EXPECT_EQ(0llu, graphicsAllocation.peekInternalHandle(nullptr));
|
2019-06-03 16:22:59 +08:00
|
|
|
}
|
2019-06-13 18:29:21 +08:00
|
|
|
|
|
|
|
TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenQueryingUsedPageSizeThenCorrectSizeForMemoryPoolUsedIsReturned) {
|
|
|
|
|
|
|
|
MemoryPool::Type page4kPools[] = {MemoryPool::MemoryNull,
|
|
|
|
MemoryPool::System4KBPages,
|
|
|
|
MemoryPool::System4KBPagesWith32BitGpuAddressing,
|
|
|
|
MemoryPool::SystemCpuInaccessible};
|
|
|
|
|
|
|
|
for (size_t i = 0; i < arrayCount(page4kPools); i++) {
|
|
|
|
MockGraphicsAllocation graphicsAllocation(GraphicsAllocation::AllocationType::UNKNOWN, nullptr, 0u, 0u, 1, page4kPools[i], false);
|
|
|
|
|
|
|
|
EXPECT_EQ(MemoryConstants::pageSize, graphicsAllocation.getUsedPageSize());
|
|
|
|
}
|
|
|
|
|
|
|
|
MemoryPool::Type page64kPools[] = {MemoryPool::System64KBPages,
|
|
|
|
MemoryPool::System64KBPagesWith32BitGpuAddressing,
|
|
|
|
MemoryPool::LocalMemory};
|
|
|
|
|
|
|
|
for (size_t i = 0; i < arrayCount(page64kPools); i++) {
|
|
|
|
MockGraphicsAllocation graphicsAllocation(GraphicsAllocation::AllocationType::UNKNOWN, nullptr, 0u, 0u, 1, page64kPools[i], false);
|
|
|
|
|
|
|
|
EXPECT_EQ(MemoryConstants::pageSize64k, graphicsAllocation.getUsedPageSize());
|
|
|
|
}
|
|
|
|
}
|