@@ -392,6 +392,110 @@ TEST(DrmBufferObject, givenPerContextVmRequiredWhenBoBoundAndUnboundThenCorrectB
392392 EXPECT_FALSE (bo.bindInfo [contextId][0 ]);
393393}
394394
395+ TEST (DrmBufferObject, givenPrintBOBindingResultWhenBOBindAndUnbindSucceedsThenPrintDebugInformationAboutBOBindingResult) {
396+ struct DrmMockToSucceedBindBufferObject : public DrmMock {
397+ DrmMockToSucceedBindBufferObject (RootDeviceEnvironment &rootDeviceEnvironment)
398+ : DrmMock(rootDeviceEnvironment) {}
399+ int bindBufferObject (OsContext *osContext, uint32_t vmHandleId, BufferObject *bo) override { return 0 ; }
400+ int unbindBufferObject (OsContext *osContext, uint32_t vmHandleId, BufferObject *bo) override { return 0 ; }
401+ };
402+
403+ DebugManagerStateRestore restore;
404+ DebugManager.flags .PrintBOBindingResult .set (true );
405+
406+ auto executionEnvironment = new ExecutionEnvironment;
407+ executionEnvironment->setDebuggingEnabled ();
408+ executionEnvironment->prepareRootDeviceEnvironments (1 );
409+ executionEnvironment->rootDeviceEnvironments [0 ]->setHwInfo (defaultHwInfo.get ());
410+ executionEnvironment->calculateMaxOsContextCount ();
411+ executionEnvironment->rootDeviceEnvironments [0 ]->osInterface = std::make_unique<OSInterface>();
412+
413+ auto drm = new DrmMockToSucceedBindBufferObject (*executionEnvironment->rootDeviceEnvironments [0 ]);
414+
415+ executionEnvironment->rootDeviceEnvironments [0 ]->osInterface ->setDriverModel (std::unique_ptr<DriverModel>(drm));
416+ executionEnvironment->rootDeviceEnvironments [0 ]->memoryOperationsInterface = DrmMemoryOperationsHandler::create (*drm, 0u );
417+
418+ std::unique_ptr<Device> device (MockDevice::createWithExecutionEnvironment<MockDevice>(defaultHwInfo.get (), executionEnvironment, 0 ));
419+
420+ auto osContextCount = device->getExecutionEnvironment ()->memoryManager ->getRegisteredEnginesCount ();
421+ MockBufferObject bo (drm, 0 , 0 , osContextCount);
422+
423+ EXPECT_EQ (osContextCount, bo.bindInfo .size ());
424+
425+ auto contextId = device->getExecutionEnvironment ()->memoryManager ->getRegisteredEnginesCount () / 2 ;
426+ auto osContext = device->getExecutionEnvironment ()->memoryManager ->getRegisteredEngines ()[contextId].osContext ;
427+ osContext->ensureContextInitialized ();
428+
429+ testing::internal::CaptureStdout ();
430+
431+ bo.bind (osContext, 0 );
432+ EXPECT_TRUE (bo.bindInfo [contextId][0 ]);
433+
434+ std::string bindOutput = testing::internal::GetCapturedStdout ();
435+ EXPECT_STREQ (bindOutput.c_str (), " bind BO-0 to VM 0, drmVmId = 1, range: 0 - 0, size: 0, result: 0\n " );
436+
437+ testing::internal::CaptureStdout ();
438+
439+ bo.unbind (osContext, 0 );
440+ EXPECT_FALSE (bo.bindInfo [contextId][0 ]);
441+
442+ std::string unbindOutput = testing::internal::GetCapturedStdout ();
443+ EXPECT_STREQ (unbindOutput.c_str (), " unbind BO-0 from VM 0, drmVmId = 1, range: 0 - 0, size: 0, result: 0\n " );
444+ }
445+
446+ TEST (DrmBufferObject, givenPrintBOBindingResultWhenBOBindAndUnbindFailsThenPrintDebugInformationAboutBOBindingResultWithErrno) {
447+ struct DrmMockToFailBindBufferObject : public DrmMock {
448+ DrmMockToFailBindBufferObject (RootDeviceEnvironment &rootDeviceEnvironment)
449+ : DrmMock(rootDeviceEnvironment) {}
450+ int bindBufferObject (OsContext *osContext, uint32_t vmHandleId, BufferObject *bo) override { return -1 ; }
451+ int unbindBufferObject (OsContext *osContext, uint32_t vmHandleId, BufferObject *bo) override { return -1 ; }
452+ int getErrno () override { return EINVAL; }
453+ };
454+
455+ DebugManagerStateRestore restore;
456+ DebugManager.flags .PrintBOBindingResult .set (true );
457+
458+ auto executionEnvironment = new ExecutionEnvironment;
459+ executionEnvironment->setDebuggingEnabled ();
460+ executionEnvironment->prepareRootDeviceEnvironments (1 );
461+ executionEnvironment->rootDeviceEnvironments [0 ]->setHwInfo (defaultHwInfo.get ());
462+ executionEnvironment->calculateMaxOsContextCount ();
463+ executionEnvironment->rootDeviceEnvironments [0 ]->osInterface = std::make_unique<OSInterface>();
464+
465+ auto drm = new DrmMockToFailBindBufferObject (*executionEnvironment->rootDeviceEnvironments [0 ]);
466+
467+ executionEnvironment->rootDeviceEnvironments [0 ]->osInterface ->setDriverModel (std::unique_ptr<DriverModel>(drm));
468+ executionEnvironment->rootDeviceEnvironments [0 ]->memoryOperationsInterface = DrmMemoryOperationsHandler::create (*drm, 0u );
469+
470+ std::unique_ptr<Device> device (MockDevice::createWithExecutionEnvironment<MockDevice>(defaultHwInfo.get (), executionEnvironment, 0 ));
471+
472+ auto osContextCount = device->getExecutionEnvironment ()->memoryManager ->getRegisteredEnginesCount ();
473+ MockBufferObject bo (drm, 0 , 0 , osContextCount);
474+
475+ EXPECT_EQ (osContextCount, bo.bindInfo .size ());
476+
477+ auto contextId = device->getExecutionEnvironment ()->memoryManager ->getRegisteredEnginesCount () / 2 ;
478+ auto osContext = device->getExecutionEnvironment ()->memoryManager ->getRegisteredEngines ()[contextId].osContext ;
479+ osContext->ensureContextInitialized ();
480+
481+ testing::internal::CaptureStderr ();
482+
483+ bo.bind (osContext, 0 );
484+ EXPECT_FALSE (bo.bindInfo [contextId][0 ]);
485+
486+ std::string bindOutput = testing::internal::GetCapturedStderr ();
487+ EXPECT_THAT (bindOutput.c_str (), testing::HasSubstr (" bind BO-0 to VM 0, drmVmId = 1, range: 0 - 0, size: 0, result: -1, errno: 22" ));
488+
489+ testing::internal::CaptureStderr ();
490+ bo.bindInfo [contextId][0 ] = true ;
491+
492+ bo.unbind (osContext, 0 );
493+ EXPECT_TRUE (bo.bindInfo [contextId][0 ]);
494+
495+ std::string unbindOutput = testing::internal::GetCapturedStderr ();
496+ EXPECT_THAT (unbindOutput.c_str (), testing::HasSubstr (" unbind BO-0 from VM 0, drmVmId = 1, range: 0 - 0, size: 0, result: -1, errno: 22" ));
497+ }
498+
395499TEST (DrmBufferObject, whenBindExtHandleAddedThenItIsStored) {
396500 auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
397501 executionEnvironment->prepareRootDeviceEnvironments (1 );
0 commit comments