Skip to content

Commit

Permalink
core(lantern): refactor LH.Gatherer.Simulation
Browse files Browse the repository at this point in the history
  • Loading branch information
connorjclark committed Mar 5, 2024
1 parent ea70907 commit 94de995
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 45 deletions.
4 changes: 3 additions & 1 deletion core/computed/load-simulator.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import * as constants from '../config/constants.js';
import {Simulator} from '../lib/lantern/simulator/simulator.js';
import {NetworkAnalysis} from './network-analysis.js';

/** @typedef {import('../../types/internal/lantern.js').Lantern.Simulation.Options} SimulationOptions */

class LoadSimulator {
/**
* @param {{devtoolsLog: LH.DevtoolsLog, settings: LH.Audit.Context['settings']}} data
Expand All @@ -19,7 +21,7 @@ class LoadSimulator {
const {throttlingMethod, throttling, precomputedLanternData} = data.settings;
const networkAnalysis = await NetworkAnalysis.request(data.devtoolsLog, context);

/** @type {LH.Gatherer.Simulation.Options} */
/** @type {SimulationOptions} */
const options = {
additionalRttByOrigin: networkAnalysis.additionalRttByOrigin,
serverResponseTimeByOrigin: networkAnalysis.serverResponseTimeByOrigin,
Expand Down
7 changes: 5 additions & 2 deletions core/lib/lantern/simulator/simulator.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/** @typedef {import('../../../../types/internal/lantern.js').Lantern.NetworkRequest} NetworkRequest */
/** @typedef {import('../../../../types/internal/lantern.js').Lantern.Simulation.Options} SimulationOptions */
/** @typedef {import('../../../../types/internal/lantern.js').Lantern.Simulation.NodeTiming} SimulationNodeTiming */
/** @typedef {import('../../../../types/internal/lantern.js').Lantern.Simulation.Result} SimulationResult */
/** @template T @typedef {import('../../../../types/internal/lantern.js').Lantern.Simulation.Result<T>} SimulationResult */

import {BaseNode} from '../base-node.js';
import {TcpConnection} from './tcp-connection.js';
Expand Down Expand Up @@ -52,6 +52,9 @@ const PriorityStartTimePenalty = {
/** @type {Map<string, Map<Node, CompleteNodeTiming>>} */
const ALL_SIMULATION_NODE_TIMINGS = new Map();

/**
* @template [T=any]
*/
class Simulator {
/**
* @param {SimulationOptions} [options]
Expand Down Expand Up @@ -435,7 +438,7 @@ class Simulator {
*
* @param {Node} graph
* @param {{flexibleOrdering?: boolean, label?: string}=} options
* @return {SimulationResult}
* @return {SimulationResult<T>}
*/
simulate(graph, options) {
if (BaseNode.hasCycle(graph)) {
Expand Down
44 changes: 8 additions & 36 deletions types/gatherer.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@
import {Protocol as Crdp} from 'devtools-protocol/types/protocol.js';
import {ProtocolMapping as CrdpMappings} from 'devtools-protocol/types/protocol-mapping.js';

import {NetworkNode as _NetworkNode} from '../core/lib/lantern/network-node.js';
import {CPUNode as _CPUNode} from '../core/lib/lantern/cpu-node.js';
import {Simulator as _Simulator} from '../core/lib/lantern/simulator/simulator.js';
import {ExecutionContext} from '../core/gather/driver/execution-context.js';
import {NetworkMonitor} from '../core/gather/driver/network-monitor.js';
import {Fetcher} from '../core/gather/fetcher.js';
Expand All @@ -20,6 +17,7 @@ import Config from './config.js';
import Result from './lhr/lhr.js';
import Protocol from './protocol.js';
import Puppeteer from './puppeteer.js';
import {Lantern} from '../types/internal/lantern.js';

type CrdpEvents = CrdpMappings.Events;
type CrdpCommands = CrdpMappings.Commands;
Expand Down Expand Up @@ -132,40 +130,14 @@ declare module Gatherer {
GathererInstance<Exclude<TDependencies, DefaultDependenciesKey>>
type AnyGathererInstance = GathererInstanceExpander<Gatherer.DependencyKey>

// TODO(15841): use from lantern.d.ts
namespace Simulation {
type GraphNode = import('../core/lib/lantern/base-node.js').Node<Artifacts.NetworkRequest>;
type GraphNetworkNode = _NetworkNode<Artifacts.NetworkRequest>;
type GraphCPUNode = _CPUNode;
type Simulator = _Simulator;

interface MetricCoefficients {
intercept: number;
optimistic: number;
pessimistic: number;
}

interface Options {
rtt?: number;
throughput?: number;
observedThroughput: number;
maximumConcurrentRequests?: number;
cpuSlowdownMultiplier?: number;
layoutTaskMultiplier?: number;
additionalRttByOrigin?: Map<string, number>;
serverResponseTimeByOrigin?: Map<string, number>;
}

interface NodeTiming {
startTime: number;
endTime: number;
duration: number;
}

interface Result {
timeInMs: number;
nodeTimings: Map<GraphNode, NodeTiming>;
}
type GraphNode = Lantern.Simulation.GraphNode<Artifacts.NetworkRequest>;
type GraphNetworkNode = Lantern.Simulation.GraphNetworkNode<Artifacts.NetworkRequest>;
type GraphCPUNode = Lantern.Simulation.GraphCPUNode;
type Simulator = Lantern.Simulation.Simulator<Artifacts.NetworkRequest>;
type NodeTiming = Lantern.Simulation.NodeTiming;
type MetricCoefficients = Lantern.Simulation.MetricCoefficients;
type Result = Lantern.Simulation.Result<Artifacts.NetworkRequest>;
}
}

Expand Down
12 changes: 6 additions & 6 deletions types/internal/lantern.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ declare namespace Lantern {
priority: LH.Crdp.Network.ResourcePriority;
}

namespace Simulation {
type GraphNode = import('../../core/lib/lantern/base-node.js').Node;
type GraphNetworkNode = import('../../core/lib/lantern/network-node.js').NetworkNode;
export namespace Simulation {
type GraphNode<T> = import('../../core/lib/lantern/base-node.js').Node<T>;
type GraphNetworkNode<T> = import('../../core/lib/lantern/network-node.js').NetworkNode<T>;
type GraphCPUNode = import('../../core/lib/lantern/cpu-node.js').CPUNode;
type Simulator = import('../../core/lib/lantern/simulator/simulator.js').Simulator;
type Simulator<T> = import('../../core/lib/lantern/simulator/simulator.js').Simulator<T>;

interface MetricCoefficients {
intercept: number;
Expand All @@ -109,9 +109,9 @@ declare namespace Lantern {
duration: number;
}

interface Result {
interface Result<T = any> {
timeInMs: number;
nodeTimings: Map<GraphNode, NodeTiming>;
nodeTimings: Map<GraphNode<T>, NodeTiming>;
}
}
}

0 comments on commit 94de995

Please sign in to comment.