lighthouse 9.5.0-dev.20220818 → 9.5.0-dev.20220819
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.
|
@@ -198,17 +198,15 @@ async function begin() {
|
|
|
198
198
|
const testDefns = getShardedDefinitions(requestedTestDefns, argv.shard);
|
|
199
199
|
|
|
200
200
|
let smokehouseResult;
|
|
201
|
-
let
|
|
202
|
-
let serverForOffline;
|
|
201
|
+
let servers;
|
|
203
202
|
let takeNetworkRequestUrls = undefined;
|
|
204
203
|
|
|
205
204
|
try {
|
|
206
205
|
// If running the core tests, spin up the test server.
|
|
207
206
|
if (testDefnPath === coreTestDefnsPath) {
|
|
208
|
-
|
|
209
|
-
await
|
|
210
|
-
|
|
211
|
-
takeNetworkRequestUrls = server.takeRequestUrls.bind(server);
|
|
207
|
+
const {createServers} = await import('../../fixtures/static-server.js');
|
|
208
|
+
servers = await createServers();
|
|
209
|
+
takeNetworkRequestUrls = servers[0].takeRequestUrls.bind(servers[0]);
|
|
212
210
|
}
|
|
213
211
|
|
|
214
212
|
const prunedTestDefns = pruneExpectedNetworkRequests(testDefns, takeNetworkRequestUrls);
|
|
@@ -224,8 +222,7 @@ async function begin() {
|
|
|
224
222
|
|
|
225
223
|
smokehouseResult = (await runSmokehouse(prunedTestDefns, options));
|
|
226
224
|
} finally {
|
|
227
|
-
|
|
228
|
-
if (serverForOffline) await serverForOffline.close();
|
|
225
|
+
servers?.forEach(s => s.close());
|
|
229
226
|
}
|
|
230
227
|
|
|
231
228
|
if (!smokehouseResult.success) {
|
|
@@ -9,6 +9,48 @@
|
|
|
9
9
|
* @fileoverview Fills most of the role of NetworkManager and NetworkRequest classes from DevTools.
|
|
10
10
|
* @see https://cs.chromium.org/chromium/src/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js
|
|
11
11
|
* @see https://cs.chromium.org/chromium/src/third_party/blink/renderer/devtools/front_end/sdk/NetworkManager.js
|
|
12
|
+
|
|
13
|
+
A detailed overview of the Chromium networking layer can be found here:
|
|
14
|
+
https://raw.githubusercontent.com/GoogleChrome/lighthouse/master/docs/Network-Timing.svg
|
|
15
|
+
|
|
16
|
+
Below is a simplified model.
|
|
17
|
+
|
|
18
|
+
DevTools box-whisker
|
|
19
|
+
|
|
20
|
+
|-------[xxxxxXXXXXX]-|
|
|
21
|
+
(1) (2) (3) (4)
|
|
22
|
+
|
|
23
|
+
(1) leading whisker
|
|
24
|
+
|
|
25
|
+
Covers various stages:
|
|
26
|
+
|
|
27
|
+
- Queuing (delta between renderer knowing about request and network manager knowing about it)
|
|
28
|
+
- DNS
|
|
29
|
+
- Connection setup cost (TCP, TLS, SSL, etc.)
|
|
30
|
+
|
|
31
|
+
CDP: left whisker edge is Network.requestWillBeSent timestamp
|
|
32
|
+
|
|
33
|
+
(2) light shaded region
|
|
34
|
+
|
|
35
|
+
browser network manager has initiated the request, hasn't recieved any bytes back yet
|
|
36
|
+
Note: even with early-hint response, only the "real" response is considered here
|
|
37
|
+
|
|
38
|
+
CDP: Network.requestWillBeSentExtraInfo timing.requestTime + timing.sendStart
|
|
39
|
+
|
|
40
|
+
(3) dark shaded region
|
|
41
|
+
|
|
42
|
+
browser network manager has recieved the very first header byte
|
|
43
|
+
|
|
44
|
+
CDP: Network.requestWillBeSentExtraInfo timing.requestTime + timing.recievedHeadersEnd
|
|
45
|
+
CDP: (right edge of box) Network.finished/Network.failed timestamp
|
|
46
|
+
Trace: ResourceFinish.finishedTime
|
|
47
|
+
|
|
48
|
+
(4) trailing whisker
|
|
49
|
+
|
|
50
|
+
Marks time when render process main thread is available to use the resource. Could be long
|
|
51
|
+
if main thread is busy. Currently don't use this anywhere.
|
|
52
|
+
|
|
53
|
+
Trace: ResourceFinish.ts
|
|
12
54
|
*/
|
|
13
55
|
|
|
14
56
|
import URL from './url-shim.js';
|
|
@@ -322,6 +364,7 @@ class NetworkRequest {
|
|
|
322
364
|
if (timing.requestTime === 0 || timing.receiveHeadersEnd === -1) return;
|
|
323
365
|
// Take startTime and responseReceivedTime from timing data for better accuracy.
|
|
324
366
|
// Timing's requestTime is a baseline in seconds, rest of the numbers there are ticks in millis.
|
|
367
|
+
// TODO: This skips the "queuing time" before the netstack has taken over ... is this a mistake?
|
|
325
368
|
this.startTime = timing.requestTime;
|
|
326
369
|
const headersReceivedTime = timing.requestTime + timing.receiveHeadersEnd / 1000;
|
|
327
370
|
if (!this.responseReceivedTime || this.responseReceivedTime < 0) {
|
package/package.json
CHANGED