From b169105da07082b799679bc35c58168da728b70d Mon Sep 17 00:00:00 2001 From: Slawomir Milczarek Date: Tue, 16 Sep 2025 12:16:46 +0000 Subject: [PATCH] feature: Don't terminate ULLS contexts if busy context exists (default) Controlled with the knob DirectSubmissionControllerContextGroupIdleDetection (note: the feature is enabled by default) Related-To: NEO-13325 Signed-off-by: Slawomir Milczarek --- .../direct_submission_controller.cpp | 2 +- .../direct_submission_controller_tests.cpp | 25 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/shared/source/direct_submission/direct_submission_controller.cpp b/shared/source/direct_submission/direct_submission_controller.cpp index 3a48b2768d..7e4130ac84 100644 --- a/shared/source/direct_submission/direct_submission_controller.cpp +++ b/shared/source/direct_submission/direct_submission_controller.cpp @@ -36,7 +36,7 @@ DirectSubmissionController::DirectSubmissionController() { if (debugManager.flags.DirectSubmissionControllerIdleDetection.get() != -1) { isCsrIdleDetectionEnabled = debugManager.flags.DirectSubmissionControllerIdleDetection.get(); } - isCsrsContextGroupIdleDetectionEnabled = false; + isCsrsContextGroupIdleDetectionEnabled = true; if (debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.get() != -1) { isCsrsContextGroupIdleDetectionEnabled = debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.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 17c267aff6..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 @@ -614,6 +614,27 @@ TEST(CommandStreamReceiverGetContextGroupIdTests, givenContextGroupWithoutPrimar EXPECT_EQ(55u, csr.getContextGroupId()); } +TEST(DirectSubmissionIdleDetectionWithContextGroupTest, givenDefaultConstructorWhenCreatingControllerThenContextGroupIdleDetectionIsEnabledByDefault) { + DirectSubmissionControllerMock controller; + + EXPECT_TRUE(controller.isCsrsContextGroupIdleDetectionEnabled); +} + +TEST(DirectSubmissionIdleDetectionWithContextGroupTest, givenDirectSubmissionControllerContextGroupIdleDetectionSetWhenCreatingControllerThenContextGroupIdleDetectionIsSetCorrectly) { + DebugManagerStateRestore restorer; + + for (auto contextGroupIdleDetectionState : {-1, 0, 1}) { + debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.set(contextGroupIdleDetectionState); + + DirectSubmissionControllerMock controller; + if (0 == contextGroupIdleDetectionState) { + EXPECT_FALSE(controller.isCsrsContextGroupIdleDetectionEnabled); + } else { + EXPECT_TRUE(controller.isCsrsContextGroupIdleDetectionEnabled); + } + } +} + class MockContextGroupIdleDetectionCsr : public MockCommandStreamReceiver { public: using MockCommandStreamReceiver::MockCommandStreamReceiver; @@ -641,12 +662,12 @@ class MockContextGroupIdleDetectionCsr : public MockCommandStreamReceiver { class DirectSubmissionIdleDetectionWithContextGroupTests : public ::testing::Test { protected: void SetUp() override { - debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.set(1); executionEnvironment.prepareRootDeviceEnvironments(1); executionEnvironment.initializeMemoryManager(); executionEnvironment.rootDeviceEnvironments[0]->osTime.reset(new MockOSTime{}); controller = std::make_unique(); + ASSERT_TRUE(controller->isCsrsContextGroupIdleDetectionEnabled); } void TearDown() override { @@ -898,12 +919,12 @@ TEST_F(DirectSubmissionIdleDetectionWithContextGroupTests, whenContextGroupIdleD class DirectSubmissionContextGroupCompositeKeyTests : public ::testing::Test { protected: void SetUp() override { - debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.set(1); executionEnvironment.prepareRootDeviceEnvironments(2); executionEnvironment.initializeMemoryManager(); executionEnvironment.rootDeviceEnvironments[0]->osTime.reset(new MockOSTime{}); executionEnvironment.rootDeviceEnvironments[1]->osTime.reset(new MockOSTime{}); controller = std::make_unique(); + ASSERT_TRUE(controller->isCsrsContextGroupIdleDetectionEnabled); } void TearDown() override {