@@ -15,11 +15,16 @@ namespace L0 {
1515namespace ult {
1616
1717struct MockDebugSessionWindows : DebugSessionWindows {
18+ using DebugSessionWindows::allContexts;
19+ using DebugSessionWindows::allElfs;
20+ using DebugSessionWindows::asyncThread;
21+ using DebugSessionWindows::closeAsyncThread;
1822 using DebugSessionWindows::debugHandle;
1923 using DebugSessionWindows::initialize;
2024 using DebugSessionWindows::moduleDebugAreaCaptured;
2125 using DebugSessionWindows::processId;
2226 using DebugSessionWindows::readAndHandleEvent;
27+ using DebugSessionWindows::startAsyncThread;
2328 using DebugSessionWindows::wddm;
2429
2530 MockDebugSessionWindows (const zet_debug_config_t &config, L0::Device *device) : DebugSessionWindows(config, device) {}
@@ -40,6 +45,7 @@ struct MockDebugSessionWindows : DebugSessionWindows {
4045
4146 ze_result_t resultInitialize = ZE_RESULT_FORCE_UINT32;
4247 ze_result_t resultReadAndHandleEvent = ZE_RESULT_FORCE_UINT32;
48+ static constexpr uint64_t mockDebugHandle = 1 ;
4349};
4450
4551struct DebugApiWindowsFixture : public DeviceFixture {
@@ -181,9 +187,7 @@ TEST_F(DebugApiWindowsTest, givenUnsupportedEventTypeWhenReadAndHandleEventCalle
181187
182188 for (auto unsupportedEventType : {DBGUMD_READ_EVENT_MODULE_CREATE_NOTIFICATION,
183189 DBGUMD_READ_EVENT_EU_ATTN_BIT_SET,
184- DBGUMD_READ_EVENT_CONTEXT_CREATE_DESTROY,
185- DBGUMD_READ_EVENT_DEVICE_CREATE_DESTROY,
186- DBGUMD_READ_EVENT_CREATE_DEBUG_DATA}) {
190+ DBGUMD_READ_EVENT_DEVICE_CREATE_DESTROY}) {
187191 mockWddm->readEventOutParams .readEventType = unsupportedEventType;
188192 EXPECT_EQ (ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, session->readAndHandleEvent (100 ));
189193 }
@@ -199,6 +203,48 @@ TEST_F(DebugApiWindowsTest, givenUnknownEventTypeWhenReadAndHandleEventCalledThe
199203 EXPECT_EQ (ZE_RESULT_ERROR_UNKNOWN, session->readAndHandleEvent (100 ));
200204}
201205
206+ TEST_F (DebugApiWindowsTest, givenDebugDataEventTypeWhenReadAndHandleEventCalledThenResultDebugDataIsSaved) {
207+ zet_debug_config_t config = {};
208+ config.pid = 0x1234 ;
209+
210+ auto session = std::make_unique<MockDebugSessionWindows>(config, device);
211+ session->wddm = mockWddm;
212+
213+ mockWddm->readEventOutParams .readEventType = DBGUMD_READ_EVENT_CREATE_DEBUG_DATA;
214+ mockWddm->readEventOutParams .eventParamsBuffer .ReadCreateDebugDataParams .DebugDataType = ELF_BINARY;
215+ mockWddm->readEventOutParams .eventParamsBuffer .ReadCreateDebugDataParams .DataBufferPtr = 0xa000 ;
216+ mockWddm->readEventOutParams .eventParamsBuffer .ReadCreateDebugDataParams .DataSize = 8 ;
217+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
218+ EXPECT_EQ (1 , session->allElfs .size ());
219+ auto elf = session->allElfs [0 ];
220+ EXPECT_EQ (elf.startVA , 0xa000 );
221+ EXPECT_EQ (elf.endVA , 0xa008 );
222+ }
223+
224+ TEST_F (DebugApiWindowsTest, givenContextCreateEventTypeWhenReadAndHandleEventCalledThenAllContextsIsSetCorrectly) {
225+ zet_debug_config_t config = {};
226+ config.pid = 0x1234 ;
227+
228+ auto session = std::make_unique<MockDebugSessionWindows>(config, device);
229+ session->wddm = mockWddm;
230+
231+ mockWddm->readEventOutParams .readEventType = DBGUMD_READ_EVENT_CONTEXT_CREATE_DESTROY;
232+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .hContextHandle = 0xa000 ;
233+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsCreated = 1 ;
234+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsSIPInstalled = 0 ;
235+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
236+ EXPECT_EQ (0 , session->allContexts .size ());
237+
238+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsSIPInstalled = 1 ;
239+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
240+ EXPECT_EQ (1 , session->allContexts .size ());
241+ EXPECT_EQ (1 , session->allContexts .count (0xa000 ));
242+
243+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsCreated = 0 ;
244+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
245+ EXPECT_EQ (0 , session->allContexts .size ());
246+ }
247+
202248TEST (DebugSessionWindowsTest, whenTranslateEscapeErrorStatusCalledThenCorrectZeResultReturned) {
203249 EXPECT_EQ (ZE_RESULT_SUCCESS, DebugSessionWindows::translateEscapeReturnStatusToZeResult (DBGUMD_RETURN_ESCAPE_SUCCESS));
204250 EXPECT_EQ (ZE_RESULT_ERROR_NOT_AVAILABLE, DebugSessionWindows::translateEscapeReturnStatusToZeResult (DBGUMD_RETURN_DEBUGGER_ATTACH_DEVICE_BUSY));
@@ -210,5 +256,39 @@ TEST(DebugSessionWindowsTest, whenTranslateEscapeErrorStatusCalledThenCorrectZeR
210256 EXPECT_EQ (ZE_RESULT_ERROR_UNKNOWN, DebugSessionWindows::translateEscapeReturnStatusToZeResult (DBGUMD_RETURN_TYPE_MAX));
211257}
212258
259+ using DebugApiWindowsAsyncThreadTest = Test<DebugApiWindowsFixture>;
260+
261+ TEST_F (DebugApiWindowsAsyncThreadTest, GivenDebugSessionWhenStartingAndClosingAsyncThreadThenThreadIsStartedAndFinishes) {
262+ auto session = std::make_unique<MockDebugSessionWindows>(zet_debug_config_t {0x1234 }, device);
263+ ASSERT_NE (nullptr , session);
264+ session->wddm = mockWddm;
265+ session->startAsyncThread ();
266+
267+ EXPECT_TRUE (session->asyncThread .threadActive );
268+ EXPECT_FALSE (session->asyncThread .threadFinished );
269+
270+ session->closeAsyncThread ();
271+
272+ EXPECT_FALSE (session->asyncThread .threadActive );
273+ EXPECT_TRUE (session->asyncThread .threadFinished );
274+ }
275+
276+ TEST_F (DebugApiWindowsAsyncThreadTest, GivenDebugSessionWithAsyncThreadWhenClosingConnectionThenAsyncThreadIsTerminated) {
277+ auto session = std::make_unique<MockDebugSessionWindows>(zet_debug_config_t {0x1234 }, device);
278+ ASSERT_NE (nullptr , session);
279+ session->wddm = mockWddm;
280+ session->debugHandle = MockDebugSessionWindows::mockDebugHandle;
281+
282+ session->startAsyncThread ();
283+
284+ EXPECT_TRUE (session->asyncThread .threadActive );
285+ EXPECT_FALSE (session->asyncThread .threadFinished );
286+
287+ session->closeConnection ();
288+
289+ EXPECT_FALSE (session->asyncThread .threadActive );
290+ EXPECT_TRUE (session->asyncThread .threadFinished );
291+ }
292+
213293} // namespace ult
214294} // namespace L0
0 commit comments