mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Move files from shared/test/unit_test to shared/test/common
unit_test/helpers/debug_helpers.cpp -> common/helpers unit_test/page_fault_manager/default_asan_options.cpp -> common/page_fault_manag unit_test/utilities/cpuintrinsics.cpp -> common/utilities unit_test/memory_manager/deferred_deleter_mt_tests.cpp -> opencl/test/unit_test/ delete: unit_test/mocks/debugger_l0_create.cpp delete: unit_test/page_fault_manager/default_asan_options.cpp Related-To: NEO-6524 Signed-off-by: Warchulski, Jaroslaw <jaroslaw.warchulski@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
3f5c3a8cdf
commit
7e7f8b5bc2
@ -49,9 +49,6 @@ target_include_directories(igdrcl_aub_tests PRIVATE
|
||||
${NEO_SOURCE_DIR}/shared/test/common/helpers/includes${BRANCH_DIR_SUFFIX}
|
||||
)
|
||||
|
||||
target_sources(igdrcl_aub_tests PRIVATE
|
||||
${NEO_SHARED_TEST_DIRECTORY}/unit_test/page_fault_manager/default_asan_options.cpp
|
||||
)
|
||||
copy_gmm_dll_for(igdrcl_aub_tests)
|
||||
add_subdirectories()
|
||||
|
||||
|
@ -15,18 +15,5 @@ set(IGDRCL_SRCS_tests_memory_manager
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/unified_memory_token_tests.cpp
|
||||
)
|
||||
|
||||
get_property(NEO_CORE_CPU_PAGE_FAULT_MANAGER_TESTS GLOBAL PROPERTY NEO_CORE_CPU_PAGE_FAULT_MANAGER_TESTS)
|
||||
list(APPEND IGDRCL_SRCS_tests_memory_manager ${NEO_CORE_CPU_PAGE_FAULT_MANAGER_TESTS})
|
||||
|
||||
if(WIN32)
|
||||
get_property(NEO_CORE_PAGE_FAULT_MANAGER_WINDOWS_TESTS GLOBAL PROPERTY NEO_CORE_PAGE_FAULT_MANAGER_WINDOWS_TESTS)
|
||||
list(APPEND IGDRCL_SRCS_tests_memory_manager ${NEO_CORE_PAGE_FAULT_MANAGER_WINDOWS_TESTS})
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
get_property(NEO_CORE_PAGE_FAULT_MANAGER_LINUX_TESTS GLOBAL PROPERTY NEO_CORE_PAGE_FAULT_MANAGER_LINUX_TESTS)
|
||||
list(APPEND IGDRCL_SRCS_tests_memory_manager ${NEO_CORE_PAGE_FAULT_MANAGER_LINUX_TESTS})
|
||||
endif()
|
||||
|
||||
target_sources(igdrcl_tests PRIVATE ${IGDRCL_SRCS_tests_memory_manager})
|
||||
add_subdirectories()
|
||||
|
@ -1,15 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2018-2021 Intel Corporation
|
||||
# Copyright (C) 2018-2022 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
set(IGDRCL_SRCS_mt_tests_memory_manager
|
||||
# local files
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/deferred_deleter_clear_queue_mt_tests.cpp
|
||||
|
||||
# necessary dependencies from neo_shared_tests
|
||||
${NEO_SHARED_TEST_DIRECTORY}/unit_test/memory_manager/deferred_deleter_mt_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/deferred_deleter_mt_tests.cpp
|
||||
)
|
||||
target_sources(igdrcl_mt_tests PRIVATE ${IGDRCL_SRCS_mt_tests_memory_manager})
|
||||
|
@ -0,0 +1,226 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/memory_manager/os_agnostic_memory_manager.h"
|
||||
#include "shared/test/common/mocks/mock_deferrable_deletion.h"
|
||||
#include "shared/test/common/mocks/mock_deferred_deleter.h"
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
struct DeferredDeleterTest : public ::testing::Test {
|
||||
|
||||
void SetUp() override {
|
||||
deleter.reset(new MockDeferredDeleter());
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
EXPECT_EQ(0, deleter->getElementsToRelease());
|
||||
}
|
||||
|
||||
void waitForAsyncThread() {
|
||||
while (!deleter->isWorking()) {
|
||||
std::this_thread::yield();
|
||||
}
|
||||
}
|
||||
MockDeferrableDeletion *createDeletion() {
|
||||
return new MockDeferrableDeletion();
|
||||
}
|
||||
std::unique_ptr<MockDeferredDeleter> deleter;
|
||||
};
|
||||
|
||||
TEST_F(DeferredDeleterTest, WhenDeferredDeleterIsCreatedThenInitialValuesAreSetCorrectly) {
|
||||
EXPECT_EQ(0, deleter->getClientsNum());
|
||||
EXPECT_FALSE(deleter->isWorking());
|
||||
EXPECT_FALSE(deleter->isThreadRunning());
|
||||
EXPECT_EQ(0, deleter->drainCalled);
|
||||
EXPECT_EQ(0, deleter->clearCalled);
|
||||
EXPECT_EQ(0, deleter->areElementsReleasedCalled);
|
||||
EXPECT_EQ(0, deleter->shouldStopCalled);
|
||||
EXPECT_EQ(0, deleter->getElementsToRelease());
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
EXPECT_FALSE(deleter->expectDrainCalled);
|
||||
EXPECT_FALSE(deleter->expectedDrainValue);
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, WhenDrainingThenQueueIsUpdated) {
|
||||
auto deletion = createDeletion();
|
||||
deleter->DeferredDeleter::deferDeletion(deletion);
|
||||
EXPECT_FALSE(deleter->isQueueEmpty());
|
||||
deleter->drain();
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
EXPECT_EQ(1, deleter->drainCalled);
|
||||
EXPECT_EQ(1, deleter->clearCalled);
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenTwoClientsWhenProcessingDeletionsThenOperationsAreHandledCorrectly) {
|
||||
deleter->DeferredDeleter::addClient();
|
||||
waitForAsyncThread();
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
EXPECT_TRUE(deleter->isWorking());
|
||||
EXPECT_EQ(1, deleter->getClientsNum());
|
||||
auto threadHandle = deleter->getThreadHandle();
|
||||
EXPECT_NE(nullptr, threadHandle);
|
||||
deleter->DeferredDeleter::addClient();
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
EXPECT_TRUE(deleter->isWorking());
|
||||
EXPECT_EQ(2, deleter->getClientsNum());
|
||||
EXPECT_EQ(threadHandle, deleter->getThreadHandle());
|
||||
deleter->forceStop();
|
||||
EXPECT_FALSE(deleter->isWorking());
|
||||
EXPECT_FALSE(deleter->isThreadRunning());
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, WhenAddingAndRemovingClientsThenOperationsAreHandledCorrectly) {
|
||||
deleter->DeferredDeleter::addClient();
|
||||
deleter->DeferredDeleter::addClient();
|
||||
waitForAsyncThread();
|
||||
EXPECT_EQ(2, deleter->getClientsNum());
|
||||
deleter->DeferredDeleter::removeClient();
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
EXPECT_TRUE(deleter->isWorking());
|
||||
EXPECT_EQ(1, deleter->getClientsNum());
|
||||
deleter->allowEarlyStopThread();
|
||||
deleter->DeferredDeleter::removeClient();
|
||||
EXPECT_FALSE(deleter->isThreadRunning());
|
||||
EXPECT_FALSE(deleter->isWorking());
|
||||
EXPECT_EQ(0, deleter->getClientsNum());
|
||||
deleter->forceStop();
|
||||
EXPECT_FALSE(deleter->isThreadRunning());
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenNotWorkingWhenDrainingThenOperationIsCompleted) {
|
||||
EXPECT_FALSE(deleter->isWorking());
|
||||
deleter->drain();
|
||||
EXPECT_EQ(1, deleter->drainCalled);
|
||||
EXPECT_EQ(1, deleter->clearCalled);
|
||||
EXPECT_EQ(2, deleter->areElementsReleasedCalled);
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenWorkingWhenDrainingThenOperationIsCompleted) {
|
||||
deleter->DeferredDeleter::addClient();
|
||||
waitForAsyncThread();
|
||||
EXPECT_TRUE(deleter->isWorking());
|
||||
deleter->drain();
|
||||
EXPECT_EQ(1, deleter->drainCalled);
|
||||
EXPECT_EQ(2, deleter->areElementsReleasedCalled);
|
||||
deleter->forceStop();
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenThreadNotRunningWhenStoppingThenQueueIsEmptied) {
|
||||
auto deletion = createDeletion();
|
||||
deleter->DeferredDeleter::deferDeletion(deletion);
|
||||
EXPECT_FALSE(deleter->isQueueEmpty());
|
||||
EXPECT_FALSE(deleter->isThreadRunning());
|
||||
deleter->expectDrainBlockingValue(false);
|
||||
deleter->forceStop();
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
EXPECT_NE(0, deleter->drainCalled);
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenThreadRunningWhenStoppingThenQueueIsEmptied) {
|
||||
deleter->DeferredDeleter::addClient();
|
||||
auto deletion = createDeletion();
|
||||
deleter->DeferredDeleter::deferDeletion(deletion);
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
deleter->allowEarlyStopThread();
|
||||
deleter->expectDrainBlockingValue(false);
|
||||
deleter->DeferredDeleter::removeClient();
|
||||
EXPECT_FALSE(deleter->isThreadRunning());
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
EXPECT_NE(0, deleter->drainCalled);
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenAsyncThreadWaitsForQueueItemWhenDeletingThenQueueIsEmptied) {
|
||||
deleter->DeferredDeleter::addClient();
|
||||
|
||||
waitForAsyncThread();
|
||||
|
||||
auto deletion = createDeletion();
|
||||
deleter->DeferredDeleter::deferDeletion(deletion);
|
||||
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
EXPECT_TRUE(deleter->isWorking());
|
||||
deleter->allowEarlyStopThread();
|
||||
deleter->DeferredDeleter::removeClient();
|
||||
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenAsyncThreadClearQueueWithoutWaitingForQueueItemWhenDeletingThenQueueIsEmptied) {
|
||||
auto deletion = createDeletion();
|
||||
deleter->DeferredDeleter::deferDeletion(deletion);
|
||||
|
||||
EXPECT_FALSE(deleter->isQueueEmpty());
|
||||
EXPECT_FALSE(deleter->isThreadRunning());
|
||||
|
||||
deleter->DeferredDeleter::addClient();
|
||||
|
||||
waitForAsyncThread();
|
||||
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
deleter->allowEarlyStopThread();
|
||||
deleter->DeferredDeleter::removeClient();
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, GivenAsyncThreadWaitsForQueueItemTwiceWhenDeletingThenQueueIsEmptied) {
|
||||
deleter->DeferredDeleter::addClient();
|
||||
|
||||
waitForAsyncThread();
|
||||
|
||||
auto deletion = createDeletion();
|
||||
deleter->DeferredDeleter::deferDeletion(deletion);
|
||||
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
EXPECT_TRUE(deleter->isWorking());
|
||||
|
||||
while (deleter->shouldStopCalled == 0)
|
||||
;
|
||||
|
||||
EXPECT_TRUE(deleter->isThreadRunning());
|
||||
EXPECT_TRUE(deleter->isWorking());
|
||||
|
||||
auto secondDeletion = createDeletion();
|
||||
deleter->DeferredDeleter::deferDeletion(secondDeletion);
|
||||
|
||||
deleter->allowEarlyStopThread();
|
||||
deleter->DeferredDeleter::removeClient();
|
||||
|
||||
EXPECT_TRUE(deleter->isQueueEmpty());
|
||||
EXPECT_EQ(0, deleter->getElementsToRelease());
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, WhenReleasingThenAllElementsAreReleased) {
|
||||
deleter->setElementsToRelease(1);
|
||||
EXPECT_EQ(1, deleter->getElementsToRelease());
|
||||
EXPECT_FALSE(deleter->baseAreElementsReleased());
|
||||
deleter->setElementsToRelease(0);
|
||||
EXPECT_EQ(0, deleter->getElementsToRelease());
|
||||
EXPECT_TRUE(deleter->baseAreElementsReleased());
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, WhenSettingDoWorkInBackgroundThenThreadShouldStopIsSetCorrectly) {
|
||||
deleter->setDoWorkInBackgroundValue(false);
|
||||
EXPECT_TRUE(deleter->baseShouldStop());
|
||||
deleter->setDoWorkInBackgroundValue(true);
|
||||
EXPECT_FALSE(deleter->baseShouldStop());
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, givenDeferredDeleterWhenBlockingDrainIsCalledThenArElementsReleasedIsCalled) {
|
||||
deleter->drain(true);
|
||||
EXPECT_NE(0, deleter->areElementsReleasedCalled);
|
||||
EXPECT_EQ(1, deleter->drainCalled);
|
||||
}
|
||||
|
||||
TEST_F(DeferredDeleterTest, givenDeferredDeleterWhenNonBlockingDrainIsCalledThenArElementsReleasedIsNotCalled) {
|
||||
deleter->drain(false);
|
||||
EXPECT_EQ(0, deleter->areElementsReleasedCalled);
|
||||
EXPECT_EQ(1, deleter->drainCalled);
|
||||
}
|
@ -11,7 +11,7 @@ set(CLOC_SEGFAULT_TEST_SOURCES
|
||||
${NEO_SHARED_DIRECTORY}/helpers/abort.cpp
|
||||
${NEO_SHARED_DIRECTORY}/os_interface/os_library.h
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/libult/signal_utils.h
|
||||
${NEO_SHARED_TEST_DIRECTORY}/unit_test/helpers/debug_helpers.cpp
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers/debug_helpers.cpp
|
||||
${NEO_SOURCE_DIR}/opencl/test/unit_test/offline_compiler/ocloc_tests_configuration.cpp
|
||||
)
|
||||
|
||||
|
Reference in New Issue
Block a user