Performance chasing
This commit is contained in:
@@ -212,6 +212,7 @@ void HealthTelemetry::RecordBackendPlayoutHealth(const std::string& lifecycleSta
|
||||
std::size_t minReadyQueueDepth, std::size_t maxReadyQueueDepth, uint64_t readyQueueZeroDepthCount,
|
||||
uint64_t readyQueuePoppedCount, uint64_t readyQueueDroppedCount, uint64_t readyQueueUnderrunCount,
|
||||
double outputRenderMilliseconds, double smoothedOutputRenderMilliseconds, double maxOutputRenderMilliseconds,
|
||||
double outputFrameAcquireMilliseconds, double outputFrameRenderRequestMilliseconds, double outputFrameEndAccessMilliseconds,
|
||||
uint64_t completedFrameIndex, uint64_t scheduledFrameIndex, uint64_t scheduledLeadFrames,
|
||||
uint64_t measuredLagFrames, uint64_t catchUpFrames, uint64_t lateStreak, uint64_t dropStreak,
|
||||
uint64_t lateFrameCount, uint64_t droppedFrameCount, uint64_t flushedFrameCount,
|
||||
@@ -232,6 +233,9 @@ void HealthTelemetry::RecordBackendPlayoutHealth(const std::string& lifecycleSta
|
||||
mBackendPlayout.outputRenderMilliseconds = std::max(outputRenderMilliseconds, 0.0);
|
||||
mBackendPlayout.smoothedOutputRenderMilliseconds = std::max(smoothedOutputRenderMilliseconds, 0.0);
|
||||
mBackendPlayout.maxOutputRenderMilliseconds = std::max(maxOutputRenderMilliseconds, 0.0);
|
||||
mBackendPlayout.outputFrameAcquireMilliseconds = std::max(outputFrameAcquireMilliseconds, 0.0);
|
||||
mBackendPlayout.outputFrameRenderRequestMilliseconds = std::max(outputFrameRenderRequestMilliseconds, 0.0);
|
||||
mBackendPlayout.outputFrameEndAccessMilliseconds = std::max(outputFrameEndAccessMilliseconds, 0.0);
|
||||
mBackendPlayout.completedFrameIndex = completedFrameIndex;
|
||||
mBackendPlayout.scheduledFrameIndex = scheduledFrameIndex;
|
||||
mBackendPlayout.scheduledLeadFrames = scheduledLeadFrames;
|
||||
@@ -251,6 +255,7 @@ bool HealthTelemetry::TryRecordBackendPlayoutHealth(const std::string& lifecycle
|
||||
std::size_t minReadyQueueDepth, std::size_t maxReadyQueueDepth, uint64_t readyQueueZeroDepthCount,
|
||||
uint64_t readyQueuePoppedCount, uint64_t readyQueueDroppedCount, uint64_t readyQueueUnderrunCount,
|
||||
double outputRenderMilliseconds, double smoothedOutputRenderMilliseconds, double maxOutputRenderMilliseconds,
|
||||
double outputFrameAcquireMilliseconds, double outputFrameRenderRequestMilliseconds, double outputFrameEndAccessMilliseconds,
|
||||
uint64_t completedFrameIndex, uint64_t scheduledFrameIndex, uint64_t scheduledLeadFrames,
|
||||
uint64_t measuredLagFrames, uint64_t catchUpFrames, uint64_t lateStreak, uint64_t dropStreak,
|
||||
uint64_t lateFrameCount, uint64_t droppedFrameCount, uint64_t flushedFrameCount,
|
||||
@@ -274,6 +279,9 @@ bool HealthTelemetry::TryRecordBackendPlayoutHealth(const std::string& lifecycle
|
||||
mBackendPlayout.outputRenderMilliseconds = std::max(outputRenderMilliseconds, 0.0);
|
||||
mBackendPlayout.smoothedOutputRenderMilliseconds = std::max(smoothedOutputRenderMilliseconds, 0.0);
|
||||
mBackendPlayout.maxOutputRenderMilliseconds = std::max(maxOutputRenderMilliseconds, 0.0);
|
||||
mBackendPlayout.outputFrameAcquireMilliseconds = std::max(outputFrameAcquireMilliseconds, 0.0);
|
||||
mBackendPlayout.outputFrameRenderRequestMilliseconds = std::max(outputFrameRenderRequestMilliseconds, 0.0);
|
||||
mBackendPlayout.outputFrameEndAccessMilliseconds = std::max(outputFrameEndAccessMilliseconds, 0.0);
|
||||
mBackendPlayout.completedFrameIndex = completedFrameIndex;
|
||||
mBackendPlayout.scheduledFrameIndex = scheduledFrameIndex;
|
||||
mBackendPlayout.scheduledLeadFrames = scheduledLeadFrames;
|
||||
@@ -289,6 +297,98 @@ bool HealthTelemetry::TryRecordBackendPlayoutHealth(const std::string& lifecycle
|
||||
return true;
|
||||
}
|
||||
|
||||
void HealthTelemetry::RecordOutputRenderQueueWait(double queueWaitMilliseconds)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
mBackendPlayout.outputRenderQueueWaitMilliseconds = std::max(queueWaitMilliseconds, 0.0);
|
||||
}
|
||||
|
||||
bool HealthTelemetry::TryRecordOutputRenderQueueWait(double queueWaitMilliseconds)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex, std::try_to_lock);
|
||||
if (!lock.owns_lock())
|
||||
return false;
|
||||
|
||||
mBackendPlayout.outputRenderQueueWaitMilliseconds = std::max(queueWaitMilliseconds, 0.0);
|
||||
return true;
|
||||
}
|
||||
|
||||
void HealthTelemetry::RecordOutputRenderPipelineTiming(
|
||||
double drawMilliseconds,
|
||||
double fenceWaitMilliseconds,
|
||||
double mapMilliseconds,
|
||||
double readbackCopyMilliseconds,
|
||||
double cachedCopyMilliseconds,
|
||||
double asyncQueueMilliseconds,
|
||||
double asyncQueueBufferMilliseconds,
|
||||
double asyncQueueSetupMilliseconds,
|
||||
double asyncQueueReadPixelsMilliseconds,
|
||||
double asyncQueueFenceMilliseconds,
|
||||
double syncReadMilliseconds,
|
||||
bool asyncReadbackMissed,
|
||||
bool cachedFallbackUsed,
|
||||
bool syncFallbackUsed)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
mBackendPlayout.outputRenderDrawMilliseconds = std::max(drawMilliseconds, 0.0);
|
||||
mBackendPlayout.outputReadbackFenceWaitMilliseconds = std::max(fenceWaitMilliseconds, 0.0);
|
||||
mBackendPlayout.outputReadbackMapMilliseconds = std::max(mapMilliseconds, 0.0);
|
||||
mBackendPlayout.outputReadbackCopyMilliseconds = std::max(readbackCopyMilliseconds, 0.0);
|
||||
mBackendPlayout.outputCachedCopyMilliseconds = std::max(cachedCopyMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueMilliseconds = std::max(asyncQueueMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueBufferMilliseconds = std::max(asyncQueueBufferMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueSetupMilliseconds = std::max(asyncQueueSetupMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueReadPixelsMilliseconds = std::max(asyncQueueReadPixelsMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueFenceMilliseconds = std::max(asyncQueueFenceMilliseconds, 0.0);
|
||||
mBackendPlayout.outputSyncReadMilliseconds = std::max(syncReadMilliseconds, 0.0);
|
||||
if (asyncReadbackMissed)
|
||||
++mBackendPlayout.outputAsyncReadbackMissCount;
|
||||
if (cachedFallbackUsed)
|
||||
++mBackendPlayout.outputCachedFallbackCount;
|
||||
if (syncFallbackUsed)
|
||||
++mBackendPlayout.outputSyncFallbackCount;
|
||||
}
|
||||
|
||||
bool HealthTelemetry::TryRecordOutputRenderPipelineTiming(
|
||||
double drawMilliseconds,
|
||||
double fenceWaitMilliseconds,
|
||||
double mapMilliseconds,
|
||||
double readbackCopyMilliseconds,
|
||||
double cachedCopyMilliseconds,
|
||||
double asyncQueueMilliseconds,
|
||||
double asyncQueueBufferMilliseconds,
|
||||
double asyncQueueSetupMilliseconds,
|
||||
double asyncQueueReadPixelsMilliseconds,
|
||||
double asyncQueueFenceMilliseconds,
|
||||
double syncReadMilliseconds,
|
||||
bool asyncReadbackMissed,
|
||||
bool cachedFallbackUsed,
|
||||
bool syncFallbackUsed)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex, std::try_to_lock);
|
||||
if (!lock.owns_lock())
|
||||
return false;
|
||||
|
||||
mBackendPlayout.outputRenderDrawMilliseconds = std::max(drawMilliseconds, 0.0);
|
||||
mBackendPlayout.outputReadbackFenceWaitMilliseconds = std::max(fenceWaitMilliseconds, 0.0);
|
||||
mBackendPlayout.outputReadbackMapMilliseconds = std::max(mapMilliseconds, 0.0);
|
||||
mBackendPlayout.outputReadbackCopyMilliseconds = std::max(readbackCopyMilliseconds, 0.0);
|
||||
mBackendPlayout.outputCachedCopyMilliseconds = std::max(cachedCopyMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueMilliseconds = std::max(asyncQueueMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueBufferMilliseconds = std::max(asyncQueueBufferMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueSetupMilliseconds = std::max(asyncQueueSetupMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueReadPixelsMilliseconds = std::max(asyncQueueReadPixelsMilliseconds, 0.0);
|
||||
mBackendPlayout.outputAsyncQueueFenceMilliseconds = std::max(asyncQueueFenceMilliseconds, 0.0);
|
||||
mBackendPlayout.outputSyncReadMilliseconds = std::max(syncReadMilliseconds, 0.0);
|
||||
if (asyncReadbackMissed)
|
||||
++mBackendPlayout.outputAsyncReadbackMissCount;
|
||||
if (cachedFallbackUsed)
|
||||
++mBackendPlayout.outputCachedFallbackCount;
|
||||
if (syncFallbackUsed)
|
||||
++mBackendPlayout.outputSyncFallbackCount;
|
||||
return true;
|
||||
}
|
||||
|
||||
HealthTelemetry::SignalStatusSnapshot HealthTelemetry::GetSignalStatusSnapshot() const
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
|
||||
@@ -97,6 +97,24 @@ public:
|
||||
double outputRenderMilliseconds = 0.0;
|
||||
double smoothedOutputRenderMilliseconds = 0.0;
|
||||
double maxOutputRenderMilliseconds = 0.0;
|
||||
double outputFrameAcquireMilliseconds = 0.0;
|
||||
double outputFrameRenderRequestMilliseconds = 0.0;
|
||||
double outputFrameEndAccessMilliseconds = 0.0;
|
||||
double outputRenderQueueWaitMilliseconds = 0.0;
|
||||
double outputRenderDrawMilliseconds = 0.0;
|
||||
double outputReadbackFenceWaitMilliseconds = 0.0;
|
||||
double outputReadbackMapMilliseconds = 0.0;
|
||||
double outputReadbackCopyMilliseconds = 0.0;
|
||||
double outputCachedCopyMilliseconds = 0.0;
|
||||
double outputAsyncQueueMilliseconds = 0.0;
|
||||
double outputAsyncQueueBufferMilliseconds = 0.0;
|
||||
double outputAsyncQueueSetupMilliseconds = 0.0;
|
||||
double outputAsyncQueueReadPixelsMilliseconds = 0.0;
|
||||
double outputAsyncQueueFenceMilliseconds = 0.0;
|
||||
double outputSyncReadMilliseconds = 0.0;
|
||||
uint64_t outputAsyncReadbackMissCount = 0;
|
||||
uint64_t outputCachedFallbackCount = 0;
|
||||
uint64_t outputSyncFallbackCount = 0;
|
||||
uint64_t completedFrameIndex = 0;
|
||||
uint64_t scheduledFrameIndex = 0;
|
||||
uint64_t scheduledLeadFrames = 0;
|
||||
@@ -161,6 +179,7 @@ public:
|
||||
std::size_t minReadyQueueDepth, std::size_t maxReadyQueueDepth, uint64_t readyQueueZeroDepthCount,
|
||||
uint64_t readyQueuePoppedCount, uint64_t readyQueueDroppedCount, uint64_t readyQueueUnderrunCount,
|
||||
double outputRenderMilliseconds, double smoothedOutputRenderMilliseconds, double maxOutputRenderMilliseconds,
|
||||
double outputFrameAcquireMilliseconds, double outputFrameRenderRequestMilliseconds, double outputFrameEndAccessMilliseconds,
|
||||
uint64_t completedFrameIndex, uint64_t scheduledFrameIndex, uint64_t scheduledLeadFrames,
|
||||
uint64_t measuredLagFrames, uint64_t catchUpFrames, uint64_t lateStreak, uint64_t dropStreak,
|
||||
uint64_t lateFrameCount, uint64_t droppedFrameCount, uint64_t flushedFrameCount,
|
||||
@@ -170,11 +189,46 @@ public:
|
||||
std::size_t minReadyQueueDepth, std::size_t maxReadyQueueDepth, uint64_t readyQueueZeroDepthCount,
|
||||
uint64_t readyQueuePoppedCount, uint64_t readyQueueDroppedCount, uint64_t readyQueueUnderrunCount,
|
||||
double outputRenderMilliseconds, double smoothedOutputRenderMilliseconds, double maxOutputRenderMilliseconds,
|
||||
double outputFrameAcquireMilliseconds, double outputFrameRenderRequestMilliseconds, double outputFrameEndAccessMilliseconds,
|
||||
uint64_t completedFrameIndex, uint64_t scheduledFrameIndex, uint64_t scheduledLeadFrames,
|
||||
uint64_t measuredLagFrames, uint64_t catchUpFrames, uint64_t lateStreak, uint64_t dropStreak,
|
||||
uint64_t lateFrameCount, uint64_t droppedFrameCount, uint64_t flushedFrameCount,
|
||||
bool degraded, const std::string& statusMessage);
|
||||
|
||||
void RecordOutputRenderQueueWait(double queueWaitMilliseconds);
|
||||
bool TryRecordOutputRenderQueueWait(double queueWaitMilliseconds);
|
||||
|
||||
void RecordOutputRenderPipelineTiming(
|
||||
double drawMilliseconds,
|
||||
double fenceWaitMilliseconds,
|
||||
double mapMilliseconds,
|
||||
double readbackCopyMilliseconds,
|
||||
double cachedCopyMilliseconds,
|
||||
double asyncQueueMilliseconds,
|
||||
double asyncQueueBufferMilliseconds,
|
||||
double asyncQueueSetupMilliseconds,
|
||||
double asyncQueueReadPixelsMilliseconds,
|
||||
double asyncQueueFenceMilliseconds,
|
||||
double syncReadMilliseconds,
|
||||
bool asyncReadbackMissed,
|
||||
bool cachedFallbackUsed,
|
||||
bool syncFallbackUsed);
|
||||
bool TryRecordOutputRenderPipelineTiming(
|
||||
double drawMilliseconds,
|
||||
double fenceWaitMilliseconds,
|
||||
double mapMilliseconds,
|
||||
double readbackCopyMilliseconds,
|
||||
double cachedCopyMilliseconds,
|
||||
double asyncQueueMilliseconds,
|
||||
double asyncQueueBufferMilliseconds,
|
||||
double asyncQueueSetupMilliseconds,
|
||||
double asyncQueueReadPixelsMilliseconds,
|
||||
double asyncQueueFenceMilliseconds,
|
||||
double syncReadMilliseconds,
|
||||
bool asyncReadbackMissed,
|
||||
bool cachedFallbackUsed,
|
||||
bool syncFallbackUsed);
|
||||
|
||||
SignalStatusSnapshot GetSignalStatusSnapshot() const;
|
||||
VideoIOStatusSnapshot GetVideoIOStatusSnapshot() const;
|
||||
PerformanceSnapshot GetPerformanceSnapshot() const;
|
||||
|
||||
Reference in New Issue
Block a user