From 31dbc04f239232c90afd34af7b2fc44c28ae9199 Mon Sep 17 00:00:00 2001 From: Mateusz Hoppe Date: Fri, 24 Jun 2022 11:45:34 +0000 Subject: [PATCH] L0Debug - capture SurfaceState heaps Related-To: NEO-7103 Signed-off-by: Mateusz Hoppe --- .../memory_manager/memory_manager_tests.cpp | 7 ----- .../source/memory_manager/memory_manager.cpp | 2 ++ .../unit_test/memory_manager/CMakeLists.txt | 1 + .../memory_manager/memory_manager_tests.cpp | 21 ++++++++++++++ .../linux/drm_memory_manager_tests.cpp | 29 +++++++++++++++++++ 5 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 shared/test/unit_test/memory_manager/memory_manager_tests.cpp diff --git a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp index c9c1d2cc34..7cdeca9804 100644 --- a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp +++ b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp @@ -3052,13 +3052,6 @@ TEST(MemoryManagerTest, givenStorageInfoWithParamsWhenGettingAllocDataForLocalMe EXPECT_FALSE(allocData.storageInfo.systemMemoryPlacement); } -TEST(MemoryManagerTest, WhenCallingIsAllocationTypeToCaptureThenScratchAndPrivateTypesReturnTrue) { - MockMemoryManager mockMemoryManager; - - EXPECT_TRUE(mockMemoryManager.isAllocationTypeToCapture(AllocationType::SCRATCH_SURFACE)); - EXPECT_TRUE(mockMemoryManager.isAllocationTypeToCapture(AllocationType::PRIVATE_SURFACE)); -} - TEST(MemoryTransferHelperTest, WhenBlitterIsSelectedButBlitCopyFailsThenFallbackToCopyOnCPU) { constexpr uint32_t dataSize = 16; uint8_t destData[dataSize] = {}; diff --git a/shared/source/memory_manager/memory_manager.cpp b/shared/source/memory_manager/memory_manager.cpp index 38820d9a9a..86baf1a228 100644 --- a/shared/source/memory_manager/memory_manager.cpp +++ b/shared/source/memory_manager/memory_manager.cpp @@ -856,6 +856,8 @@ bool MemoryManager::isAllocationTypeToCapture(AllocationType type) const { switch (type) { case AllocationType::SCRATCH_SURFACE: case AllocationType::PRIVATE_SURFACE: + case AllocationType::LINEAR_STREAM: + case AllocationType::INTERNAL_HEAP: return true; default: break; diff --git a/shared/test/unit_test/memory_manager/CMakeLists.txt b/shared/test/unit_test/memory_manager/CMakeLists.txt index b276160947..52bb5d1496 100644 --- a/shared/test/unit_test/memory_manager/CMakeLists.txt +++ b/shared/test/unit_test/memory_manager/CMakeLists.txt @@ -17,6 +17,7 @@ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/local_memory_usage_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/memory_manager_allocate_in_device_pool_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/memory_manager_multi_device_tests.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/memory_manager_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/memory_pool_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/multi_graphics_allocation_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/page_table_tests.cpp diff --git a/shared/test/unit_test/memory_manager/memory_manager_tests.cpp b/shared/test/unit_test/memory_manager/memory_manager_tests.cpp new file mode 100644 index 0000000000..7f831e628e --- /dev/null +++ b/shared/test/unit_test/memory_manager/memory_manager_tests.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/test/common/mocks/mock_memory_manager.h" + +#include "gtest/gtest.h" + +using namespace NEO; + +TEST(MemoryManagerTest, WhenCallingIsAllocationTypeToCaptureThenScratchAndPrivateTypesReturnTrue) { + MockMemoryManager mockMemoryManager; + + EXPECT_TRUE(mockMemoryManager.isAllocationTypeToCapture(AllocationType::SCRATCH_SURFACE)); + EXPECT_TRUE(mockMemoryManager.isAllocationTypeToCapture(AllocationType::PRIVATE_SURFACE)); + EXPECT_TRUE(mockMemoryManager.isAllocationTypeToCapture(AllocationType::LINEAR_STREAM)); + EXPECT_TRUE(mockMemoryManager.isAllocationTypeToCapture(AllocationType::INTERNAL_HEAP)); +} diff --git a/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp index 62de681927..c7a8777b2f 100644 --- a/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp @@ -3421,6 +3421,35 @@ TEST(DrmMemoryManager, givenTrackedAllocationTypeWhenFreeingThenRegisteredHandle EXPECT_EQ(1u, mockDrm->unregisterCalledCount); } +TEST(DrmMemoryManager, givenEnabledResourceRegistrationWhenSshIsAllocatedThenItIsMarkedForCapture) { + auto executionEnvironment = new MockExecutionEnvironment(); + executionEnvironment->prepareRootDeviceEnvironments(1u); + executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get()); + executionEnvironment->rootDeviceEnvironments[0]->initGmm(); + + auto mockDrm = new DrmMockResources(*executionEnvironment->rootDeviceEnvironments[0]); + executionEnvironment->rootDeviceEnvironments[0]->osInterface = std::make_unique(); + executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(mockDrm)); + executionEnvironment->rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mockDrm, 0u); + executionEnvironment->memoryManager = std::make_unique(false, false, false, *executionEnvironment); + + for (uint32_t i = 3; i < 3 + static_cast(DrmResourceClass::MaxSize); i++) { + mockDrm->classHandles.push_back(i); + } + EXPECT_TRUE(mockDrm->resourceRegistrationEnabled()); + + auto device = std::unique_ptr(MockDevice::create(executionEnvironment, 0)); + + CommandContainer cmdContainer; + cmdContainer.initialize(device.get(), nullptr, true); + + auto *ssh = cmdContainer.getIndirectHeap(NEO::HeapType::SURFACE_STATE); + auto bo = static_cast(ssh->getGraphicsAllocation())->getBO(); + + ASSERT_NE(nullptr, bo); + EXPECT_TRUE(bo->isMarkedForCapture()); +} + TEST(DrmMemoryManager, givenNullBoWhenRegisteringBindExtHandleThenEarlyReturn) { auto executionEnvironment = std::make_unique(); executionEnvironment->prepareRootDeviceEnvironments(1u);