mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 06:24:51 +08:00
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:
committed by
Compute-Runtime-Automation
parent
7dfdbc33eb
commit
8989bf4078
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 ×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<FamilyType>().timestampPacketWriteEnabled = false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user