Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: tracing/tracing/metrics/system_health/expected_queueing_time_metric.html

Issue 3009553002: Refactor Histogram relationship diagnostics. (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <!-- 2 <!--
3 Copyright 2017 The Chromium Authors. All rights reserved. 3 Copyright 2017 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be 4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file. 5 found in the LICENSE file.
6 --> 6 -->
7 7
8 <link rel="import" href="/tracing/base/utils.html"> 8 <link rel="import" href="/tracing/base/utils.html">
9 <link rel="import" href="/tracing/extras/chrome/estimated_input_latency.html"> 9 <link rel="import" href="/tracing/extras/chrome/estimated_input_latency.html">
10 <link rel="import" href="/tracing/metrics/v8/utils.html"> 10 <link rel="import" href="/tracing/metrics/v8/utils.html">
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 `interactive:${WINDOW_SIZE_MS}ms_window:${eqtName}`, 129 `interactive:${WINDOW_SIZE_MS}ms_window:${eqtName}`,
130 `The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window` + 130 `The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window` +
131 ' for a given renderer while the page is interactive'); 131 ' for a given renderer while the page is interactive');
132 for (const rendererHelper of rendererHelpers) { 132 for (const rendererHelper of rendererHelpers) {
133 if (rendererHelper.isChromeTracingUI) continue; 133 if (rendererHelper.isChromeTracingUI) continue;
134 const tasks = getTasks(rendererHelper); 134 const tasks = getTasks(rendererHelper);
135 totalHistogram.addSample( 135 totalHistogram.addSample(
136 tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow( 136 tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(
137 rendererHelper.mainThread.bounds.min, 137 rendererHelper.mainThread.bounds.min,
138 rendererHelper.mainThread.bounds.max, 138 rendererHelper.mainThread.bounds.max,
139 WINDOW_SIZE_MS, tasks)); 139 WINDOW_SIZE_MS, tasks), {
140 v8: tr.v.d.Breakdown.fromEntries(/*TODO*/),
141 });
140 const interactiveTimestamps = 142 const interactiveTimestamps =
141 rendererToInteractiveTimestamps.get(rendererHelper.pid); 143 rendererToInteractiveTimestamps.get(rendererHelper.pid);
142 if (interactiveTimestamps.length === 0) continue; 144 if (interactiveTimestamps.length === 0) continue;
143 if (interactiveTimestamps.length > 1) { 145 if (interactiveTimestamps.length > 1) {
144 // TODO(ulan): Support multiple interactive time windows when 146 // TODO(ulan): Support multiple interactive time windows when
145 // https://crbug.com/692112 is fixed. 147 // https://crbug.com/692112 is fixed.
146 continue; 148 continue;
147 } 149 }
148 const interactiveWindow = 150 const interactiveWindow =
149 tr.b.math.Range.fromExplicitRange(interactiveTimestamps[0], Infinity) 151 tr.b.math.Range.fromExplicitRange(interactiveTimestamps[0], Infinity)
150 .findIntersection(rendererHelper.mainThread.bounds); 152 .findIntersection(rendererHelper.mainThread.bounds);
151 interactiveHistogram.addSample( 153 interactiveHistogram.addSample(
152 tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow( 154 tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(
153 interactiveWindow.min, interactiveWindow.max, 155 interactiveWindow.min, interactiveWindow.max,
154 WINDOW_SIZE_MS, tasks)); 156 WINDOW_SIZE_MS, tasks), {
157 v8: tr.v.d.Breakdown.fromEntries(/*TODO*/),
158 });
155 } 159 }
156 addV8ContributionToExpectedQueueingTime_( 160 addV8ContributionToExpectedQueueingTime_(
157 eqtName, getEventTimes, totalHistogram, interactiveHistogram, 161 eqtName, getEventTimes, totalHistogram, interactiveHistogram,
158 rendererToInteractiveTimestamps, histograms, model); 162 rendererToInteractiveTimestamps, histograms, model);
159 histograms.addHistogram(totalHistogram); 163 histograms.addHistogram(totalHistogram);
160 histograms.addHistogram(interactiveHistogram); 164 histograms.addHistogram(interactiveHistogram);
161 } 165 }
162 166
163 /** 167 /**
164 * Adds v8 related diagnostic histograms for the total and interactive EQT 168 * Adds v8 related diagnostic histograms for the total and interactive EQT
165 * of the renderer. 169 * of the renderer.
166 * Sample histograms: 170 * Sample histograms:
167 * - total:500ms_window:renderer_eqt:v8, 171 * - total:500ms_window:renderer_eqt:v8,
168 * - total:500ms_window:renderer_eqt:v8:gc, 172 * - total:500ms_window:renderer_eqt:v8:gc,
169 * - interactive:500ms_window:renderer_eqt:v8:gc:scavenger, 173 * - interactive:500ms_window:renderer_eqt:v8:gc:scavenger,
170 * - interactive:500ms_window:renderer_eqt:v8:compile. 174 * - interactive:500ms_window:renderer_eqt:v8:compile.
171 * @param {!string} eqtName the metric name part of the histogram name. 175 * @param {!string} eqtName the metric name part of the histogram name.
172 * @param {!EventTimesCallback} getEventTimes. 176 * @param {!EventTimesCallback} getEventTimes.
173 * @param {!tr.v.Histogram} totalEqtHistogram. 177 * @param {!tr.v.Histogram} totalEqtHistogram.
174 * @param {!tr.v.Histogram} interactiveEqtHistogram. 178 * @param {!tr.v.Histogram} interactiveEqtHistogram.
175 * @param {!Map.<number, Array.<number>>} rendererToInteractiveTimestamps 179 * @param {!Map.<number, Array.<number>>} rendererToInteractiveTimestamps
176 * a map from renderer pid to an array of interactive timestamps. 180 * a map from renderer pid to an array of interactive timestamps.
177 */ 181 */
178 function addV8ContributionToExpectedQueueingTime_( 182 function addV8ContributionToExpectedQueueingTime_(
179 eqtName, getEventTimes, totalEqtHistogram, interactiveEqtHistogram, 183 eqtName, getEventTimes, totalEqtHistogram, interactiveEqtHistogram,
180 rendererToInteractiveTimestamps, histograms, model) { 184 rendererToInteractiveTimestamps, histograms, model) {
181 if (!model.categories.includes('v8')) return; 185 if (!model.categories.includes('v8')) return;
182 const breakdownForTotal = new tr.v.d.RelatedHistogramMap(); 186 const totalRelatedNames = new tr.v.d.RelatedNameMap();
183 const breakdownForInteractive = new tr.v.d.RelatedHistogramMap(); 187 const interactiveRelatedNames = new tr.v.d.RelatedNameMap();
184 const eventNamesWithTaskExtractors = 188 const eventNamesWithTaskExtractors =
185 getV8EventNamesWithTaskExtractors_(getEventTimes); 189 getV8EventNamesWithTaskExtractors_(getEventTimes);
186 for (const [eventName, getTasks] of eventNamesWithTaskExtractors) { 190 for (const [eventName, getTasks] of eventNamesWithTaskExtractors) {
187 const contribution = contributionToExpectedQueueingTime_( 191 const contribution = contributionToExpectedQueueingTime_(
188 eqtName, eventName, getTasks, rendererToInteractiveTimestamps, 192 eqtName, eventName, getTasks, rendererToInteractiveTimestamps,
189 histograms, model); 193 histograms, model);
190 breakdownForTotal.set(eventName, contribution.total); 194 totalRelatedNames.set(eventName, contribution.total.name);
191 breakdownForInteractive.set(eventName, contribution.interactive); 195 interactiveRelatedNames.set(eventName, contribution.interactive.name);
192 } 196 }
193 totalEqtHistogram.diagnostics.set('v8', breakdownForTotal); 197 totalEqtHistogram.diagnostics.set('v8', totalRelatedNames);
194 interactiveEqtHistogram.diagnostics.set('v8', breakdownForInteractive); 198 interactiveEqtHistogram.diagnostics.set('v8', interactiveRelatedNames);
195 } 199 }
196 200
197 /** 201 /**
198 * @callback TaskExtractor 202 * @callback TaskExtractor
199 * @param {!tr.model.helpers.ChromeRendererHelper} rendererHelper 203 * @param {!tr.model.helpers.ChromeRendererHelper} rendererHelper
200 * @return {Array.<{start: !number, end: !number}>} 204 * @return {Array.<{start: !number, end: !number}>}
201 */ 205 */
202 206
203 /** 207 /**
204 * @param {!EventTimesCallback} getEventTimes. 208 * @param {!EventTimesCallback} getEventTimes.
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 }; 384 };
381 } 385 }
382 386
383 tr.metrics.MetricRegistry.register(expectedQueueingTimeMetric); 387 tr.metrics.MetricRegistry.register(expectedQueueingTimeMetric);
384 388
385 return { 389 return {
386 expectedQueueingTimeMetric, 390 expectedQueueingTimeMetric,
387 }; 391 };
388 }); 392 });
389 </script> 393 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698