Skip to content

Commit d440d26

Browse files
Ensure sleep is called in direct submission controller
Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
1 parent 548f698 commit d440d26

File tree

4 files changed

+20
-6
lines changed

4 files changed

+20
-6
lines changed

shared/source/direct_submission/direct_submission_controller.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,19 @@ void *DirectSubmissionController::controlDirectSubmissionsState(void *self) {
4848
auto controller = reinterpret_cast<DirectSubmissionController *>(self);
4949

5050
while (!controller->runControlling.load()) {
51-
5251
if (!controller->keepControlling.load()) {
5352
return nullptr;
5453
}
5554

56-
std::this_thread::sleep_for(std::chrono::microseconds(controller->timeout));
55+
controller->sleep();
5756
}
5857

5958
while (true) {
60-
6159
if (!controller->keepControlling.load()) {
6260
return nullptr;
6361
}
6462

65-
std::this_thread::sleep_for(std::chrono::microseconds(controller->timeout));
66-
63+
controller->sleep();
6764
controller->checkNewSubmissions();
6865
}
6966
}
@@ -91,4 +88,8 @@ void DirectSubmissionController::checkNewSubmissions() {
9188
}
9289
}
9390

91+
void DirectSubmissionController::sleep() {
92+
std::this_thread::sleep_for(std::chrono::microseconds(this->timeout));
93+
}
94+
9495
} // namespace NEO

shared/source/direct_submission/direct_submission_controller.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class DirectSubmissionController {
3737

3838
static void *controlDirectSubmissionsState(void *self);
3939
void checkNewSubmissions();
40+
MOCKABLE_VIRTUAL void sleep();
4041

4142
std::unordered_map<CommandStreamReceiver *, DirectSubmissionState> directSubmissions;
4243
std::mutex directSubmissionsMutex;

shared/test/unit_test/direct_submission/direct_submission_controller_mock.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2019-2021 Intel Corporation
2+
* Copyright (C) 2019-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -17,5 +17,12 @@ struct DirectSubmissionControllerMock : public DirectSubmissionController {
1717
using DirectSubmissionController::directSubmissionsMutex;
1818
using DirectSubmissionController::keepControlling;
1919
using DirectSubmissionController::timeout;
20+
21+
void sleep() override {
22+
DirectSubmissionController::sleep();
23+
this->sleepCalled = true;
24+
}
25+
26+
bool sleepCalled = false;
2027
};
2128
} // namespace NEO

shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithStarted
9696
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
9797

9898
controller.startControlling();
99+
100+
while (!controller.sleepCalled) {
101+
}
99102
controller.keepControlling.store(false);
100103
controller.directSubmissionControllingThread->join();
101104
controller.directSubmissionControllingThread.reset();
@@ -105,6 +108,8 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithNotStar
105108
DirectSubmissionControllerMock controller;
106109
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
107110

111+
while (!controller.sleepCalled) {
112+
}
108113
controller.keepControlling.store(false);
109114
controller.directSubmissionControllingThread->join();
110115
controller.directSubmissionControllingThread.reset();

0 commit comments

Comments
 (0)