lighthouse 11.6.0-dev.20240306 → 11.6.0-dev.20240307

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/core/computed/load-simulator.d.ts +0 -2
  2. package/core/computed/load-simulator.js +2 -3
  3. package/core/computed/metrics/lantern-first-contentful-paint.d.ts +12 -0
  4. package/core/computed/metrics/lantern-first-meaningful-paint.d.ts +12 -0
  5. package/core/computed/metrics/lantern-interactive.d.ts +6 -0
  6. package/core/computed/metrics/lantern-interactive.js +1 -1
  7. package/core/computed/metrics/lantern-largest-contentful-paint.d.ts +12 -0
  8. package/core/computed/metrics/lantern-max-potential-fid.d.ts +6 -0
  9. package/core/computed/metrics/lantern-max-potential-fid.js +1 -1
  10. package/core/computed/metrics/lantern-metric.d.ts +4 -64
  11. package/core/computed/metrics/lantern-metric.js +6 -124
  12. package/core/computed/metrics/lantern-speed-index.d.ts +6 -0
  13. package/core/computed/metrics/lantern-speed-index.js +1 -1
  14. package/core/computed/metrics/lantern-total-blocking-time.d.ts +6 -0
  15. package/core/computed/metrics/lantern-total-blocking-time.js +1 -1
  16. package/core/lib/lantern/metric.d.ts +71 -0
  17. package/core/lib/lantern/metric.js +143 -0
  18. package/core/lib/lantern/network-node.d.ts +5 -5
  19. package/core/lib/lantern/network-node.js +3 -4
  20. package/core/lib/lantern/page-dependency-graph.d.ts +7 -7
  21. package/core/lib/lantern/page-dependency-graph.js +4 -4
  22. package/core/lib/lantern/simulator/connection-pool.d.ts +14 -15
  23. package/core/lib/lantern/simulator/connection-pool.js +7 -9
  24. package/core/lib/lantern/simulator/dns-cache.d.ts +5 -11
  25. package/core/lib/lantern/simulator/dns-cache.js +3 -3
  26. package/core/lib/lantern/simulator/network-analyzer.d.ts +30 -30
  27. package/core/lib/lantern/simulator/network-analyzer.js +14 -15
  28. package/core/lib/lantern/simulator/simulator.d.ts +13 -16
  29. package/core/lib/lantern/simulator/simulator.js +10 -16
  30. package/core/lib/lantern/types/lantern.d.ts +129 -0
  31. package/core/lib/lantern/types/lantern.js +7 -0
  32. package/core/lib/network-request.d.ts +3 -4
  33. package/core/lib/network-request.js +2 -3
  34. package/package.json +1 -1
  35. package/tsconfig.json +1 -0
  36. package/types/gatherer.d.ts +1 -1
  37. package/types/internal/lantern.d.ts +0 -124
@@ -1,7 +1,3 @@
1
- export type NetworkRequest = import('../../../../types/internal/lantern.js').Lantern.NetworkRequest;
2
- export type SimulationOptions = import('../../../../types/internal/lantern.js').Lantern.Simulation.Options;
3
- export type SimulationNodeTiming = import('../../../../types/internal/lantern.js').Lantern.Simulation.NodeTiming;
4
- export type SimulationResult<T> = import('../../../../types/internal/lantern.js').Lantern.Simulation.Result<T>;
5
1
  export type Node = import('../base-node.js').Node;
6
2
  export type NetworkNode = import('../network-node.js').NetworkNode;
7
3
  export type CpuNode = import('../cpu-node.js').CPUNode;
@@ -21,11 +17,11 @@ export class Simulator<T = any> {
21
17
  */
22
18
  static _computeNodeStartPosition(node: Node): number;
23
19
  /**
24
- * @param {SimulationOptions} [options]
20
+ * @param {Lantern.Simulation.Options} [options]
25
21
  */
26
- constructor(options?: import("../../../../types/internal/lantern.js").Lantern.Simulation.Options | undefined);
27
- /** @type {Required<SimulationOptions>} */
28
- _options: Required<SimulationOptions>;
22
+ constructor(options?: Lantern.Simulation.Options | undefined);
23
+ /** @type {Required<Lantern.Simulation.Options>} */
24
+ _options: Required<Lantern.Simulation.Options>;
29
25
  _rtt: number;
30
26
  _throughput: number;
31
27
  _maximumConcurrentRequests: number;
@@ -74,10 +70,10 @@ export class Simulator<T = any> {
74
70
  */
75
71
  _markNodeAsComplete(node: Node, endTime: number, connectionTiming?: import("./simulator-timing-map.js").ConnectionTiming | undefined): void;
76
72
  /**
77
- * @param {NetworkRequest} record
73
+ * @param {Lantern.NetworkRequest} record
78
74
  * @return {?TcpConnection}
79
75
  */
80
- _acquireConnection(record: NetworkRequest): TcpConnection | null;
76
+ _acquireConnection(record: Lantern.NetworkRequest): TcpConnection | null;
81
77
  /**
82
78
  * @return {Node[]}
83
79
  */
@@ -121,16 +117,16 @@ export class Simulator<T = any> {
121
117
  */
122
118
  _updateProgressMadeInTimePeriod(node: Node, timePeriodLength: number, totalElapsedTime: number): number | void;
123
119
  /**
124
- * @return {{nodeTimings: Map<Node, SimulationNodeTiming>, completeNodeTimings: Map<Node, CompleteNodeTiming>}}
120
+ * @return {{nodeTimings: Map<Node, Lantern.Simulation.NodeTiming>, completeNodeTimings: Map<Node, CompleteNodeTiming>}}
125
121
  */
126
122
  _computeFinalNodeTimings(): {
127
- nodeTimings: Map<Node, SimulationNodeTiming>;
123
+ nodeTimings: Map<Node, Lantern.Simulation.NodeTiming>;
128
124
  completeNodeTimings: Map<Node, CompleteNodeTiming>;
129
125
  };
130
126
  /**
131
- * @return {Required<SimulationOptions>}
127
+ * @return {Required<Lantern.Simulation.Options>}
132
128
  */
133
- getOptions(): Required<SimulationOptions>;
129
+ getOptions(): Required<Lantern.Simulation.Options>;
134
130
  /**
135
131
  * Estimates the time taken to process all of the graph's nodes, returns the overall time along with
136
132
  * each node annotated by start/end times.
@@ -142,17 +138,18 @@ export class Simulator<T = any> {
142
138
  *
143
139
  * @param {Node} graph
144
140
  * @param {{flexibleOrdering?: boolean, label?: string}=} options
145
- * @return {SimulationResult<T>}
141
+ * @return {Lantern.Simulation.Result<T>}
146
142
  */
147
143
  simulate(graph: Node, options?: {
148
144
  flexibleOrdering?: boolean;
149
145
  label?: string;
150
- } | undefined): SimulationResult<T>;
146
+ } | undefined): Lantern.Simulation.Result<T>;
151
147
  /**
152
148
  * @param {number} wastedBytes
153
149
  */
154
150
  computeWastedMsFromWastedBytes(wastedBytes: number): number;
155
151
  }
152
+ import * as Lantern from '../types/lantern.js';
156
153
  import { SimulatorTimingMap } from './simulator-timing-map.js';
157
154
  import { DNSCache } from './dns-cache.js';
158
155
  import { ConnectionPool } from './connection-pool.js';
@@ -4,13 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- // This could be replaced by jsdoc namespace import, when ready.
8
- // https://github.com/microsoft/TypeScript/issues/41825
9
- /** @typedef {import('../../../../types/internal/lantern.js').Lantern.NetworkRequest} NetworkRequest */
10
- /** @typedef {import('../../../../types/internal/lantern.js').Lantern.Simulation.Options} SimulationOptions */
11
- /** @typedef {import('../../../../types/internal/lantern.js').Lantern.Simulation.NodeTiming} SimulationNodeTiming */
12
- /** @template T @typedef {import('../../../../types/internal/lantern.js').Lantern.Simulation.Result<T>} SimulationResult */
13
-
7
+ import * as Lantern from '../types/lantern.js';
14
8
  import {BaseNode} from '../base-node.js';
15
9
  import {TcpConnection} from './tcp-connection.js';
16
10
  import {ConnectionPool} from './connection-pool.js';
@@ -57,10 +51,10 @@ const ALL_SIMULATION_NODE_TIMINGS = new Map();
57
51
  */
58
52
  class Simulator {
59
53
  /**
60
- * @param {SimulationOptions} [options]
54
+ * @param {Lantern.Simulation.Options} [options]
61
55
  */
62
56
  constructor(options) {
63
- /** @type {Required<SimulationOptions>} */
57
+ /** @type {Required<Lantern.Simulation.Options>} */
64
58
  this._options = Object.assign(
65
59
  {
66
60
  rtt: mobileSlow4G.rttMs,
@@ -110,7 +104,7 @@ class Simulator {
110
104
  * @param {Node} graph
111
105
  */
112
106
  _initializeConnectionPool(graph) {
113
- /** @type {NetworkRequest[]} */
107
+ /** @type {Lantern.NetworkRequest[]} */
114
108
  const records = [];
115
109
  graph.getRootNode().traverse(node => {
116
110
  if (node.type === BaseNode.TYPES.NETWORK) {
@@ -199,7 +193,7 @@ class Simulator {
199
193
  }
200
194
 
201
195
  /**
202
- * @param {NetworkRequest} record
196
+ * @param {Lantern.NetworkRequest} record
203
197
  * @return {?TcpConnection}
204
198
  */
205
199
  _acquireConnection(record) {
@@ -393,7 +387,7 @@ class Simulator {
393
387
  }
394
388
 
395
389
  /**
396
- * @return {{nodeTimings: Map<Node, SimulationNodeTiming>, completeNodeTimings: Map<Node, CompleteNodeTiming>}}
390
+ * @return {{nodeTimings: Map<Node, Lantern.Simulation.NodeTiming>, completeNodeTimings: Map<Node, CompleteNodeTiming>}}
397
391
  */
398
392
  _computeFinalNodeTimings() {
399
393
  /** @type {Array<[Node, CompleteNodeTiming]>} */
@@ -404,8 +398,8 @@ class Simulator {
404
398
  // Most consumers will want the entries sorted by startTime, so insert them in that order
405
399
  completeNodeTimingEntries.sort((a, b) => a[1].startTime - b[1].startTime);
406
400
 
407
- // Trimmed version of type `SimulationNodeTiming`.
408
- /** @type {Array<[Node, SimulationNodeTiming]>} */
401
+ // Trimmed version of type `Lantern.Simulation.NodeTiming`.
402
+ /** @type {Array<[Node, Lantern.Simulation.NodeTiming]>} */
409
403
  const nodeTimingEntries = completeNodeTimingEntries.map(([node, timing]) => {
410
404
  return [node, {
411
405
  startTime: timing.startTime,
@@ -421,7 +415,7 @@ class Simulator {
421
415
  }
422
416
 
423
417
  /**
424
- * @return {Required<SimulationOptions>}
418
+ * @return {Required<Lantern.Simulation.Options>}
425
419
  */
426
420
  getOptions() {
427
421
  return this._options;
@@ -438,7 +432,7 @@ class Simulator {
438
432
  *
439
433
  * @param {Node} graph
440
434
  * @param {{flexibleOrdering?: boolean, label?: string}=} options
441
- * @return {SimulationResult<T>}
435
+ * @return {Lantern.Simulation.Result<T>}
442
436
  */
443
437
  simulate(graph, options) {
444
438
  if (BaseNode.hasCycle(graph)) {
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2024 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import * as LH from '../../../../types/lh.js';
8
+
9
+ type ParsedURL = {
10
+ /**
11
+ * Equivalent to a `new URL(url).protocol` BUT w/o the trailing colon (:)
12
+ */
13
+ scheme: string;
14
+ /**
15
+ * Equivalent to a `new URL(url).hostname`
16
+ */
17
+ host: string;
18
+ securityOrigin: string;
19
+ };
20
+ type LightriderStatistics = {
21
+ /**
22
+ * The difference in networkEndTime between the observed Lighthouse networkEndTime and Lightrider's derived networkEndTime.
23
+ */
24
+ endTimeDeltaMs: number;
25
+ /**
26
+ * The time spent making a TCP connection (connect + SSL). Note: this is poorly named.
27
+ */
28
+ TCPMs: number;
29
+ /**
30
+ * The time spent requesting a resource from a remote server, we use this to approx RTT. Note: this is poorly names, it really should be "server response time".
31
+ */
32
+ requestMs: number;
33
+ /**
34
+ * Time to receive the entire response payload starting the clock on receiving the first fragment (first non-header byte).
35
+ */
36
+ responseMs: number;
37
+ };
38
+
39
+ export class NetworkRequest<T = any> {
40
+ /**
41
+ * The canonical network record.
42
+ * Users of Lantern must create NetworkRequests matching this interface,
43
+ * but can store the source-of-truth for their network model in this `record`
44
+ * property. This is then accessible as a read-only property on NetworkNode.
45
+ */
46
+ record?: T;
47
+
48
+ requestId: string;
49
+ connectionId: string;
50
+ connectionReused: boolean;
51
+ url: string;
52
+ protocol: string;
53
+ parsedURL: ParsedURL;
54
+ documentURL: string;
55
+ /** When the renderer process initially discovers a network request, in milliseconds. */
56
+ rendererStartTime: number;
57
+ /**
58
+ * When the network service is about to handle a request, ie. just before going to the
59
+ * HTTP cache or going to the network for DNS/connection setup, in milliseconds.
60
+ */
61
+ networkRequestTime: number;
62
+ /** When the last byte of the response headers is received, in milliseconds. */
63
+ responseHeadersEndTime: number;
64
+ /** When the last byte of the response body is received, in milliseconds. */
65
+ networkEndTime: number;
66
+ transferSize: number;
67
+ resourceSize: number;
68
+ fromDiskCache: boolean;
69
+ fromMemoryCache: boolean;
70
+ // TODO(15841): remove from lantern.
71
+ /** Extra timing information available only when run in Lightrider. */
72
+ lrStatistics: LightriderStatistics | undefined;
73
+ finished: boolean;
74
+ statusCode: number;
75
+ /** The network request that this one redirected to */
76
+ redirectDestination: NetworkRequest<T> | undefined;
77
+ failed: boolean;
78
+ initiator: LH.Crdp.Network.Initiator;
79
+ initiatorRequest: NetworkRequest<T> | undefined;
80
+ /** The chain of network requests that redirected to this one */
81
+ redirects: NetworkRequest[] | undefined;
82
+ timing: LH.Crdp.Network.ResourceTiming | undefined;
83
+ resourceType: LH.Crdp.Network.ResourceType | undefined;
84
+ mimeType: string;
85
+ priority: LH.Crdp.Network.ResourcePriority;
86
+ frameId: string | undefined;
87
+ sessionTargetType: LH.Protocol.TargetType | undefined;
88
+ }
89
+
90
+ export namespace Simulation {
91
+ type GraphNode<T> = import('../base-node.js').Node<T>;
92
+ type GraphNetworkNode<T> = import('../network-node.js').NetworkNode<T>;
93
+ type GraphCPUNode = import('../cpu-node.js').CPUNode;
94
+ type Simulator<T> = import('../simulator/simulator.js').Simulator<T>;
95
+
96
+ interface MetricCoefficients {
97
+ intercept: number;
98
+ optimistic: number;
99
+ pessimistic: number;
100
+ }
101
+
102
+ interface Options {
103
+ rtt?: number;
104
+ throughput?: number;
105
+ observedThroughput: number;
106
+ maximumConcurrentRequests?: number;
107
+ cpuSlowdownMultiplier?: number;
108
+ layoutTaskMultiplier?: number;
109
+ additionalRttByOrigin?: Map<string, number>;
110
+ serverResponseTimeByOrigin?: Map<string, number>;
111
+ }
112
+
113
+ interface NodeTiming {
114
+ startTime: number;
115
+ endTime: number;
116
+ duration: number;
117
+ }
118
+
119
+ interface Result<T = any> {
120
+ timeInMs: number;
121
+ nodeTimings: Map<GraphNode<T>, NodeTiming>;
122
+ }
123
+
124
+ interface MetricComputationDataInput {
125
+ simulator: Simulator<any>;
126
+ graph: GraphNode<any>;
127
+ processedNavigation: LH.Artifacts.ProcessedNavigation;
128
+ }
129
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2024 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export {};
@@ -1,4 +1,3 @@
1
- export type LanternNetworkRequest<T> = import('../../types/internal/lantern.js').Lantern.NetworkRequest<T>;
2
1
  export type HeaderEntry = {
3
2
  name: string;
4
3
  value: string;
@@ -50,9 +49,9 @@ export class NetworkRequest {
50
49
  static get TYPES(): LH.Util.SelfMap<LH.Crdp.Network.ResourceType>;
51
50
  /**
52
51
  * @param {NetworkRequest} record
53
- * @return {LanternNetworkRequest<NetworkRequest>}
52
+ * @return {Lantern.NetworkRequest<NetworkRequest>}
54
53
  */
55
- static asLanternNetworkRequest(record: NetworkRequest): LanternNetworkRequest<NetworkRequest>;
54
+ static asLanternNetworkRequest(record: NetworkRequest): Lantern.NetworkRequest<NetworkRequest>;
56
55
  /**
57
56
  * @param {NetworkRequest} record
58
57
  * @return {boolean}
@@ -259,7 +258,7 @@ export namespace NetworkRequest {
259
258
  export { HEADER_PROTOCOL_IS_H2 };
260
259
  }
261
260
  import * as LH from '../../types/lh.js';
262
- /** @template T @typedef {import('../../types/internal/lantern.js').Lantern.NetworkRequest<T>} LanternNetworkRequest */
261
+ import * as Lantern from './lantern/types/lantern.js';
263
262
  declare const HEADER_TCP: "X-TCPMs";
264
263
  declare const HEADER_SSL: "X-SSLMs";
265
264
  declare const HEADER_REQ: "X-RequestMs";
@@ -53,10 +53,9 @@
53
53
  */
54
54
 
55
55
  import * as LH from '../../types/lh.js';
56
+ import * as Lantern from './lantern/types/lantern.js';
56
57
  import UrlUtils from './url-utils.js';
57
58
 
58
- /** @template T @typedef {import('../../types/internal/lantern.js').Lantern.NetworkRequest<T>} LanternNetworkRequest */
59
-
60
59
  // Lightrider X-Header names for timing information.
61
60
  // See: _updateTransferSizeForLightrider and _updateTimingsForLightrider.
62
61
  const HEADER_TCP = 'X-TCPMs'; // Note: this should have been called something like ConnectMs, as it includes SSL.
@@ -572,7 +571,7 @@ class NetworkRequest {
572
571
 
573
572
  /**
574
573
  * @param {NetworkRequest} record
575
- * @return {LanternNetworkRequest<NetworkRequest>}
574
+ * @return {Lantern.NetworkRequest<NetworkRequest>}
576
575
  */
577
576
  static asLanternNetworkRequest(record) {
578
577
  return {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lighthouse",
3
3
  "type": "module",
4
- "version": "11.6.0-dev.20240306",
4
+ "version": "11.6.0-dev.20240307",
5
5
  "description": "Automated auditing, performance metrics, and best practices for the web.",
6
6
  "main": "./core/index.js",
7
7
  "bin": {
package/tsconfig.json CHANGED
@@ -17,6 +17,7 @@
17
17
  "clients/**/*.js",
18
18
  "build/**/*.js",
19
19
  "./types/**/*.d.ts",
20
+ "./core/lib/lantern/types/**/*.d.ts",
20
21
  "eslint-local-rules.cjs",
21
22
  "third-party/axe/valid-langs.js",
22
23
  "third-party/esbuild-plugins-polyfills/esbuild-polyfills.js",
@@ -17,7 +17,7 @@ import Config from './config.js';
17
17
  import Result from './lhr/lhr.js';
18
18
  import Protocol from './protocol.js';
19
19
  import Puppeteer from './puppeteer.js';
20
- import {Lantern} from '../types/internal/lantern.js';
20
+ import * as Lantern from '../core/lib/lantern/types/lantern.js';
21
21
 
22
22
  type CrdpEvents = CrdpMappings.Events;
23
23
  type CrdpCommands = CrdpMappings.Commands;
@@ -1,124 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2024 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import * as LH from '../lh.js';
8
-
9
- declare namespace Lantern {
10
- type ParsedURL = {
11
- /**
12
- * Equivalent to a `new URL(url).protocol` BUT w/o the trailing colon (:)
13
- */
14
- scheme: string;
15
- /**
16
- * Equivalent to a `new URL(url).hostname`
17
- */
18
- host: string;
19
- securityOrigin: string;
20
- };
21
- type LightriderStatistics = {
22
- /**
23
- * The difference in networkEndTime between the observed Lighthouse networkEndTime and Lightrider's derived networkEndTime.
24
- */
25
- endTimeDeltaMs: number;
26
- /**
27
- * The time spent making a TCP connection (connect + SSL). Note: this is poorly named.
28
- */
29
- TCPMs: number;
30
- /**
31
- * The time spent requesting a resource from a remote server, we use this to approx RTT. Note: this is poorly names, it really should be "server response time".
32
- */
33
- requestMs: number;
34
- /**
35
- * Time to receive the entire response payload starting the clock on receiving the first fragment (first non-header byte).
36
- */
37
- responseMs: number;
38
- };
39
- class NetworkRequest<T = any> {
40
- /**
41
- * The canonical network record.
42
- * Users of Lantern must create NetworkRequests matching this interface,
43
- * but can store the source-of-truth for their network model in this `record`
44
- * property. This is then accessible as a read-only property on NetworkNode.
45
- */
46
- record?: T;
47
-
48
- requestId: string;
49
- connectionId: string;
50
- connectionReused: boolean;
51
- url: string;
52
- protocol: string;
53
- parsedURL: ParsedURL;
54
- documentURL: string;
55
- /** When the renderer process initially discovers a network request, in milliseconds. */
56
- rendererStartTime: number;
57
- /**
58
- * When the network service is about to handle a request, ie. just before going to the
59
- * HTTP cache or going to the network for DNS/connection setup, in milliseconds.
60
- */
61
- networkRequestTime: number;
62
- /** When the last byte of the response headers is received, in milliseconds. */
63
- responseHeadersEndTime: number;
64
- /** When the last byte of the response body is received, in milliseconds. */
65
- networkEndTime: number;
66
- transferSize: number;
67
- resourceSize: number;
68
- fromDiskCache: boolean;
69
- fromMemoryCache: boolean;
70
- // TODO(15841): remove from lantern.
71
- /** Extra timing information available only when run in Lightrider. */
72
- lrStatistics: LightriderStatistics | undefined;
73
- finished: boolean;
74
- statusCode: number;
75
- /** The network request that this one redirected to */
76
- redirectDestination: NetworkRequest<T> | undefined;
77
- failed: boolean;
78
- initiator: LH.Crdp.Network.Initiator;
79
- initiatorRequest: NetworkRequest<T> | undefined;
80
- /** The chain of network requests that redirected to this one */
81
- redirects: NetworkRequest[] | undefined;
82
- timing: LH.Crdp.Network.ResourceTiming | undefined;
83
- resourceType: LH.Crdp.Network.ResourceType | undefined;
84
- mimeType: string;
85
- priority: LH.Crdp.Network.ResourcePriority;
86
- frameId: string | undefined;
87
- sessionTargetType: LH.Protocol.TargetType | undefined;
88
- }
89
-
90
- export namespace Simulation {
91
- type GraphNode<T> = import('../../core/lib/lantern/base-node.js').Node<T>;
92
- type GraphNetworkNode<T> = import('../../core/lib/lantern/network-node.js').NetworkNode<T>;
93
- type GraphCPUNode = import('../../core/lib/lantern/cpu-node.js').CPUNode;
94
- type Simulator<T> = import('../../core/lib/lantern/simulator/simulator.js').Simulator<T>;
95
-
96
- interface MetricCoefficients {
97
- intercept: number;
98
- optimistic: number;
99
- pessimistic: number;
100
- }
101
-
102
- interface Options {
103
- rtt?: number;
104
- throughput?: number;
105
- observedThroughput: number;
106
- maximumConcurrentRequests?: number;
107
- cpuSlowdownMultiplier?: number;
108
- layoutTaskMultiplier?: number;
109
- additionalRttByOrigin?: Map<string, number>;
110
- serverResponseTimeByOrigin?: Map<string, number>;
111
- }
112
-
113
- interface NodeTiming {
114
- startTime: number;
115
- endTime: number;
116
- duration: number;
117
- }
118
-
119
- interface Result<T = any> {
120
- timeInMs: number;
121
- nodeTimings: Map<GraphNode<T>, NodeTiming>;
122
- }
123
- }
124
- }