| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <!-- | 2 <!-- |
| 3 Copyright 2016 The Chromium Authors. All rights reserved. | 3 Copyright 2016 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/category_util.html"> | 8 <link rel="import" href="/tracing/base/category_util.html"> |
| 9 <link rel="import" href="/tracing/base/statistics.html"> | 9 <link rel="import" href="/tracing/base/statistics.html"> |
| 10 <link rel="import" href="/tracing/metrics/metric_registry.html"> | 10 <link rel="import" href="/tracing/metrics/metric_registry.html"> |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 if (shouldIgnoreURL(url)) | 233 if (shouldIgnoreURL(url)) |
| 234 continue; | 234 continue; |
| 235 var navigationStartEvent = navigationStartFinder. | 235 var navigationStartEvent = navigationStartFinder. |
| 236 findNavigationStartEventForFrameBeforeTimestamp(frameIdRef, ev.start); | 236 findNavigationStartEventForFrameBeforeTimestamp(frameIdRef, ev.start); |
| 237 // Ignore layout w/o preceding navigationStart, as they are not | 237 // Ignore layout w/o preceding navigationStart, as they are not |
| 238 // attributed to any time-to-X metric. | 238 // attributed to any time-to-X metric. |
| 239 if (navigationStartEvent === undefined) | 239 if (navigationStartEvent === undefined) |
| 240 continue; | 240 continue; |
| 241 | 241 |
| 242 var timeToEvent = ev.start - navigationStartEvent.start; | 242 var timeToEvent = ev.start - navigationStartEvent.start; |
| 243 histogram.add(timeToEvent, tr.v.d.DiagnosticMap.fromObject( | 243 histogram.addSample(timeToEvent, {url: new tr.v.d.Generic(url)}); |
| 244 {url: new tr.v.d.Generic(url)})); | |
| 245 } | 244 } |
| 246 values.addValue(new tr.v.NumericValue(metric.valueName, histogram, | 245 values.addValue(new tr.v.NumericValue(metric.valueName, histogram, |
| 247 {description: metric.description})); | 246 {description: metric.description})); |
| 248 } | 247 } |
| 249 } | 248 } |
| 250 | 249 |
| 251 function addTimeToInteractiveSampleToHistogram(histogram, rendererHelper, | 250 function addTimeToInteractiveSampleToHistogram(histogram, rendererHelper, |
| 252 navigationStartTime, firstMeaningfulPaint, url) { | 251 navigationStartTime, firstMeaningfulPaint, url) { |
| 253 if (shouldIgnoreURL(url)) | 252 if (shouldIgnoreURL(url)) |
| 254 return; | 253 return; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 277 firstInteractiveCandidate = ev.end - 50; | 276 firstInteractiveCandidate = ev.end - 50; |
| 278 } | 277 } |
| 279 } | 278 } |
| 280 var diagnosticDict = rendererHelper.generateTimeBreakdownTree( | 279 var diagnosticDict = rendererHelper.generateTimeBreakdownTree( |
| 281 navigationStartTime, firstInteractive); | 280 navigationStartTime, firstInteractive); |
| 282 diagnosticDict.url = url; | 281 diagnosticDict.url = url; |
| 283 diagnosticDict.start = navigationStartTime; | 282 diagnosticDict.start = navigationStartTime; |
| 284 diagnosticDict.interactive = firstInteractive; | 283 diagnosticDict.interactive = firstInteractive; |
| 285 diagnosticDict.pid = rendererHelper.pid; | 284 diagnosticDict.pid = rendererHelper.pid; |
| 286 var timeToFirstInteractive = firstInteractive - navigationStartTime; | 285 var timeToFirstInteractive = firstInteractive - navigationStartTime; |
| 287 histogram.add(timeToFirstInteractive, tr.v.d.DiagnosticMap.fromObject( | 286 histogram.addSample(timeToFirstInteractive, |
| 288 {breakdown: new tr.v.d.Generic(diagnosticDict)})); | 287 {breakdown: new tr.v.d.Generic(diagnosticDict)}); |
| 289 } | 288 } |
| 290 | 289 |
| 291 /** | 290 /** |
| 292 * Computes Time to first meaningful paint (TTFMP) & time to interactive (TTI) | 291 * Computes Time to first meaningful paint (TTFMP) & time to interactive (TTI) |
| 293 * from |model| and add it to |value|. | 292 * from |model| and add it to |value|. |
| 294 * | 293 * |
| 295 * First meaningful paint is the paint following the layout with the highest | 294 * First meaningful paint is the paint following the layout with the highest |
| 296 * "Layout Significance". The Layout Significance is computed inside Blink, | 295 * "Layout Significance". The Layout Significance is computed inside Blink, |
| 297 * by FirstMeaningfulPaintDetector class. It logs | 296 * by FirstMeaningfulPaintDetector class. It logs |
| 298 * "firstMeaningfulPaintCandidate" event every time the Layout Significance | 297 * "firstMeaningfulPaintCandidate" event every time the Layout Significance |
| (...skipping 25 matching lines...) Expand all Loading... |
| 324 if (snapshot === undefined || !snapshot.args.isLoadingMainFrame) | 323 if (snapshot === undefined || !snapshot.args.isLoadingMainFrame) |
| 325 return; | 324 return; |
| 326 var url = snapshot.args.documentLoaderURL; | 325 var url = snapshot.args.documentLoaderURL; |
| 327 if (shouldIgnoreURL(url)) | 326 if (shouldIgnoreURL(url)) |
| 328 return; | 327 return; |
| 329 var timeToFirstMeaningfulPaint = | 328 var timeToFirstMeaningfulPaint = |
| 330 fmpMarkerEvent.start - navigationStart.start; | 329 fmpMarkerEvent.start - navigationStart.start; |
| 331 var diagnosticDict = rendererHelper.generateTimeBreakdownTree( | 330 var diagnosticDict = rendererHelper.generateTimeBreakdownTree( |
| 332 navigationStart.start, fmpMarkerEvent.start); | 331 navigationStart.start, fmpMarkerEvent.start); |
| 333 diagnosticDict.url = url; | 332 diagnosticDict.url = url; |
| 334 firstMeaningfulPaintHistogram.add( | 333 firstMeaningfulPaintHistogram.addSample(timeToFirstMeaningfulPaint, |
| 335 timeToFirstMeaningfulPaint, | 334 {breakdown: new tr.v.d.Generic(diagnosticDict)}); |
| 336 tr.v.d.DiagnosticMap.fromObject( | |
| 337 {breakdown: new tr.v.d.Generic(diagnosticDict)})); | |
| 338 return {firstMeaningfulPaint: fmpMarkerEvent.start, url: url}; | 335 return {firstMeaningfulPaint: fmpMarkerEvent.start, url: url}; |
| 339 } | 336 } |
| 340 | 337 |
| 341 var candidatesForFrameId = | 338 var candidatesForFrameId = |
| 342 findFirstMeaningfulPaintCandidates(rendererHelper); | 339 findFirstMeaningfulPaintCandidates(rendererHelper); |
| 343 | 340 |
| 344 for (var frameIdRef in candidatesForFrameId) { | 341 for (var frameIdRef in candidatesForFrameId) { |
| 345 var navigationStart; | 342 var navigationStart; |
| 346 var lastCandidate; | 343 var lastCandidate; |
| 347 | 344 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 timeToFirstMeaningfulPaintAndTimeToInteractiveMetrics(values, model); | 393 timeToFirstMeaningfulPaintAndTimeToInteractiveMetrics(values, model); |
| 397 } | 394 } |
| 398 | 395 |
| 399 tr.metrics.MetricRegistry.register(loadingMetric); | 396 tr.metrics.MetricRegistry.register(loadingMetric); |
| 400 | 397 |
| 401 return { | 398 return { |
| 402 loadingMetric: loadingMetric | 399 loadingMetric: loadingMetric |
| 403 }; | 400 }; |
| 404 }); | 401 }); |
| 405 </script> | 402 </script> |
| OLD | NEW |