You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
samples/web/_packages/web_startup_analyzer/lib/web_startup_analyzer.js

48 lines
1.6 KiB

// Copyright 2021 The Flutter team. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Helper class to capture Flutter web app startup timing information
class FlutterWebStartupAnalyzer {
timings;
constructor() {
this.timings = {};
}
markStart(name) {
this.timings[name] = null;
performance.mark('flt-' + name + '-started');
}
markFinished(name) {
performance.mark('flt-' + name + '-finished');
}
capture(name) {
var timingName = 'flt-' + name;
var started = 'flt-' + name + 'started';
try {
var measurement = performance.measure('flt-' + name, 'flt-' + name + '-started', 'flt-' + name + '-finished');
} catch(e) {
// ignore errors if the mark doesn't exist
return;
}
this.timings[name] = measurement.duration;
}
captureAll() {
for (var [key, value] of Object.entries(this.timings)) {
this.capture(key);
}
// Capture
this.timings['load'] = performance.timing.loadEventEnd - performance.timing.domContentLoadedEventEnd;
this.timings['domContentLoaded'] = performance.timing.domContentLoadedEventEnd - performance.timing.navigationStart;
}
capturePaint() {
const entries = performance.getEntriesByType("paint");
// Collect first-paint and first-contentful-paint entries
entries.forEach((entry) => {
this.timings[entry.name] = entry.startTime;
});
}
}