Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
No EOL
2 KiB
Text
49 lines
No EOL
2 KiB
Text
// Copyright 2024 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
import * as Core from '../core/core.js';
|
|
import * as Graph from '../graph/graph.js';
|
|
import { Metric, } from './Metric.js';
|
|
class MaxPotentialFID extends Metric {
|
|
static get coefficients() {
|
|
return {
|
|
intercept: 0,
|
|
optimistic: 0.5,
|
|
pessimistic: 0.5,
|
|
};
|
|
}
|
|
static getOptimisticGraph(dependencyGraph) {
|
|
return dependencyGraph;
|
|
}
|
|
static getPessimisticGraph(dependencyGraph) {
|
|
return dependencyGraph;
|
|
}
|
|
static getEstimateFromSimulation(simulation, extras) {
|
|
if (!extras.fcpResult) {
|
|
throw new Core.LanternError('missing fcpResult');
|
|
}
|
|
// Intentionally use the opposite FCP estimate, a more pessimistic FCP means that more tasks
|
|
// are excluded from the FID computation, so a higher FCP means lower FID for same work.
|
|
const fcpTimeInMs = extras.optimistic ? extras.fcpResult.pessimisticEstimate.timeInMs :
|
|
extras.fcpResult.optimisticEstimate.timeInMs;
|
|
const timings = MaxPotentialFID.getTimingsAfterFCP(simulation.nodeTimings, fcpTimeInMs);
|
|
return {
|
|
timeInMs: Math.max(...timings.map(timing => timing.duration), 16),
|
|
nodeTimings: simulation.nodeTimings,
|
|
};
|
|
}
|
|
static compute(data, extras) {
|
|
const fcpResult = extras?.fcpResult;
|
|
if (!fcpResult) {
|
|
throw new Core.LanternError('FCP is required to calculate the Max Potential FID metric');
|
|
}
|
|
return super.compute(data, extras);
|
|
}
|
|
static getTimingsAfterFCP(nodeTimings, fcpTimeInMs) {
|
|
return Array.from(nodeTimings.entries())
|
|
.filter(([node, timing]) => node.type === Graph.BaseNode.types.CPU && timing.endTime > fcpTimeInMs)
|
|
.map(([_, timing]) => timing);
|
|
}
|
|
}
|
|
export { MaxPotentialFID };
|
|
//# sourceMappingURL=MaxPotentialFID.js.map |