Index: tracing/tracing/metrics/system_health/clock_sync_latency_metric.html |
diff --git a/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html b/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html |
index 8d3820e77d7a6622d90bb07163e9fc0a0357fb14..60d6d661169de9248a5ea21c1ac5e0765a4ce826 100644 |
--- a/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html |
+++ b/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html |
@@ -14,39 +14,35 @@ found in the LICENSE file. |
'use strict'; |
tr.exportTo('tr.metrics.sh', function() { |
- function syncIsComplete(markers) { |
- return markers.length === 2; |
- } |
- |
- function syncInvolvesTelemetry(markers) { |
- for (var marker of markers) |
- if (marker.domainId === tr.model.ClockDomainId.TELEMETRY) |
- return true; |
- return false; |
- } |
+ // Bin boundaries for clock sync latency. 0-20 ms with 0.2 ms bins. |
+ // 20 ms is a good upper limit because the highest latencies we've seen are |
+ // around 10-15 ms, and we expect average latency to go down as we improve |
+ // the clock sync mechanism. |
+ var LATENCY_BOUNDS = tr.v.HistogramBinBoundaries.createLinear(0, 20, 100); |
function clockSyncLatencyMetric(values, model) { |
- for (var markers of model.clockSyncManager.markersBySyncId.values()) { |
- var latency = undefined; |
- var targetDomain = undefined; |
- if (!syncIsComplete(markers) || !syncInvolvesTelemetry(markers)) |
- continue; |
- |
- for (var marker of markers) { |
- var domain = marker.domainId; |
- if (domain === tr.model.ClockDomainId.TELEMETRY) |
- latency = (marker.endTs - marker.startTs); |
- else |
- targetDomain = domain.toLowerCase(); |
+ var domains = Array.from(model.clockSyncManager.domainsSeen).sort(); |
+ for (var i = 0; i < domains.length; i++) { |
+ for (var j = i + 1; j < domains.length; j++) { |
+ var latency = model.clockSyncManager.getTimeTransformerError( |
+ domains[i], domains[j]); |
+ var hist = new tr.v.Histogram('clock_sync_latency_' + |
+ domains[i].toLowerCase() + '_to_' + domains[j].toLowerCase(), |
+ tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, LATENCY_BOUNDS); |
+ hist.customizeSummaryOptions({ |
+ avg: true, |
+ count: false, |
+ max: false, |
+ min: false, |
+ std: false, |
+ sum: false, |
+ }); |
+ hist.description = 'Clock sync latency for domain ' + domains[i] + |
+ ' to domain ' + domains[j]; |
+ hist.addSample(latency); |
+ values.addHistogram(hist); |
} |
- |
- var hist = new tr.v.Histogram('clock_sync_latency_' + targetDomain, |
- tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, |
- tr.v.HistogramBinBoundaries.createExponential(1e-3, 1e3, 30)); |
- hist.description = 'Clock sync latency for domain ' + targetDomain; |
- hist.addSample(latency); |
- values.addHistogram(hist); |
} |
} |