@@ -309,6 +309,9 @@ HWTEST_F(CommandContainerTest, givenCmdContainerAndHandleFenceWithAllocsListWhen
309
309
cmdContainer->initialize (pDevice, &allocList, true , HeapSize::defaultHeapSize, false );
310
310
auto &cmdBufferAllocs = cmdContainer->getCmdBufferAllocations ();
311
311
auto memoryManager = static_cast <MockMemoryManager *>(pDevice->getMemoryManager ());
312
+ auto csr = reinterpret_cast <UltCommandStreamReceiver<FamilyType> *>(memoryManager->getRegisteredEngines (0u )[0 ].commandStreamReceiver );
313
+ csr->directSubmissionAvailable = true ;
314
+ csr->callFlushTagUpdate = false ;
312
315
EXPECT_EQ (memoryManager->handleFenceCompletionCalled , 0u );
313
316
EXPECT_EQ (cmdBufferAllocs.size (), 1u );
314
317
EXPECT_TRUE (allocList.peekIsEmpty ());
@@ -318,10 +321,9 @@ HWTEST_F(CommandContainerTest, givenCmdContainerAndHandleFenceWithAllocsListWhen
318
321
319
322
auto cmdBuffer0 = cmdBufferAllocs[0 ];
320
323
auto cmdBuffer1 = cmdBufferAllocs[1 ];
321
- auto csr = reinterpret_cast <UltCommandStreamReceiver<FamilyType> *>(memoryManager->getRegisteredEngines (0u )[0 ].commandStreamReceiver );
322
324
323
325
cmdContainer->reset ();
324
- EXPECT_EQ (memoryManager->handleFenceCompletionCalled , 0u );
326
+ EXPECT_EQ (memoryManager->handleFenceCompletionCalled , 1u );
325
327
EXPECT_EQ (cmdBufferAllocs.size (), 1u );
326
328
EXPECT_EQ (cmdBufferAllocs[0 ], cmdBuffer0);
327
329
EXPECT_FALSE (allocList.peekIsEmpty ());
@@ -330,32 +332,31 @@ HWTEST_F(CommandContainerTest, givenCmdContainerAndHandleFenceWithAllocsListWhen
330
332
331
333
cmdContainer->allocateNextCommandBuffer ();
332
334
EXPECT_EQ (cmdBufferAllocs.size (), 2u );
333
- cmdBuffer1->updateTaskCount (1u , 0u );
334
335
cmdContainer->reset ();
335
- EXPECT_EQ (memoryManager->handleFenceCompletionCalled , 1u );
336
+ EXPECT_EQ (memoryManager->handleFenceCompletionCalled , 2u );
336
337
EXPECT_EQ (cmdBufferAllocs.size (), 1u );
337
338
EXPECT_EQ (cmdBufferAllocs[0 ], cmdBuffer0);
338
339
EXPECT_FALSE (allocList.peekIsEmpty ());
339
- EXPECT_TRUE (csr->stopDirectSubmissionCalled );
340
+ EXPECT_FALSE (csr->stopDirectSubmissionCalled );
340
341
EXPECT_FALSE (csr->stopDirectSubmissionCalledBlocking );
341
342
342
343
cmdContainer->allocateNextCommandBuffer ();
343
344
EXPECT_EQ (cmdBufferAllocs.size (), 2u );
344
345
EXPECT_EQ (cmdBufferAllocs[0 ], cmdBuffer0);
345
346
EXPECT_EQ (cmdBufferAllocs[1 ], cmdBuffer1);
346
347
EXPECT_TRUE (allocList.peekIsEmpty ());
347
- EXPECT_TRUE (csr->stopDirectSubmissionCalled );
348
+ EXPECT_FALSE (csr->stopDirectSubmissionCalled );
348
349
EXPECT_FALSE (csr->stopDirectSubmissionCalledBlocking );
349
350
cmdBuffer1->updateTaskCount (1u , 0u );
350
351
351
352
cmdContainer.reset ();
352
353
353
- EXPECT_TRUE (csr->stopDirectSubmissionCalled );
354
+ EXPECT_FALSE (csr->stopDirectSubmissionCalled );
354
355
EXPECT_FALSE (csr->stopDirectSubmissionCalledBlocking );
355
356
csr = reinterpret_cast <UltCommandStreamReceiver<FamilyType> *>(memoryManager->getRegisteredEngines (0u )[1 ].commandStreamReceiver );
356
357
EXPECT_FALSE (csr->stopDirectSubmissionCalled );
357
358
EXPECT_FALSE (csr->stopDirectSubmissionCalledBlocking );
358
- EXPECT_EQ (memoryManager->handleFenceCompletionCalled , 2u );
359
+ EXPECT_EQ (memoryManager->handleFenceCompletionCalled , 3u );
359
360
EXPECT_FALSE (allocList.peekIsEmpty ());
360
361
cmdBuffer1->releaseUsageInOsContext (0u );
361
362
allocList.freeAllGraphicsAllocations (pDevice);
@@ -375,22 +376,55 @@ TEST_F(CommandContainerTest, givenReusableAllocationsAndRemoveUserFenceInCmdlist
375
376
cmdContainer->allocateNextCommandBuffer ();
376
377
EXPECT_EQ (cmdBufferAllocs.size (), 2u );
377
378
379
+ cmdContainer->reset ();
380
+ EXPECT_EQ (1u , memoryManager->handleFenceCompletionCalled );
381
+ cmdContainer->allocateNextCommandBuffer ();
382
+ EXPECT_EQ (cmdBufferAllocs.size (), 2u );
383
+
384
+ cmdBufferAllocs[1 ]->updateTaskCount (2u , 0u );
385
+ cmdContainer->reset ();
386
+ EXPECT_EQ (2u , memoryManager->handleFenceCompletionCalled );
387
+ cmdContainer->allocateNextCommandBuffer ();
388
+ EXPECT_EQ (cmdBufferAllocs.size (), 2u );
389
+ EXPECT_FALSE (cmdBufferAllocs[1 ]->isUsedByOsContext (0u ));
390
+
391
+ cmdBufferAllocs[0 ]->updateTaskCount (5u , 0u );
392
+ cmdBufferAllocs[1 ]->updateTaskCount (5u , 0u );
393
+ cmdContainer.reset ();
394
+ EXPECT_EQ (4u , memoryManager->handleFenceCompletionCalled );
395
+ allocList.freeAllGraphicsAllocations (pDevice);
396
+ }
397
+
398
+ TEST_F (CommandContainerTest, givenReusableAllocationsAndRemoveUserFenceInCmdlistResetAndDestroyFlagSetWhenAllocateAndResetThenHandleFenceCompletionIsNotCalled) {
399
+ DebugManagerStateRestore restore;
400
+ debugManager.flags .RemoveUserFenceInCmdlistResetAndDestroy .set (1 );
401
+
402
+ AllocationsList allocList;
403
+ auto cmdContainer = std::make_unique<CommandContainer>();
404
+ cmdContainer->initialize (pDevice, &allocList, HeapSize::defaultHeapSize, true , false );
405
+ auto &cmdBufferAllocs = cmdContainer->getCmdBufferAllocations ();
406
+ auto memoryManager = static_cast <MockMemoryManager *>(pDevice->getMemoryManager ());
407
+ EXPECT_EQ (0u , memoryManager->handleFenceCompletionCalled );
408
+ EXPECT_EQ (cmdBufferAllocs.size (), 1u );
409
+ cmdContainer->allocateNextCommandBuffer ();
410
+ EXPECT_EQ (cmdBufferAllocs.size (), 2u );
411
+
378
412
cmdContainer->reset ();
379
413
EXPECT_EQ (0u , memoryManager->handleFenceCompletionCalled );
380
414
cmdContainer->allocateNextCommandBuffer ();
381
415
EXPECT_EQ (cmdBufferAllocs.size (), 2u );
382
416
383
417
cmdBufferAllocs[1 ]->updateTaskCount (2u , 0u );
384
418
cmdContainer->reset ();
385
- EXPECT_EQ (1u , memoryManager->handleFenceCompletionCalled );
419
+ EXPECT_EQ (0u , memoryManager->handleFenceCompletionCalled );
386
420
cmdContainer->allocateNextCommandBuffer ();
387
421
EXPECT_EQ (cmdBufferAllocs.size (), 2u );
388
422
EXPECT_FALSE (cmdBufferAllocs[1 ]->isUsedByOsContext (0u ));
389
423
390
424
cmdBufferAllocs[0 ]->updateTaskCount (5u , 0u );
391
425
cmdBufferAllocs[1 ]->updateTaskCount (5u , 0u );
392
426
cmdContainer.reset ();
393
- EXPECT_EQ (3u , memoryManager->handleFenceCompletionCalled );
427
+ EXPECT_EQ (0u , memoryManager->handleFenceCompletionCalled );
394
428
allocList.freeAllGraphicsAllocations (pDevice);
395
429
}
396
430
0 commit comments