diff --git a/shared/source/direct_submission/direct_submission_controller.cpp b/shared/source/direct_submission/direct_submission_controller.cpp index 57a658e219..7e4130ac84 100644 --- a/shared/source/direct_submission/direct_submission_controller.cpp +++ b/shared/source/direct_submission/direct_submission_controller.cpp @@ -49,11 +49,7 @@ DirectSubmissionController::~DirectSubmissionController() { void DirectSubmissionController::registerDirectSubmission(CommandStreamReceiver *csr) { std::lock_guard lock(directSubmissionsMutex); directSubmissions.insert(std::make_pair(csr, DirectSubmissionState())); - uint64_t timeoutUs = this->timeout.count(); - uint64_t maxTimeoutUs = this->maxTimeout.count(); - csr->getProductHelper().overrideDirectSubmissionTimeouts(timeoutUs, maxTimeoutUs); - this->timeout = std::chrono::microseconds(timeoutUs); - this->maxTimeout = std::chrono::microseconds(maxTimeoutUs); + this->overrideDirectSubmissionTimeouts(csr->getProductHelper()); } void DirectSubmissionController::unregisterDirectSubmission(CommandStreamReceiver *csr) { diff --git a/shared/source/direct_submission/direct_submission_controller.h b/shared/source/direct_submission/direct_submission_controller.h index 58e733d1d6..3448b5572c 100644 --- a/shared/source/direct_submission/direct_submission_controller.h +++ b/shared/source/direct_submission/direct_submission_controller.h @@ -100,6 +100,7 @@ class DirectSubmissionController { bool isCopyEngineOnDeviceIdle(uint32_t rootDeviceIndex, std::optional &bcsTaskCount); MOCKABLE_VIRTUAL bool sleep(std::unique_lock &lock); MOCKABLE_VIRTUAL SteadyClock::time_point getCpuTimestamp(); + MOCKABLE_VIRTUAL void overrideDirectSubmissionTimeouts(const ProductHelper &productHelper); void recalculateTimeout(); void applyTimeoutForAcLineStatusAndThrottle(bool acLineConnected); diff --git a/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp b/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp index 682af21cd6..679b5d14a6 100644 --- a/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp +++ b/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp @@ -14,4 +14,7 @@ bool DirectSubmissionController::sleep(std::unique_lock &lock) { return NEO::waitOnConditionWithPredicate(condVar, lock, getSleepValue(), [&] { return !pagingFenceRequests.empty(); }); } +void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) { +} + } // namespace NEO \ No newline at end of file diff --git a/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp b/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp index 121d6bef71..b6f675ebd0 100644 --- a/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp +++ b/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp @@ -7,6 +7,7 @@ #include "shared/source/direct_submission/direct_submission_controller.h" #include "shared/source/helpers/sleep.h" +#include "shared/source/os_interface/product_helper.h" #include "shared/source/os_interface/windows/sys_calls_winmm.h" #include @@ -19,4 +20,12 @@ bool DirectSubmissionController::sleep(std::unique_lock &lock) { return returnValue; } +void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) { + uint64_t timeoutUs = this->timeout.count(); + uint64_t maxTimeoutUs = this->maxTimeout.count(); + productHelper.overrideDirectSubmissionTimeouts(timeoutUs, maxTimeoutUs); + this->timeout = std::chrono::microseconds(timeoutUs); + this->maxTimeout = std::chrono::microseconds(maxTimeoutUs); +} + } // namespace NEO \ No newline at end of file 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 772de4c881..87d0feb160 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 @@ -574,28 +574,6 @@ TEST_F(DirectSubmissionCheckForCopyEngineIdleTests, givenCheckBcsForDirectSubmis EXPECT_EQ(1u, ccsCsr->stopDirectSubmissionCalledTimes); } -TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegisterCsrsThenTimeoutIsAdjusted) { - MockExecutionEnvironment executionEnvironment; - executionEnvironment.prepareRootDeviceEnvironments(1); - executionEnvironment.initializeMemoryManager(); - DeviceBitfield deviceBitfield(1); - - MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext(OsContext::create(nullptr, 0, 0, - EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular}, - PreemptionMode::ThreadGroup, deviceBitfield))); - csr.setupContext(*osContext.get()); - - DirectSubmissionControllerMock controller; - uint64_t timeoutUs{5'000}; - EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); - controller.registerDirectSubmission(&csr); - csr.getProductHelper().overrideDirectSubmissionTimeouts(timeoutUs, timeoutUs); - EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); - - controller.unregisterDirectSubmission(&csr); -} - TEST(CommandStreamReceiverGetContextGroupIdTests, givenContextGroupWithPrimaryContextWhenGetContextGroupIdIsCalledThenReturnsPrimaryContextId) { MockExecutionEnvironment executionEnvironment; executionEnvironment.prepareRootDeviceEnvironments(1); diff --git a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp index 80ff56567d..b20fb120be 100644 --- a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp +++ b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp @@ -1066,4 +1066,17 @@ HWTEST2_F(WddmDirectSubmissionTest, givenRelaxedOrderingSchedulerRequiredWhenAsk EXPECT_EQ(expectedBaseEndSize, directSubmission.getSizeEnd(false)); } +HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionControllerWhenRegisterCsrsThenTimeoutIsAdjusted) { + auto csr = device->getDefaultEngine().commandStreamReceiver; + + DirectSubmissionControllerMock controller; + uint64_t timeoutUs{5'000}; + EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); + controller.registerDirectSubmission(csr); + csr->getProductHelper().overrideDirectSubmissionTimeouts(timeoutUs, timeoutUs); + EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); + + controller.unregisterDirectSubmission(csr); +} + } // namespace NEO