diff --git a/opencl/source/event/event.cpp b/opencl/source/event/event.cpp index f3e73d761f..babba0bfa5 100644 --- a/opencl/source/event/event.cpp +++ b/opencl/source/event/event.cpp @@ -284,12 +284,12 @@ void Event::setupRelativeProfilingInfo(ProfilingInfo &profilingInfo) { auto timeDiff = profilingInfo.cpuTimeInNs - submitTimeStamp.cpuTimeInNs; auto gpuTicksDiff = static_cast(timeDiff / resolution); profilingInfo.gpuTimeInNs = submitTimeStamp.gpuTimeInNs + timeDiff; - profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp + gpuTicksDiff; + profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp + std::max(gpuTicksDiff, 1ul); } else { auto timeDiff = submitTimeStamp.cpuTimeInNs - profilingInfo.cpuTimeInNs; auto gpuTicksDiff = static_cast(timeDiff / resolution); profilingInfo.gpuTimeInNs = submitTimeStamp.gpuTimeInNs - timeDiff; - profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp - gpuTicksDiff; + profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp - std::max(gpuTicksDiff, 1ul); } } diff --git a/opencl/test/unit_test/event/event_tests.cpp b/opencl/test/unit_test/event/event_tests.cpp index 6a9100c47b..792c87ac83 100644 --- a/opencl/test/unit_test/event/event_tests.cpp +++ b/opencl/test/unit_test/event/event_tests.cpp @@ -1445,6 +1445,30 @@ TEST_F(EventTest, whenSettingSubmitTimestampThenQueueAndSubmitTimestampsAreSet) EXPECT_EQ(expectedSubmitGpuTimeInNs, event.submitTimeStamp.gpuTimeInNs); } +TEST_F(EventTest, givenDiffBelowResolutionWhenSettingStartAndEndTimestampThenSetCorrectTimestamp) { + MyEvent event(this->pCmdQ, CL_COMMAND_COPY_BUFFER, 3, 0); + + event.setSubmitTimeStamp(); + auto submitCpuTimeInNs = event.submitTimeStamp.cpuTimeInNs; + auto submitGpuTimeInNs = event.submitTimeStamp.gpuTimeInNs; + auto submitGpuTimeStamp = event.submitTimeStamp.gpuTimeStamp; + + auto resolution = static_cast(pDevice->getDeviceInfo().profilingTimerResolution); + + auto osTime = static_cast(pDevice->getOSTime()); + osTime->cpuTimeResult = submitCpuTimeInNs + (resolution - 1); + + event.setStartTimeStamp(); + event.setEndTimeStamp(); + auto verifyTimestamp = [&](const Event::ProfilingInfo ×tamp) { + EXPECT_EQ(submitCpuTimeInNs + (resolution - 1), timestamp.cpuTimeInNs); + EXPECT_EQ(submitGpuTimeInNs + (resolution - 1), timestamp.gpuTimeInNs); + EXPECT_EQ(submitGpuTimeStamp + 1, timestamp.gpuTimeStamp); + }; + verifyTimestamp(event.startTimeStamp); + verifyTimestamp(event.endTimeStamp); +} + HWTEST_F(EventTest, WhenGettingHwTimeStampsThenValidPointerIsReturned) { pDevice->getUltCommandStreamReceiver().timestampPacketWriteEnabled = false;