diff --git a/lighthouse-core/scripts/cleanup-LHR-for-diff.js b/lighthouse-core/scripts/cleanup-LHR-for-diff.js index 07c3fd3f7b8e..ca3fc5ceed2e 100755 --- a/lighthouse-core/scripts/cleanup-LHR-for-diff.js +++ b/lighthouse-core/scripts/cleanup-LHR-for-diff.js @@ -23,9 +23,23 @@ writeFileSync(filename, cleanAndFormatLHR(data), 'utf8'); * @return {string} */ function cleanAndFormatLHR(lhrString) { + /** @type {LH.Result} */ const lhr = JSON.parse(lhrString); + + // TODO: Resolve the below so we don't need to delete it: + // 1) The string|boolean story for proto + // 2) Travis gets a absolute path during yarn diff:sample-json delete lhr.configSettings.auditMode; - delete lhr.timing; + + // Set timing values, which change from run to run, to predictable values + lhr.timing.total = 12345.6789; + lhr.timing.entries.forEach(entry => { + // @ts-ignore - write to readonly property + entry.duration = 100; + // @ts-ignore - write to readonly property + entry.startTime = 0; // Not realsitic, but avoids a lot of diff churn + }); + if (extraFlag !== '--only-remove-timing') { for (const auditResult of Object.values(lhr.audits)) { auditResult.description = '**Excluded from diff**'; diff --git a/lighthouse-core/test/report/proto-test.js b/lighthouse-core/test/report/proto-test.js index cf918a68504e..0593a3d1941e 100644 --- a/lighthouse-core/test/report/proto-test.js +++ b/lighthouse-core/test/report/proto-test.js @@ -59,6 +59,9 @@ describe('round trip JSON comparison subsets', () => { }); }); +// Note: In a failing diff, if you see details.summary going from {} to null, it's OK. +// Jest considers this not a failure, and neither do we, here in the python roundtrip +// Meanwhile, The PSI roundtrip maintains {} to {}. describe('round trip JSON comparison to everything', () => { let sampleJson; diff --git a/lighthouse-core/test/results/sample_v2.json b/lighthouse-core/test/results/sample_v2.json index 2442879ba057..7417f748c94d 100644 --- a/lighthouse-core/test/results/sample_v2.json +++ b/lighthouse-core/test/results/sample_v2.json @@ -3422,6 +3422,749 @@ "description": "To appear in search results, crawlers need access to your app." } }, + "timing": { + "entries": [ + { + "startTime": 0, + "name": "lh:init:config", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:config:requireGatherers", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:config:requireAudits", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:runner:run", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:runner:auditing", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:is-on-https", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:redirects-http", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:service-worker", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:works-offline", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:viewport", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:without-javascript", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:first-contentful-paint", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:first-meaningful-paint", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:load-fast-enough-for-pwa", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:speed-index", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:screenshot-thumbnails", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:final-screenshot", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:estimated-input-latency", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:errors-in-console", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:time-to-first-byte", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:first-cpu-idle", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:interactive", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:user-timings", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:critical-request-chains", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:redirects", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:webapp-install-banner", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:splash-screen", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:themed-omnibox", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:content-width", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:image-aspect-ratio", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:deprecations", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:mainthread-work-breakdown", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:bootup-time", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-rel-preload", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-rel-preconnect", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:font-display", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:network-requests", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:metrics", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:pwa-cross-browser", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:pwa-page-transitions", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:pwa-each-page-has-url", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:accesskeys", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:aria-allowed-attr", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:aria-required-attr", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:aria-required-children", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:aria-required-parent", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:aria-roles", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:aria-valid-attr-value", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:aria-valid-attr", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:audio-caption", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:button-name", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:bypass", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:color-contrast", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:definition-list", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:dlitem", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:document-title", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:duplicate-id", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:frame-title", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:html-has-lang", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:html-lang-valid", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:image-alt", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:input-image-alt", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:label", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:layout-table", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:link-name", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:list", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:listitem", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:meta-refresh", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:meta-viewport", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:object-alt", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:tabindex", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:td-headers-attr", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:th-has-data-cells", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:valid-lang", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:video-caption", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:video-description", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:custom-controls-labels", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:custom-controls-roles", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:focus-traps", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:focusable-controls", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:heading-levels", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:interactive-element-affordance", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:logical-tab-order", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:managed-focus", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:offscreen-content-hidden", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:use-landmarks", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:visual-order-follows-dom", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-long-cache-ttl", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:total-byte-weight", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:offscreen-images", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:render-blocking-resources", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:unminified-css", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:unminified-javascript", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:unused-css-rules", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-webp-images", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-optimized-images", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-text-compression", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-responsive-images", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:efficient-animated-content", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:appcache-manifest", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:doctype", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:dom-size", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:external-anchors-use-rel-noopener", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:geolocation-on-start", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:no-document-write", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:no-vulnerable-libraries", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:js-libraries", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:notification-on-start", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:password-inputs-can-be-pasted-into", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-http2", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:uses-passive-event-listeners", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:meta-description", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:http-status-code", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:font-size", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:link-text", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:is-crawlable", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:robots-txt", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:hreflang", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:plugins", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:canonical", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:mobile-friendly", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:audit:structured-data", + "duration": 100, + "entryType": "measure" + }, + { + "startTime": 0, + "name": "lh:runner:generate", + "duration": 100, + "entryType": "measure" + } + ], + "total": 12345.6789 + }, "i18n": { "rendererFormattedStrings": { "auditGroupExpandTooltip": "Show audits", diff --git a/proto/lighthouse-result.proto b/proto/lighthouse-result.proto index 8c93bdc201e1..e4e0f4b1a30e 100644 --- a/proto/lighthouse-result.proto +++ b/proto/lighthouse-result.proto @@ -225,8 +225,20 @@ message LighthouseResult { // Message containing the performance timing data for the Lighthouse run message Timing { + + // Corresponds to: https://www.w3.org/TR/performance-timeline-2/#dom-performanceentry + message PerformanceEntry { + string name = 1; + string entry_type = 2; + google.protobuf.DoubleValue start_time = 3; + google.protobuf.DoubleValue duration = 4; + } + // The total duration of Lighthouse's run google.protobuf.DoubleValue total = 1; + + // Corresponds to: https://www.w3.org/TR/performance-timeline-2/#idl-def-performanceentrylist + repeated PerformanceEntry entries = 2; } // The performance timing data for the Lighthouse run diff --git a/proto/sample_v2_round_trip.json b/proto/sample_v2_round_trip.json index f6c43f781f17..3d9910611e44 100644 --- a/proto/sample_v2_round_trip.json +++ b/proto/sample_v2_round_trip.json @@ -3300,5 +3300,748 @@ "lighthouseVersion": "3.2.0", "requestedUrl": "http://localhost:10200/dobetterweb/dbw_tester.html", "runWarnings": [], + "timing": { + "entries": [ + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:init:config", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:config:requireGatherers", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:config:requireAudits", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:runner:run", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:runner:auditing", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:is-on-https", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:redirects-http", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:service-worker", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:works-offline", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:viewport", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:without-javascript", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:first-contentful-paint", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:first-meaningful-paint", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:load-fast-enough-for-pwa", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:speed-index", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:screenshot-thumbnails", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:final-screenshot", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:estimated-input-latency", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:errors-in-console", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:time-to-first-byte", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:first-cpu-idle", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:interactive", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:user-timings", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:critical-request-chains", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:redirects", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:webapp-install-banner", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:splash-screen", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:themed-omnibox", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:content-width", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:image-aspect-ratio", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:deprecations", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:mainthread-work-breakdown", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:bootup-time", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-rel-preload", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-rel-preconnect", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:font-display", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:network-requests", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:metrics", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:pwa-cross-browser", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:pwa-page-transitions", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:pwa-each-page-has-url", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:accesskeys", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:aria-allowed-attr", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:aria-required-attr", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:aria-required-children", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:aria-required-parent", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:aria-roles", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:aria-valid-attr-value", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:aria-valid-attr", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:audio-caption", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:button-name", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:bypass", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:color-contrast", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:definition-list", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:dlitem", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:document-title", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:duplicate-id", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:frame-title", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:html-has-lang", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:html-lang-valid", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:image-alt", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:input-image-alt", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:label", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:layout-table", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:link-name", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:list", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:listitem", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:meta-refresh", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:meta-viewport", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:object-alt", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:tabindex", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:td-headers-attr", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:th-has-data-cells", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:valid-lang", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:video-caption", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:video-description", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:custom-controls-labels", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:custom-controls-roles", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:focus-traps", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:focusable-controls", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:heading-levels", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:interactive-element-affordance", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:logical-tab-order", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:managed-focus", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:offscreen-content-hidden", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:use-landmarks", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:visual-order-follows-dom", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-long-cache-ttl", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:total-byte-weight", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:offscreen-images", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:render-blocking-resources", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:unminified-css", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:unminified-javascript", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:unused-css-rules", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-webp-images", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-optimized-images", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-text-compression", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-responsive-images", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:efficient-animated-content", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:appcache-manifest", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:doctype", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:dom-size", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:external-anchors-use-rel-noopener", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:geolocation-on-start", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:no-document-write", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:no-vulnerable-libraries", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:js-libraries", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:notification-on-start", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:password-inputs-can-be-pasted-into", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-http2", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:uses-passive-event-listeners", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:meta-description", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:http-status-code", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:font-size", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:link-text", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:is-crawlable", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:robots-txt", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:hreflang", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:plugins", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:canonical", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:mobile-friendly", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:audit:structured-data", + "startTime": 0.0 + }, + { + "duration": 100.0, + "entryType": "measure", + "name": "lh:runner:generate", + "startTime": 0.0 + } + ], + "total": 12345.6789 + }, "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3358.0 Safari/537.36" } \ No newline at end of file