Add Unit test for deferred deleter

- test run() function

Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe
2022-09-30 09:41:23 +00:00
committed by Compute-Runtime-Automation
parent c012034c19
commit 4292a47c53
3 changed files with 28 additions and 3 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018-2021 Intel Corporation * Copyright (C) 2018-2022 Intel Corporation
* *
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
* *
@ -9,6 +9,7 @@
#include "shared/source/memory_manager/deferrable_deletion.h" #include "shared/source/memory_manager/deferrable_deletion.h"
#include "shared/source/os_interface/os_thread.h" #include "shared/source/os_interface/os_thread.h"
#include "shared/test/common/mocks/mock_deferrable_deletion.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
@ -51,7 +52,16 @@ bool MockDeferredDeleter::areElementsReleased() {
} }
bool MockDeferredDeleter::shouldStop() { bool MockDeferredDeleter::shouldStop() {
shouldStopCalled++; shouldStopCalled++;
if (stopAfter3loopsInRun && shouldStopCalled < 3) {
auto deletion = new MockDeferrableDeletion();
elementsToRelease++;
queue.pushTailOne(*deletion);
condition.notify_one();
return false;
}
return shouldStopCalled > 1; return shouldStopCalled > 1;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018-2021 Intel Corporation * Copyright (C) 2018-2022 Intel Corporation
* *
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
* *
@ -11,6 +11,7 @@
namespace NEO { namespace NEO {
class MockDeferredDeleter : public DeferredDeleter { class MockDeferredDeleter : public DeferredDeleter {
public: public:
using DeferredDeleter::run;
MockDeferredDeleter(); MockDeferredDeleter();
~MockDeferredDeleter() override; ~MockDeferredDeleter() override;
@ -60,6 +61,7 @@ class MockDeferredDeleter : public DeferredDeleter {
std::atomic<int> clearCalled; std::atomic<int> clearCalled;
int deferDeletionCalled = 0; int deferDeletionCalled = 0;
bool stopAfter3loopsInRun = false;
void forceStop(); void forceStop();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019-2021 Intel Corporation * Copyright (C) 2019-2022 Intel Corporation
* *
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
* *
@ -7,6 +7,8 @@
#include "shared/source/helpers/deferred_deleter_helper.h" #include "shared/source/helpers/deferred_deleter_helper.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/helpers/debug_manager_state_restore.h"
#include "shared/test/common/mocks/mock_deferrable_deletion.h"
#include "shared/test/common/mocks/mock_deferred_deleter.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
@ -21,4 +23,15 @@ TEST(deferredDeleterHelper, DeferredDeleterIsEnabledWhenCheckIFDeferrDeleterIsEn
DebugManagerStateRestore dbgRestore; DebugManagerStateRestore dbgRestore;
DebugManager.flags.EnableDeferredDeleter.set(true); DebugManager.flags.EnableDeferredDeleter.set(true);
EXPECT_TRUE(isDeferredDeleterEnabled()); EXPECT_TRUE(isDeferredDeleterEnabled());
}
TEST(DeferredDeleter, GivenNoShouldStopWhenRunIsExecutingThenQueueIsProcessedInTheLoop) {
MockDeferredDeleter deleter;
deleter.stopAfter3loopsInRun = true;
auto deletion = new MockDeferrableDeletion();
deleter.DeferredDeleter::deferDeletion(deletion);
MockDeferredDeleter::run(&deleter);
EXPECT_EQ(3, deleter.shouldStopCalled);
} }