66 */
77
88#include " shared/test/common/helpers/debug_manager_state_restore.h"
9+ #include " shared/test/common/helpers/engine_descriptor_helper.h"
910#include " shared/test/common/mocks/mock_command_stream_receiver.h"
1011#include " shared/test/common/mocks/mock_execution_environment.h"
1112#include " shared/test/common/test_macros/test.h"
@@ -22,13 +23,26 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerTimeoutWhen
2223 EXPECT_EQ (controller.timeout , 14 );
2324}
2425
26+ TEST (DirectSubmissionControllerTests, givenDirectSubmissionControllertimeoutDivisorWhenCreateObjectThentimeoutDivisorIsEqualWithDebugFlag) {
27+ DebugManagerStateRestore restorer;
28+ DebugManager.flags .DirectSubmissionControllerDivisor .set (4 );
29+
30+ DirectSubmissionControllerMock controller;
31+
32+ EXPECT_EQ (controller.timeoutDivisor , 4 );
33+ }
34+
2535TEST (DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegisterDirectSubmissionWorksThenItIsMonitoringItsState) {
2636 MockExecutionEnvironment executionEnvironment;
2737 executionEnvironment.prepareRootDeviceEnvironments (1 );
2838 executionEnvironment.initializeMemoryManager ();
2939
3040 DeviceBitfield deviceBitfield (1 );
3141 MockCommandStreamReceiver csr (executionEnvironment, 0 , deviceBitfield);
42+ std::unique_ptr<OsContext> osContext (OsContext::create (nullptr , 0 ,
43+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
44+ PreemptionMode::ThreadGroup, deviceBitfield)));
45+ csr.setupContext (*osContext.get ());
3246 csr.taskCount .store (5u );
3347
3448 DirectSubmissionControllerMock controller;
@@ -69,6 +83,10 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout
6983
7084 DeviceBitfield deviceBitfield (1 );
7185 MockCommandStreamReceiver csr (executionEnvironment, 0 , deviceBitfield);
86+ std::unique_ptr<OsContext> osContext (OsContext::create (nullptr , 0 ,
87+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
88+ PreemptionMode::ThreadGroup, deviceBitfield)));
89+ csr.setupContext (*osContext.get ());
7290 csr.initializeTagAllocation ();
7391 *csr.tagAddress = 9u ;
7492 csr.taskCount .store (9u );
@@ -115,4 +133,137 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithNotStar
115133 controller.directSubmissionControllingThread .reset ();
116134}
117135
136+ TEST (DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegisterCsrsThenTimeoutIsAdjusted) {
137+ MockExecutionEnvironment executionEnvironment;
138+ executionEnvironment.prepareRootDeviceEnvironments (1 );
139+ executionEnvironment.initializeMemoryManager ();
140+ DeviceBitfield deviceBitfield (1 );
141+
142+ MockCommandStreamReceiver csr (executionEnvironment, 0 , deviceBitfield);
143+ std::unique_ptr<OsContext> osContext (OsContext::create (nullptr , 0 ,
144+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
145+ PreemptionMode::ThreadGroup, deviceBitfield)));
146+ csr.setupContext (*osContext.get ());
147+
148+ MockCommandStreamReceiver csr1 (executionEnvironment, 0 , deviceBitfield);
149+ std::unique_ptr<OsContext> osContext1 (OsContext::create (nullptr , 0 ,
150+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
151+ PreemptionMode::ThreadGroup, deviceBitfield)));
152+ csr1.setupContext (*osContext1.get ());
153+
154+ MockCommandStreamReceiver csr2 (executionEnvironment, 0 , deviceBitfield);
155+ std::unique_ptr<OsContext> osContext2 (OsContext::create (nullptr , 0 ,
156+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
157+ PreemptionMode::ThreadGroup, deviceBitfield)));
158+ csr2.setupContext (*osContext2.get ());
159+
160+ MockCommandStreamReceiver csr3 (executionEnvironment, 0 , deviceBitfield);
161+ std::unique_ptr<OsContext> osContext3 (OsContext::create (nullptr , 0 ,
162+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_BCS, EngineUsage::Regular},
163+ PreemptionMode::ThreadGroup, deviceBitfield)));
164+ csr3.setupContext (*osContext3.get ());
165+
166+ MockCommandStreamReceiver csr4 (executionEnvironment, 0 , deviceBitfield);
167+ std::unique_ptr<OsContext> osContext4 (OsContext::create (nullptr , 0 ,
168+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_BCS, EngineUsage::Regular},
169+ PreemptionMode::ThreadGroup, deviceBitfield)));
170+ csr4.setupContext (*osContext4.get ());
171+
172+ DirectSubmissionControllerMock controller;
173+ controller.keepControlling .store (false );
174+ controller.directSubmissionControllingThread ->join ();
175+ controller.directSubmissionControllingThread .reset ();
176+
177+ EXPECT_EQ (controller.timeout , 5000 );
178+
179+ controller.registerDirectSubmission (&csr);
180+ EXPECT_EQ (controller.timeout , 5000 );
181+
182+ controller.registerDirectSubmission (&csr3);
183+ EXPECT_EQ (controller.timeout , 5000 );
184+
185+ controller.registerDirectSubmission (&csr1);
186+ EXPECT_EQ (controller.timeout , 1250 );
187+
188+ controller.registerDirectSubmission (&csr2);
189+ EXPECT_EQ (controller.timeout , 312 );
190+
191+ controller.registerDirectSubmission (&csr4);
192+ EXPECT_EQ (controller.timeout , 312 );
193+
194+ controller.unregisterDirectSubmission (&csr);
195+ controller.unregisterDirectSubmission (&csr1);
196+ controller.unregisterDirectSubmission (&csr2);
197+ controller.unregisterDirectSubmission (&csr3);
198+ controller.unregisterDirectSubmission (&csr4);
199+ }
200+
201+ TEST (DirectSubmissionControllerTests, givenDirectSubmissionControllerDirectSubmissionControllerDivisorSetWhenRegisterCsrsThenTimeoutIsAdjusted) {
202+ DebugManagerStateRestore restorer;
203+ DebugManager.flags .DirectSubmissionControllerDivisor .set (5 );
204+
205+ MockExecutionEnvironment executionEnvironment;
206+ executionEnvironment.prepareRootDeviceEnvironments (1 );
207+ executionEnvironment.initializeMemoryManager ();
208+ DeviceBitfield deviceBitfield (1 );
209+
210+ MockCommandStreamReceiver csr (executionEnvironment, 0 , deviceBitfield);
211+ std::unique_ptr<OsContext> osContext (OsContext::create (nullptr , 0 ,
212+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
213+ PreemptionMode::ThreadGroup, deviceBitfield)));
214+ csr.setupContext (*osContext.get ());
215+
216+ MockCommandStreamReceiver csr1 (executionEnvironment, 0 , deviceBitfield);
217+ std::unique_ptr<OsContext> osContext1 (OsContext::create (nullptr , 0 ,
218+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
219+ PreemptionMode::ThreadGroup, deviceBitfield)));
220+ csr1.setupContext (*osContext1.get ());
221+
222+ MockCommandStreamReceiver csr2 (executionEnvironment, 0 , deviceBitfield);
223+ std::unique_ptr<OsContext> osContext2 (OsContext::create (nullptr , 0 ,
224+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_CCS, EngineUsage::Regular},
225+ PreemptionMode::ThreadGroup, deviceBitfield)));
226+ csr2.setupContext (*osContext2.get ());
227+
228+ MockCommandStreamReceiver csr3 (executionEnvironment, 0 , deviceBitfield);
229+ std::unique_ptr<OsContext> osContext3 (OsContext::create (nullptr , 0 ,
230+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_BCS, EngineUsage::Regular},
231+ PreemptionMode::ThreadGroup, deviceBitfield)));
232+ csr3.setupContext (*osContext3.get ());
233+
234+ MockCommandStreamReceiver csr4 (executionEnvironment, 0 , deviceBitfield);
235+ std::unique_ptr<OsContext> osContext4 (OsContext::create (nullptr , 0 ,
236+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_BCS, EngineUsage::Regular},
237+ PreemptionMode::ThreadGroup, deviceBitfield)));
238+ csr4.setupContext (*osContext4.get ());
239+
240+ DirectSubmissionControllerMock controller;
241+ controller.keepControlling .store (false );
242+ controller.directSubmissionControllingThread ->join ();
243+ controller.directSubmissionControllingThread .reset ();
244+
245+ EXPECT_EQ (controller.timeout , 5000 );
246+
247+ controller.registerDirectSubmission (&csr);
248+ EXPECT_EQ (controller.timeout , 5000 );
249+
250+ controller.registerDirectSubmission (&csr3);
251+ EXPECT_EQ (controller.timeout , 5000 );
252+
253+ controller.registerDirectSubmission (&csr1);
254+ EXPECT_EQ (controller.timeout , 1000 );
255+
256+ controller.registerDirectSubmission (&csr2);
257+ EXPECT_EQ (controller.timeout , 200 );
258+
259+ controller.registerDirectSubmission (&csr4);
260+ EXPECT_EQ (controller.timeout , 200 );
261+
262+ controller.unregisterDirectSubmission (&csr);
263+ controller.unregisterDirectSubmission (&csr1);
264+ controller.unregisterDirectSubmission (&csr2);
265+ controller.unregisterDirectSubmission (&csr3);
266+ controller.unregisterDirectSubmission (&csr4);
267+ }
268+
118269} // namespace NEO
0 commit comments