mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Add Unit test for deferred deleter
- test run() function Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
c012034c19
commit
4292a47c53
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
Reference in New Issue
Block a user