Index: tracing/tracing/metrics/system_health/estimated_input_latency_metric.html |
diff --git a/tracing/tracing/metrics/system_health/estimated_input_latency_metric.html b/tracing/tracing/metrics/system_health/estimated_input_latency_metric.html |
index 9aa02eb70dd8b6ec0dc4c53967c46da264d0e9ae..64c7d100b55bd492fd80691f937f1323680cd9e2 100644 |
--- a/tracing/tracing/metrics/system_health/estimated_input_latency_metric.html |
+++ b/tracing/tracing/metrics/system_health/estimated_input_latency_metric.html |
@@ -43,18 +43,23 @@ tr.exportTo('tr.metrics.sh', function() { |
} |
/** |
- * Returns the time window during which the the page is interactive. |
- * This time window excludes the page load time. We compute EQT only for |
- * the interactive time because the input latency during the page load time |
- * is not interesting. |
- * @throws if there is no interactive time window or if there are multiple |
- * interactive time windows. |
+ * @param {string} name Name of the histogram. |
+ * @param {string} description Description of the histogram. |
+ * @returns {!tr.v.Histogram} |
*/ |
- function getInteractiveWindow_(model, rendererHelper) { |
- let interactiveTimestamp = tr.b.getOnlyElement( |
- tr.e.chrome.getInteractiveTimestamps(model).get(rendererHelper.pid)); |
- return tr.b.Range.fromExplicitRange(interactiveTimestamp, Infinity) |
- .findIntersection(rendererHelper.mainThread.bounds); |
+ function createHistogramForEQT_(name, description) { |
+ let histogram = new tr.v.Histogram(name, |
+ tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, EQT_BOUNDARIES); |
+ histogram.customizeSummaryOptions({ |
+ avg: false, |
+ count: false, |
+ max: true, |
+ min: false, |
+ std: false, |
+ sum: false, |
+ }); |
+ histogram.description = description; |
+ return histogram; |
} |
/** |
@@ -65,33 +70,43 @@ tr.exportTo('tr.metrics.sh', function() { |
function estimatedInputLatency(values, model) { |
let chromeHelper = model.getOrCreateHelper( |
tr.model.helpers.ChromeModelHelper); |
- let histogram = new tr.v.Histogram( |
+ let totalHistogram = createHistogramForEQT_( |
+ `total:${WINDOW_SIZE_MS}ms_window:renderer_eqt`, |
+ `The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window` + |
+ ' for a given renderer'); |
+ let interactiveHistogram = createHistogramForEQT_( |
`interactive:${WINDOW_SIZE_MS}ms_window:renderer_eqt`, |
- tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, |
- EQT_BOUNDARIES); |
- histogram.customizeSummaryOptions({ |
- avg: false, |
- count: false, |
- max: true, |
- min: false, |
- std: false, |
- sum: false, |
- }); |
- histogram.description = |
`The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window` + |
- ' for a given renderer'; |
+ ' for a given renderer while the page is interactive'); |
let rendererHelpers = tr.b.dictionaryValues(chromeHelper.rendererHelpers); |
for (let rendererHelper of rendererHelpers) { |
if (rendererHelper.isChromeTracingUI) continue; |
let tasks = rendererHelper.mainThread.sliceGroup.topLevelSlices |
.filter(slice => slice.duration > 0 && !containsForcedGC_(slice)) |
.map(slice => {return {start: slice.start, end: slice.end};}); |
- let interactiveWindow = getInteractiveWindow_(model, rendererHelper); |
- histogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow( |
- interactiveWindow.min, interactiveWindow.max, |
- WINDOW_SIZE_MS, tasks)); |
+ totalHistogram.addSample( |
+ tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow( |
+ rendererHelper.mainThread.bounds.min, |
+ rendererHelper.mainThread.bounds.max, |
+ WINDOW_SIZE_MS, tasks)); |
+ let interactiveTimestamps = |
+ tr.e.chrome.getInteractiveTimestamps(model).get(rendererHelper.pid); |
+ if (interactiveTimestamps.length === 0) continue; |
+ if (interactiveTimestamps.length > 1) { |
+ // TODO(ulan): Support multiple interactive time windows when |
+ // https://crbug.com/692112 is fixed. |
+ continue; |
+ } |
+ let interactiveWindow = |
+ tr.b.Range.fromExplicitRange(interactiveTimestamps[0], Infinity) |
+ .findIntersection(rendererHelper.mainThread.bounds); |
+ interactiveHistogram.addSample( |
+ tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow( |
+ interactiveWindow.min, interactiveWindow.max, |
+ WINDOW_SIZE_MS, tasks)); |
} |
- values.addHistogram(histogram); |
+ values.addHistogram(totalHistogram); |
+ values.addHistogram(interactiveHistogram); |
} |
tr.metrics.MetricRegistry.register(estimatedInputLatency); |