mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-09 08:41:31 +00:00
[common] kvmfr: report cadence hold and lead timing
This commit is contained in:
@@ -1973,6 +1973,8 @@ CIndirectDeviceContext::PreparedFrameBuffer CIndirectDeviceContext::PrepareFrame
|
||||
fi->postProcessTime = 0;
|
||||
fi->copyTime = 0;
|
||||
fi->readyTime = 0;
|
||||
fi->holdTime = 0;
|
||||
fi->readyLeadTime = 0;
|
||||
fi->timingSerial = 0;
|
||||
fi->timingFlags = 0;
|
||||
fi->scheduleGeneration = 0;
|
||||
@@ -2343,8 +2345,8 @@ void CIndirectDeviceContext::CompleteFrameBuffer(
|
||||
|
||||
void CIndirectDeviceContext::SetFrameTiming(unsigned frameIndex,
|
||||
uint64_t captureTime, uint64_t postProcessTime, uint64_t copyTime,
|
||||
uint64_t readyTime, const CFrameScheduler::Schedule& schedule,
|
||||
uint64_t completedAt)
|
||||
uint64_t readyTime, uint64_t holdTime,
|
||||
const CFrameScheduler::Schedule& schedule, uint64_t completedAt)
|
||||
{
|
||||
if (frameIndex >= LGMP_Q_FRAME_BUFFER_LEN)
|
||||
return;
|
||||
@@ -2357,6 +2359,10 @@ void CIndirectDeviceContext::SetFrameTiming(unsigned frameIndex,
|
||||
frame->postProcessTime = postProcessTime;
|
||||
frame->copyTime = copyTime;
|
||||
frame->readyTime = readyTime;
|
||||
frame->holdTime = holdTime;
|
||||
frame->readyLeadTime = phaseValid &&
|
||||
schedule.deadline >= completedAt ?
|
||||
schedule.deadline - completedAt : 0;
|
||||
frame->timingFlags = phaseValid ?
|
||||
KVMFR_FRAME_TIMING_PHASE_VALID : 0;
|
||||
frame->timingSerial = frame->frameSerial;
|
||||
|
||||
@@ -299,7 +299,8 @@ public:
|
||||
void CompleteFrameBuffer(unsigned frameIndex, bool succeeded);
|
||||
void SetFrameTiming(unsigned frameIndex, uint64_t captureTime,
|
||||
uint64_t postProcessTime, uint64_t copyTime, uint64_t readyTime,
|
||||
const CFrameScheduler::Schedule& schedule, uint64_t completedAt);
|
||||
uint64_t holdTime, const CFrameScheduler::Schedule& schedule,
|
||||
uint64_t completedAt);
|
||||
void WriteFrameBuffer(unsigned frameIndex, void* src, size_t offset, size_t len, bool setWritePos) const;
|
||||
void FinalizeFrameBuffer(unsigned frameIndex) const;
|
||||
|
||||
|
||||
@@ -766,12 +766,21 @@ void CSwapChainProcessor::CompletionFunction(
|
||||
// discarded.
|
||||
sc->m_devContext->FinalizeFrameBuffer(fbRes->GetFrameIndex());
|
||||
const uint64_t publishedAt = CFrameScheduler::Nanotime();
|
||||
const uint64_t elapsed = publishedAt - postProcessStart;
|
||||
const uint64_t measured = postProcessTime + copyTime;
|
||||
const uint64_t readyTime = elapsed > measured ? elapsed - measured : 0;
|
||||
const uint64_t prepareElapsed = prepareReady >= postProcessStart ?
|
||||
prepareReady - postProcessStart : 0;
|
||||
const uint64_t prepareMeasured = postProcessTime + prepareCopyTime;
|
||||
const uint64_t prepareReadyTime = prepareElapsed > prepareMeasured ?
|
||||
prepareElapsed - prepareMeasured : 0;
|
||||
const uint64_t publishElapsed = publishedAt >= publishStart ?
|
||||
publishedAt - publishStart : 0;
|
||||
const uint64_t publishReadyTime = publishElapsed > publishCopyTime ?
|
||||
publishElapsed - publishCopyTime : 0;
|
||||
const uint64_t readyTime = prepareReadyTime + publishReadyTime;
|
||||
const uint64_t holdTime = publishStart >= prepareReady ?
|
||||
publishStart - prepareReady : 0;
|
||||
|
||||
sc->m_devContext->SetFrameTiming(fbRes->GetFrameIndex(),
|
||||
fbRes->GetCaptureTime(), postProcessTime, copyTime, readyTime,
|
||||
fbRes->GetCaptureTime(), postProcessTime, copyTime, readyTime, holdTime,
|
||||
fbRes->GetSchedule(), publishedAt);
|
||||
sc->m_devContext->TryRecordFrameTiming(
|
||||
publishedAt - publishStart);
|
||||
|
||||
Reference in New Issue
Block a user