diff --git a/shared/source/direct_submission/direct_submission_controller.cpp b/shared/source/direct_submission/direct_submission_controller.cpp index c1523ddcb2..77d880f3c0 100644 --- a/shared/source/direct_submission/direct_submission_controller.cpp +++ b/shared/source/direct_submission/direct_submission_controller.cpp @@ -28,8 +28,6 @@ DirectSubmissionController::DirectSubmissionController() { if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) { maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()}; } - - directSubmissionControllingThread = Thread::create(controlDirectSubmissionsState, reinterpret_cast(this)); }; DirectSubmissionController::~DirectSubmissionController() { @@ -86,6 +84,10 @@ void DirectSubmissionController::unregisterDirectSubmission(CommandStreamReceive directSubmissions.erase(csr); } +void DirectSubmissionController::startThread() { + directSubmissionControllingThread = Thread::create(controlDirectSubmissionsState, reinterpret_cast(this)); +} + void DirectSubmissionController::startControlling() { this->runControlling.store(true); } diff --git a/shared/source/direct_submission/direct_submission_controller.h b/shared/source/direct_submission/direct_submission_controller.h index cdfa100612..5d2e96de65 100644 --- a/shared/source/direct_submission/direct_submission_controller.h +++ b/shared/source/direct_submission/direct_submission_controller.h @@ -43,6 +43,7 @@ class DirectSubmissionController { void registerDirectSubmission(CommandStreamReceiver *csr); void unregisterDirectSubmission(CommandStreamReceiver *csr); + void startThread(); void startControlling(); static bool isSupported(); diff --git a/shared/source/execution_environment/execution_environment.cpp b/shared/source/execution_environment/execution_environment.cpp index b2b784a08f..8895ae4e1e 100644 --- a/shared/source/execution_environment/execution_environment.cpp +++ b/shared/source/execution_environment/execution_environment.cpp @@ -120,6 +120,7 @@ DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionCont if (initializeDirectSubmissionController && this->directSubmissionController == nullptr) { this->directSubmissionController = std::make_unique(); + this->directSubmissionController->startThread(); } return directSubmissionController.get(); diff --git a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp index 31143de847..d3e24f06c5 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp @@ -48,9 +48,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste csr.taskCount.store(5u); DirectSubmissionControllerMock controller; - controller.keepControlling.store(false); - controller.directSubmissionControllingThread->join(); - controller.directSubmissionControllingThread.reset(); controller.registerDirectSubmission(&csr); controller.checkNewSubmissions(); @@ -95,6 +92,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout DirectSubmissionControllerMock controller; executionEnvironment.directSubmissionController.reset(&controller); + controller.startThread(); csr.startControllingDirectSubmissions(); controller.registerDirectSubmission(&csr); @@ -115,8 +113,8 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithStartedControllingWhenShuttingDownThenNoHang) { DirectSubmissionControllerMock controller; + controller.startThread(); EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr); - controller.startControlling(); while (!controller.sleepCalled) { @@ -143,9 +141,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndDivisorD csr.setupContext(*osContext.get()); DirectSubmissionControllerMock controller; - controller.keepControlling.store(false); - controller.directSubmissionControllingThread->join(); - controller.directSubmissionControllingThread.reset(); controller.registerDirectSubmission(&csr); { csr.taskCount.store(1u); @@ -243,9 +238,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndAdjustOn DirectSubmissionControllerMock controller; controller.setTimeoutParamsForPlatform(csr.getProductHelper()); - controller.keepControlling.store(false); - controller.directSubmissionControllingThread->join(); - controller.directSubmissionControllingThread.reset(); controller.registerDirectSubmission(&csr); EXPECT_TRUE(controller.adjustTimeoutOnThrottleAndAcLineStatus); fillTimeoutParamsMap(controller); @@ -345,6 +337,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndAdjustOn TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithNotStartedControllingWhenShuttingDownThenNoHang) { DirectSubmissionControllerMock controller; + controller.startThread(); EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr); while (!controller.sleepCalled) { @@ -391,9 +384,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste csr4.setupContext(*osContext4.get()); DirectSubmissionControllerMock controller; - controller.keepControlling.store(false); - controller.directSubmissionControllingThread->join(); - controller.directSubmissionControllingThread.reset(); EXPECT_EQ(controller.timeout.count(), 5'000); @@ -495,9 +485,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste csr10.setupContext(*osContext10.get()); DirectSubmissionControllerMock controller; - controller.keepControlling.store(false); - controller.directSubmissionControllingThread->join(); - controller.directSubmissionControllingThread.reset(); EXPECT_EQ(controller.timeout.count(), 5'000); @@ -578,9 +565,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerDirectSubmi csr4.setupContext(*osContext4.get()); DirectSubmissionControllerMock controller; - controller.keepControlling.store(false); - controller.directSubmissionControllingThread->join(); - controller.directSubmissionControllingThread.reset(); EXPECT_EQ(controller.timeout.count(), 5'000);