2222#include " shared/test/common/mocks/mock_csr.h"
2323#include " shared/test/common/mocks/mock_execution_environment.h"
2424#include " shared/test/common/mocks/mock_memory_manager.h"
25+ #include " shared/test/common/mocks/mock_os_context.h"
2526#include " shared/test/common/mocks/ult_device_factory.h"
2627#include " shared/test/common/test_macros/matchers.h"
2728#include " shared/test/common/test_macros/test.h"
@@ -391,6 +392,7 @@ HWTEST_F(CommandStreamReceiverTest, givenUpdateTaskCountFromWaitWhenCheckTaskCou
391392struct InitDirectSubmissionFixture {
392393 void SetUp () {
393394 DebugManager.flags .EnableDirectSubmission .set (1 );
395+ DebugManager.flags .EnableGemCloseWorker .set (0 );
394396 executionEnvironment = new MockExecutionEnvironment ();
395397 DeviceFactory::prepareDeviceEnvironments (*executionEnvironment);
396398 VariableBackup<UltHwConfig> backup (&ultHwConfig);
@@ -423,6 +425,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerEnabledWhenIni
423425
424426 osContext->ensureContextInitialized ();
425427 osContext->setDefaultContext (true );
428+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
426429 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
427430 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
428431 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -450,6 +453,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerDisabledWhenIn
450453
451454 osContext->ensureContextInitialized ();
452455 osContext->setDefaultContext (true );
456+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
453457 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
454458 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
455459 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -469,6 +473,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
469473 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
470474 osContext->ensureContextInitialized ();
471475 osContext->setDefaultContext (true );
476+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
472477 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
473478 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
474479 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -481,6 +486,26 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
481486 csr.reset ();
482487}
483488
489+ HWTEST_F (InitDirectSubmissionTest, givenCheckIfDirectSubmissionEnableWhenCallItMultipleTimesThenCheckDirectSubmissionEnablingConditionsOnce) {
490+ std::unique_ptr<OsContext> osContext (OsContext::create (device->getExecutionEnvironment ()->rootDeviceEnvironments [0 ]->osInterface .get (), 0 ,
491+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::Regular},
492+ PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
493+ osContext->ensureContextInitialized ();
494+ osContext->setDefaultContext (true );
495+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
496+ auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
497+ hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
498+ hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
499+ bool submitOnInit = false ;
500+
501+ auto ret = osContext->isDirectSubmissionAvailable (*hwInfo, submitOnInit);
502+ EXPECT_TRUE (ret);
503+
504+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionActive = false ;
505+ ret = osContext->isDirectSubmissionAvailable (*hwInfo, submitOnInit);
506+ EXPECT_FALSE (ret);
507+ }
508+
484509template <class Type >
485510class CommandStreamReceiverHwDirectSubmissionMock : public CommandStreamReceiverHw <Type> {
486511 public:
@@ -501,6 +526,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionAgainThenItIsNotR
501526 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
502527 osContext->ensureContextInitialized ();
503528 osContext->setDefaultContext (true );
529+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
504530 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
505531 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
506532 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -527,6 +553,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionThenObtainLock) {
527553 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
528554 osContext->ensureContextInitialized ();
529555 osContext->setDefaultContext (true );
556+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
530557 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
531558 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
532559 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -542,6 +569,8 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
542569 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
543570 osContext->ensureContextInitialized ();
544571 osContext->setDefaultContext (true );
572+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
573+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionActive = false ;
545574 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
546575 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = false ;
547576 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -560,7 +589,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnBcsThenExpectFea
560589 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
561590 osContext->ensureContextInitialized ();
562591 osContext->setDefaultContext (true );
563-
592+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
564593 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
565594 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].engineSupported = true ;
566595 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].submitOnInit = false ;
@@ -580,7 +609,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
580609 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
581610 osContext->ensureContextInitialized ();
582611 osContext->setDefaultContext (true );
583-
612+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
584613 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
585614 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].engineSupported = false ;
586615 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].submitOnInit = false ;
@@ -600,7 +629,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionDi
600629 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
601630 osContext->ensureContextInitialized ();
602631 osContext->setDefaultContext (true );
603-
632+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
604633 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
605634 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
606635 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useLowPriority = false ;
@@ -619,7 +648,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionEn
619648 EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::LowPriority},
620649 PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
621650 osContext->ensureContextInitialized ();
622-
651+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
623652 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
624653 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
625654 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useLowPriority = true ;
@@ -638,7 +667,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionDisab
638667 device->getDeviceBitfield ())));
639668 osContext->ensureContextInitialized ();
640669 osContext->setDefaultContext (true );
641-
670+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
642671 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
643672 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
644673 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useInternal = false ;
@@ -657,7 +686,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionEnabl
657686 EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
658687 device->getDeviceBitfield ())));
659688 osContext->ensureContextInitialized ();
660-
689+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
661690 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
662691 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
663692 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useInternal = true ;
@@ -677,7 +706,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionDis
677706 device->getDeviceBitfield (), true )));
678707 osContext->ensureContextInitialized ();
679708 osContext->setDefaultContext (true );
680-
709+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
681710 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
682711 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
683712 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useRootDevice = false ;
@@ -696,7 +725,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionEna
696725 EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
697726 device->getDeviceBitfield (), true )));
698727 osContext->ensureContextInitialized ();
699-
728+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
700729 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
701730 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
702731 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useRootDevice = true ;
@@ -716,7 +745,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextWhenDirectSubmissionDis
716745 device->getDeviceBitfield ())));
717746 osContext->ensureContextInitialized ();
718747 osContext->setDefaultContext (false );
719-
748+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
720749 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
721750 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
722751 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useNonDefault = false ;
@@ -736,7 +765,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextContextWhenDirectSubmis
736765 device->getDeviceBitfield ())));
737766 osContext->ensureContextInitialized ();
738767 osContext->setDefaultContext (false );
739-
768+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
740769 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
741770 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
742771 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useNonDefault = true ;
@@ -759,7 +788,7 @@ HWTEST_F(InitDirectSubmissionTest, GivenBlitterOverrideEnabledWhenBlitterIsNonDe
759788 device->getDeviceBitfield ())));
760789 osContext->ensureContextInitialized ();
761790 osContext->setDefaultContext (false );
762-
791+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
763792 auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
764793 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].engineSupported = false ;
765794 hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].useNonDefault = false ;
0 commit comments