fix: set timestamp diff correctly if lower than resolution

Related-To: NEO-10615

Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
Szymon Morek
2024-05-17 14:36:09 +00:00
committed by Compute-Runtime-Automation
parent 7dfdbc33eb
commit 8989bf4078
2 changed files with 26 additions and 2 deletions

View File

@@ -284,12 +284,12 @@ void Event::setupRelativeProfilingInfo(ProfilingInfo &profilingInfo) {
auto timeDiff = profilingInfo.cpuTimeInNs - submitTimeStamp.cpuTimeInNs;
auto gpuTicksDiff = static_cast<uint64_t>(timeDiff / resolution);
profilingInfo.gpuTimeInNs = submitTimeStamp.gpuTimeInNs + timeDiff;
profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp + gpuTicksDiff;
profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp + std::max<uint64_t>(gpuTicksDiff, 1ul);
} else {
auto timeDiff = submitTimeStamp.cpuTimeInNs - profilingInfo.cpuTimeInNs;
auto gpuTicksDiff = static_cast<uint64_t>(timeDiff / resolution);
profilingInfo.gpuTimeInNs = submitTimeStamp.gpuTimeInNs - timeDiff;
profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp - gpuTicksDiff;
profilingInfo.gpuTimeStamp = submitTimeStamp.gpuTimeStamp - std::max<uint64_t>(gpuTicksDiff, 1ul);
}
}

View File

@@ -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<uint32_t>(pDevice->getDeviceInfo().profilingTimerResolution);
auto osTime = static_cast<MockOSTime *>(pDevice->getOSTime());
osTime->cpuTimeResult = submitCpuTimeInNs + (resolution - 1);
event.setStartTimeStamp();
event.setEndTimeStamp();
auto verifyTimestamp = [&](const Event::ProfilingInfo &timestamp) {
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<FamilyType>().timestampPacketWriteEnabled = false;