| 226 | } |
| 227 | |
| 228 | void PerfTelemetry::recordFrameAge(FrameKind kind, double ageMs) |
| 229 | { |
| 230 | const qint64 now = nowNs(); |
| 231 | if (!beginRecord(now)) |
| 232 | return; |
| 233 | |
| 234 | { |
| 235 | QMutexLocker lock(&m_mutex); |
| 236 | QVector<double>& samples = kind == FrameKind::Waterfall |
| 237 | ? m_window.waterfallAgeMs |
| 238 | : m_window.panAgeMs; |
| 239 | samples.append(ageMs); |
| 240 | } |
| 241 | |
| 242 | if (ageMs > kFrameAgeStallMs) { |
| 243 | logStall({ |
| 244 | keyValue(QStringLiteral("kind"), QStringLiteral("frameAge")), |
| 245 | keyValue(QStringLiteral("stream"), frameKindName(kind)), |
| 246 | keyValue(QStringLiteral("ageMs"), msValue(ageMs)) |
| 247 | }); |
| 248 | } |
| 249 | |
| 250 | maybeLogSummary(now); |
| 251 | } |
| 252 | |
| 253 | void PerfTelemetry::recordPanFrame() |
| 254 | { |