OLD | NEW |
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 Loading... |
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 Loading... |
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> |
OLD | NEW |