Skip to content

Commit

Permalink
refactor a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
connorjclark committed Jun 6, 2024
1 parent 70cf020 commit 2b322e1
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 31 deletions.
5 changes: 5 additions & 0 deletions core/computed/metrics/lantern-metric.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import {LighthouseError} from '../../lib/lh-error.js';
import {LoadSimulator} from '../load-simulator.js';
import {ProcessedNavigation} from '../processed-navigation.js';
import {PageDependencyGraph} from '../page-dependency-graph.js';
import {TraceEngineResult} from '../trace-engine-result.js';
import {createProcessedNavigation} from '../../lib/lantern/lantern.js';

/**
* @param {LH.Artifacts.MetricComputationDataInput} data
Expand Down Expand Up @@ -37,6 +39,9 @@ async function getComputationDataParamsFromTrace(data, context) {

const graph = await PageDependencyGraph.request({...data, fromTrace: true}, context);
const processedNavigation = await ProcessedNavigation.request(data.trace, context);
// TODO(15841): investigate failures
// const processedNavigation = createProcessedNavigation(
// await TraceEngineResult.request(data, context));
const simulator = data.simulator || (await LoadSimulator.request(data, context));

return {simulator, graph, processedNavigation};
Expand Down
38 changes: 38 additions & 0 deletions core/lib/lantern/lantern.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
* SPDX-License-Identifier: Apache-2.0
*/

import * as Lantern from './types/lantern.js';

/** @typedef {import('@paulirish/trace_engine/models/trace/handlers/PageLoadMetricsHandler.js').MetricName} MetricName */
/** @typedef {import('@paulirish/trace_engine/models/trace/handlers/PageLoadMetricsHandler.js').MetricScore} MetricScore */

/** @type {LH.Util.SelfMap<LH.Crdp.Network.ResourceType>} */
const NetworkRequestTypes = {
XHR: 'XHR',
Expand All @@ -26,6 +31,39 @@ const NetworkRequestTypes = {
Prefetch: 'Prefetch',
};

/**
* @param {LH.Artifacts.TraceEngineResult} traceEngineResult
* @return {Lantern.Simulation.ProcessedNavigation}
*/
function createProcessedNavigation(traceEngineResult) {
const Meta = traceEngineResult.data.Meta;
const frameId = Meta.mainFrameId;
const navigationId = Meta.mainFrameNavigations[0].args.data?.navigationId || '';
const scores = traceEngineResult.data.PageLoadMetrics.metricScoresByFrameId.get(frameId)?.get(navigationId);
/** @param {MetricName} metric */
const getTimestampOrUndefined = metric => {
const metricScore = scores?.get(metric);
if (!metricScore?.event) return;
return metricScore.event.ts;
};
/** @param {MetricName} metric */
const getTimestamp = metric => {
const metricScore = scores?.get(metric);
if (!metricScore?.event) throw new Error(`missing metric: ${metric}`);
return metricScore.event.ts;
};
// TODO: should use `MetricName.LCP`, but it is a const enum.
const FCP = /** @type {MetricName} */('FCP');
const LCP = /** @type {MetricName} */('LCP');
return {
timestamps: {
firstContentfulPaint: getTimestamp(FCP),
largestContentfulPaint: getTimestampOrUndefined(LCP),
},
};
}

export {
NetworkRequestTypes,
createProcessedNavigation,
};
32 changes: 1 addition & 31 deletions core/test/lib/lantern/metrics/metric-test-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@

import {ProcessedTrace} from '../../../../computed/processed-trace.js';
import {TraceEngineResult} from '../../../../computed/trace-engine-result.js';
import {createProcessedNavigation} from '../../../../lib/lantern/lantern.js';
import {PageDependencyGraph} from '../../../../lib/lantern/page-dependency-graph.js';
import {NetworkAnalyzer} from '../../../../lib/lantern/simulator/network-analyzer.js';
import {Simulator} from '../../../../lib/lantern/simulator/simulator.js';
import * as Lantern from '../../../../lib/lantern/types/lantern.js';
import {getURLArtifactFromDevtoolsLog} from '../../../test-utils.js';

/** @typedef {Lantern.NetworkRequest<import('@paulirish/trace_engine/models/trace/types/TraceEvents.js').SyntheticNetworkRequest>} NetworkRequest */
/** @typedef {import('@paulirish/trace_engine/models/trace/handlers/PageLoadMetricsHandler.js').MetricName} MetricName */
/** @typedef {import('@paulirish/trace_engine/models/trace/handlers/PageLoadMetricsHandler.js').MetricScore} MetricScore */

// TODO(15841): remove usage of Lighthouse code to create test data

Expand All @@ -30,35 +29,6 @@ async function createGraph(traceEngineResult, theURL, trace, context) {
mainThreadEvents, trace, traceEngineResult, theURL);
}

/**
* @param {LH.Artifacts.TraceEngineResult} traceEngineResult
* @return {Lantern.Simulation.ProcessedNavigation}
*/
function createProcessedNavigation(traceEngineResult) {
const Meta = traceEngineResult.data.Meta;
const frameId = Meta.mainFrameId;
const navigationId = Meta.mainFrameNavigations[0].args.data?.navigationId || '';
const scores = traceEngineResult.data.PageLoadMetrics.metricScoresByFrameId.get(frameId)?.get(navigationId);
/** @param {MetricScore=} metricScore */
const getTimestampOrUndefined = metricScore => metricScore?.event ? metricScore.event.ts : undefined;
/** @param {MetricScore=} metricScore */
const getTimestamp = metricScore => {
if (!metricScore?.event) {
throw new Error('missing metric');
}
return metricScore.event.ts;
};
// TODO: should use `MetricName.LCP`, but it is a const enum.
const FCP = /** @type {MetricName} */('FCP');
const LCP = /** @type {MetricName} */('LCP');
return {
timestamps: {
firstContentfulPaint: getTimestamp(scores?.get(FCP)),
largestContentfulPaint: getTimestampOrUndefined(scores?.get(LCP)),
},
};
}

/**
* @param {{trace: LH.Trace, devtoolsLog: LH.DevtoolsLog, settings?: LH.Config.Settings, URL?: LH.Artifacts.URL}} opts
*/
Expand Down

0 comments on commit 2b322e1

Please sign in to comment.