mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Return valid TaskLevel for UserEvent and GlSyncEvent
Change-Id: Ic2bcb64e92e07b94c1af47b109af1274bf6c8c3e Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:

committed by
sys_ocldev

parent
2ca3e4c4e5
commit
a35e3b792d
@ -544,7 +544,7 @@ inline void Event::unblockEventBy(Event &event, uint32_t taskLevel, int32_t tran
|
||||
DBG_LOG(EventsDebugEnable, "Event", this, "is unblocked by", &event);
|
||||
|
||||
if (this->taskLevel == Event::eventNotReady) {
|
||||
this->taskLevel = taskLevel;
|
||||
this->taskLevel = std::max(cmdQueue->getCommandStreamReceiver().peekTaskLevel(), taskLevel);
|
||||
} else {
|
||||
this->taskLevel = std::max(this->taskLevel.load(), taskLevel);
|
||||
}
|
||||
|
@ -32,13 +32,10 @@ bool UserEvent::wait(bool blocking, bool useQuickKmdSleep) {
|
||||
}
|
||||
|
||||
uint32_t UserEvent::getTaskLevel() {
|
||||
uint32_t taskLevel = 0;
|
||||
if (ctx != nullptr) {
|
||||
Device *pDevice = ctx->getDevice(0);
|
||||
auto csr = pDevice->getDefaultEngine().commandStreamReceiver;
|
||||
taskLevel = csr->peekTaskLevel();
|
||||
if (peekExecutionStatus() == CL_COMPLETE) {
|
||||
return 0;
|
||||
}
|
||||
return taskLevel;
|
||||
return Event::eventNotReady;
|
||||
}
|
||||
|
||||
bool UserEvent::isInitialEventStatus() const {
|
||||
|
@ -53,7 +53,9 @@ void GlSyncEvent::updateExecutionStatus() {
|
||||
}
|
||||
|
||||
uint32_t GlSyncEvent::getTaskLevel() {
|
||||
auto csr = ctx->getDevice(0)->getDefaultEngine().commandStreamReceiver;
|
||||
return csr->peekTaskLevel();
|
||||
if (peekExecutionStatus() == CL_COMPLETE) {
|
||||
return 0;
|
||||
}
|
||||
return Event::eventNotReady;
|
||||
}
|
||||
} // namespace OCLRT
|
||||
|
@ -1344,7 +1344,7 @@ TEST(EventCallback, GivenEventWithCallbacksOnPeekHasCallbacksReturnsTrue) {
|
||||
}
|
||||
|
||||
TEST_F(EventTest, addChildForEventUncompleted) {
|
||||
VirtualEvent virtualEvent;
|
||||
VirtualEvent virtualEvent(pCmdQ, &mockContext);
|
||||
{
|
||||
Event event(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, 0, 0);
|
||||
event.addChild(virtualEvent);
|
||||
@ -1366,8 +1366,29 @@ TEST(Event, whenCreatingRegularEventsThenExternalSynchronizationIsNotRequired) {
|
||||
virtualEvent->release();
|
||||
}
|
||||
|
||||
HWTEST_F(EventTest, givenEventWithNotReadyTaskLevelWhenUnblockedThenGetTaskLevelFromCsrIfGreaterThanParent) {
|
||||
uint32_t initialTaskLevel = 10;
|
||||
Event parentEventWithGreaterTaskLevel(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, initialTaskLevel + 5, 0);
|
||||
Event parentEventWithLowerTaskLevel(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, initialTaskLevel - 5, 0);
|
||||
|
||||
Event childEvent0(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, Event::eventNotReady, Event::eventNotReady);
|
||||
Event childEvent1(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, Event::eventNotReady, Event::eventNotReady);
|
||||
|
||||
auto &csr = reinterpret_cast<UltCommandStreamReceiver<FamilyType> &>(pCmdQ->getCommandStreamReceiver());
|
||||
csr.taskLevel = initialTaskLevel;
|
||||
|
||||
parentEventWithGreaterTaskLevel.addChild(childEvent0);
|
||||
parentEventWithLowerTaskLevel.addChild(childEvent1);
|
||||
|
||||
parentEventWithGreaterTaskLevel.setStatus(CL_COMPLETE);
|
||||
parentEventWithLowerTaskLevel.setStatus(CL_COMPLETE);
|
||||
|
||||
EXPECT_EQ(parentEventWithGreaterTaskLevel.getTaskLevel() + 1, childEvent0.getTaskLevel());
|
||||
EXPECT_EQ(csr.taskLevel, childEvent1.getTaskLevel());
|
||||
}
|
||||
|
||||
TEST_F(EventTest, addChildForEventCompleted) {
|
||||
VirtualEvent virtualEvent;
|
||||
VirtualEvent virtualEvent(pCmdQ, &mockContext);
|
||||
{
|
||||
Event event(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, 0, 0);
|
||||
event.setStatus(CL_COMPLETE);
|
||||
|
@ -291,7 +291,7 @@ TEST(EventsTracker, givenSubmittedUserEventThenDumpingWithProperLabel) {
|
||||
EventsTracker::dumpNode(&uEvent, stream, map);
|
||||
|
||||
expected << "e0[label=\"{------USER_EVENT ptr=" << &uEvent
|
||||
<< "------||CL_SUBMITTED|task count=NOT_READY, level=0|CALLBACKS=FALSE}\",color=red];\n";
|
||||
<< "------||CL_SUBMITTED|task count=NOT_READY, level=NOT_READY|CALLBACKS=FALSE}\",color=red];\n";
|
||||
|
||||
EXPECT_STREQ(expected.str().c_str(), stream.str().c_str());
|
||||
}
|
||||
@ -431,6 +431,9 @@ TEST(EventsTracker, givenTwoEventsWithCommonParentEventThenDumpingProperGraph) {
|
||||
|
||||
EXPECT_STREQ(expected.str().c_str(), stream.str().c_str());
|
||||
|
||||
uEventChild1.updateCompletionStamp(0, 0, 0);
|
||||
uEventChild2.updateCompletionStamp(0, 0, 0);
|
||||
uEvent.updateCompletionStamp(0, 0, 0);
|
||||
uEvent.setStatus(0);
|
||||
}
|
||||
|
||||
@ -605,6 +608,10 @@ TEST(EventsTracker, givenEventsWithDependenciesBetweenThemThenDumpingProperGraph
|
||||
|
||||
EXPECT_STREQ(expected.str().c_str(), evTrackerMock.streamMock.c_str());
|
||||
|
||||
uEventChild1.updateCompletionStamp(0, 0, 0);
|
||||
uEventChild2.updateCompletionStamp(0, 0, 0);
|
||||
uEvent2.updateCompletionStamp(0, 0, 0);
|
||||
uEvent1.updateCompletionStamp(0, 0, 0);
|
||||
uEvent2.setStatus(0);
|
||||
uEvent1.setStatus(0);
|
||||
}
|
||||
|
@ -147,6 +147,22 @@ TEST(UserEvent, userEventAfterSetingStatusIsReadyForSubmission) {
|
||||
EXPECT_TRUE(uEvent.isReadyForSubmission());
|
||||
}
|
||||
|
||||
TEST(UserEvent, givenUserEventWhenStatusIsCompletedThenReturnZeroTaskLevel) {
|
||||
UserEvent uEvent;
|
||||
|
||||
uEvent.setStatus(CL_QUEUED);
|
||||
EXPECT_EQ(Event::eventNotReady, uEvent.getTaskLevel());
|
||||
|
||||
uEvent.setStatus(CL_SUBMITTED);
|
||||
EXPECT_EQ(Event::eventNotReady, uEvent.getTaskLevel());
|
||||
|
||||
uEvent.setStatus(CL_RUNNING);
|
||||
EXPECT_EQ(Event::eventNotReady, uEvent.getTaskLevel());
|
||||
|
||||
uEvent.setStatus(CL_COMPLETE);
|
||||
EXPECT_EQ(0u, uEvent.getTaskLevel());
|
||||
}
|
||||
|
||||
typedef HelloWorldTest<HelloWorldFixtureFactory> EventTests;
|
||||
|
||||
TEST_F(EventTests, blockedUserEventPassedToEnqueueNdRangeWithoutReturnEventIsNotSubmittedToCSR) {
|
||||
@ -519,7 +535,7 @@ TEST_F(EventTests, enqueueWithAbortedUserEventDoesntFlushToCSR) {
|
||||
EXPECT_EQ(taskCount, taskCountAfter);
|
||||
|
||||
Event *pChildEvent = (Event *)retEvent;
|
||||
EXPECT_EQ(Event::eventNotReady, pChildEvent->taskLevel);
|
||||
EXPECT_EQ(Event::eventNotReady, pChildEvent->getTaskLevel());
|
||||
|
||||
cl_int eventStatus = 0;
|
||||
retVal = clGetEventInfo(retEvent, CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(cl_int), &eventStatus, NULL);
|
||||
|
@ -972,13 +972,15 @@ HWTEST_F(glSharingTests, givenSyncObjectWhenCreateEventIsCalledThenCreateGLSyncO
|
||||
|
||||
auto &csr = reinterpret_cast<MockDevice *>(context.getDevice(0))->getUltCommandStreamReceiver<FamilyType>();
|
||||
csr.taskLevel = 123;
|
||||
auto csrTaskLevel = csr.peekTaskLevel();
|
||||
auto eventObj = castToObject<Event>(event);
|
||||
EXPECT_TRUE(eventObj->getCommandType() == CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR);
|
||||
EXPECT_TRUE(eventObj->peekExecutionStatus() == CL_SUBMITTED);
|
||||
EXPECT_EQ(Event::eventNotReady, eventObj->taskLevel);
|
||||
EXPECT_EQ(csrTaskLevel, eventObj->getTaskLevel());
|
||||
EXPECT_EQ(Event::eventNotReady, eventObj->getTaskLevel());
|
||||
EXPECT_EQ(1, GLRetainSyncCalled);
|
||||
|
||||
eventObj->setStatus(CL_COMPLETE);
|
||||
EXPECT_EQ(0u, eventObj->getTaskLevel());
|
||||
clReleaseEvent(event);
|
||||
EXPECT_EQ(1, GLReleaseSyncCalled);
|
||||
}
|
||||
|
Reference in New Issue
Block a user