Skip to content

Commit dd3cbd3

Browse files
authored
core(network-request): switch to improved timing names (#14721)
1 parent ddf48a9 commit dd3cbd3

37 files changed

+617
-597
lines changed

core/audits/byte-efficiency/offscreen-images.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class OffscreenImages extends ByteEfficiencyAudit {
102102
return {
103103
node: ByteEfficiencyAudit.makeNodeItem(image.node),
104104
url,
105-
requestStartTime: networkRecord.startTime,
105+
requestStartTime: networkRecord.networkRequestTime,
106106
totalBytes,
107107
wastedBytes,
108108
wastedPercent: 100 * wastedRatio,

core/audits/critical-request-chains.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,42 +41,42 @@ class CriticalRequestChains extends Audit {
4141
};
4242
}
4343

44-
/** @typedef {{depth: number, id: string, chainDuration: number, chainTransferSize: number, node: LH.Audit.Details.SimpleCriticalRequestNode[string]}} CrcNodeInfo */
44+
/** @typedef {{depth: number, id: string, chainDuration: number, chainTransferSize: number, node: LH.Artifacts.CriticalRequestNode[string]}} CrcNodeInfo */
4545

4646
/**
47-
* @param {LH.Audit.Details.SimpleCriticalRequestNode} tree
47+
* @param {LH.Artifacts.CriticalRequestNode} tree
4848
* @param {function(CrcNodeInfo): void} cb
4949
*/
5050
static _traverse(tree, cb) {
5151
/**
52-
* @param {LH.Audit.Details.SimpleCriticalRequestNode} node
52+
* @param {LH.Artifacts.CriticalRequestNode} node
5353
* @param {number} depth
54-
* @param {number=} startTime
54+
* @param {number=} networkRequestTime
5555
* @param {number=} transferSize
5656
*/
57-
function walk(node, depth, startTime, transferSize = 0) {
57+
function walk(node, depth, networkRequestTime, transferSize = 0) {
5858
const children = Object.keys(node);
5959
if (children.length === 0) {
6060
return;
6161
}
6262
children.forEach(id => {
6363
const child = node[id];
64-
if (!startTime) {
65-
startTime = child.request.startTime;
64+
if (!networkRequestTime) {
65+
networkRequestTime = child.request.networkRequestTime;
6666
}
6767

6868
// Call the callback with the info for this child.
6969
cb({
7070
depth,
7171
id,
7272
node: child,
73-
chainDuration: child.request.endTime - startTime,
73+
chainDuration: child.request.networkEndTime - networkRequestTime,
7474
chainTransferSize: transferSize + child.request.transferSize,
7575
});
7676

7777
// Carry on walking.
7878
if (child.children) {
79-
walk(child.children, depth + 1, startTime);
79+
walk(child.children, depth + 1, networkRequestTime);
8080
}
8181
}, '');
8282
}
@@ -86,7 +86,7 @@ class CriticalRequestChains extends Audit {
8686

8787
/**
8888
* Get stats about the longest initiator chain (as determined by time duration)
89-
* @param {LH.Audit.Details.SimpleCriticalRequestNode} tree
89+
* @param {LH.Artifacts.CriticalRequestNode} tree
9090
* @return {{duration: number, length: number, transferSize: number}}
9191
*/
9292
static _getLongestChain(tree) {
@@ -96,7 +96,7 @@ class CriticalRequestChains extends Audit {
9696
transferSize: 0,
9797
};
9898
CriticalRequestChains._traverse(tree, opts => {
99-
const duration = opts.chainDuration * 1000;
99+
const duration = opts.chainDuration;
100100
if (duration > longest.duration) {
101101
longest.duration = duration;
102102
longest.transferSize = opts.chainTransferSize;
@@ -123,9 +123,9 @@ class CriticalRequestChains extends Audit {
123123
const request = opts.node.request;
124124
const simpleRequest = {
125125
url: request.url,
126-
startTime: request.startTime / 1000,
127-
endTime: request.endTime / 1000,
128-
responseReceivedTime: request.responseReceivedTime / 1000,
126+
startTime: request.networkRequestTime / 1000,
127+
endTime: request.networkEndTime / 1000,
128+
responseReceivedTime: request.responseHeadersEndTime / 1000,
129129
transferSize: request.transferSize,
130130
};
131131

@@ -199,7 +199,7 @@ class CriticalRequestChains extends Audit {
199199
walk(initialNavChildren, 0);
200200
}
201201

202-
const longestChain = CriticalRequestChains._getLongestChain(flattenedChains);
202+
const longestChain = CriticalRequestChains._getLongestChain(chains);
203203

204204
return {
205205
score: Number(chainCount === 0),

core/audits/font-display.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class FontDisplay extends Audit {
165165
.map(record => {
166166
// In reality the end time should be calculated with paint time included
167167
// all browsers wait 3000ms to block text so we make sure 3000 is our max wasted time
168-
const wastedMs = Math.min(record.endTime - record.startTime, 3000);
168+
const wastedMs = Math.min(record.networkEndTime - record.networkRequestTime, 3000);
169169

170170
return {
171171
url: record.url,

core/audits/network-requests.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ class NetworkRequests extends Audit {
6565
url: UrlUtils.elideDataURI(record.url),
6666
protocol: record.protocol,
6767
rendererStartTime: normalizeTime(record.rendererStartTime),
68-
startTime: normalizeTime(record.startTime),
69-
endTime: normalizeTime(record.endTime),
68+
networkRequestTime: normalizeTime(record.networkRequestTime),
69+
networkEndTime: normalizeTime(record.networkEndTime),
7070
finished: record.finished,
7171
transferSize: record.transferSize,
7272
resourceSize: record.resourceSize,
@@ -88,8 +88,8 @@ class NetworkRequests extends Audit {
8888
const headings = [
8989
{key: 'url', valueType: 'url', label: 'URL'},
9090
{key: 'protocol', valueType: 'text', label: 'Protocol'},
91-
{key: 'startTime', valueType: 'ms', granularity: 1, label: 'Start Time'},
92-
{key: 'endTime', valueType: 'ms', granularity: 1, label: 'End Time'},
91+
{key: 'networkRequestTime', valueType: 'ms', granularity: 1, label: 'Network Request Time'},
92+
{key: 'networkEndTime', valueType: 'ms', granularity: 1, label: 'Network End Time'},
9393
{
9494
key: 'transferSize',
9595
valueType: 'bytes',

core/audits/redirects.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ class Redirects extends Audit {
125125
}
126126

127127
const lanternTimingDeltaMs = redirectedTiming.startTime - initialTiming.startTime;
128-
const observedTimingDeltaMs = redirectedRequest.startTime - initialRequest.startTime;
128+
const observedTimingDeltaMs = redirectedRequest.networkRequestTime -
129+
initialRequest.networkRequestTime;
129130
const wastedMs = settings.throttlingMethod === 'simulate' ?
130131
lanternTimingDeltaMs : observedTimingDeltaMs;
131132
totalWastedMs += wastedMs;

core/audits/uses-rel-preconnect.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ class UsesRelPreconnectAudit extends Audit {
9595
* @return {boolean}
9696
*/
9797
static socketStartTimeIsBelowThreshold(record, mainResource) {
98-
return Math.max(0, record.startTime - mainResource.endTime) < PRECONNECT_SOCKET_MAX_IDLE_IN_MS;
98+
const timeSinceMainEnd = Math.max(0, record.networkRequestTime - mainResource.networkEndTime);
99+
return timeSinceMainEnd < PRECONNECT_SOCKET_MAX_IDLE_IN_MS;
99100
}
100101

101102
/**
@@ -169,7 +170,7 @@ class UsesRelPreconnectAudit extends Audit {
169170
// Sometimes requests are done simultaneous and the connection has not been made
170171
// chrome will try to connect for each network record, we get the first record
171172
const firstRecordOfOrigin = records.reduce((firstRecord, record) => {
172-
return (record.startTime < firstRecord.startTime) ? record : firstRecord;
173+
return (record.networkRequestTime < firstRecord.networkRequestTime) ? record : firstRecord;
173174
});
174175

175176
// Skip the origin if we don't have timing information
@@ -186,8 +187,8 @@ class UsesRelPreconnectAudit extends Audit {
186187
if (firstRecordOfOrigin.parsedURL.scheme === 'https') connectionTime = connectionTime * 2;
187188

188189
const timeBetweenMainResourceAndDnsStart =
189-
firstRecordOfOrigin.startTime -
190-
mainResource.endTime +
190+
firstRecordOfOrigin.networkRequestTime -
191+
mainResource.networkEndTime +
191192
firstRecordOfOrigin.timing.dnsStart;
192193

193194
const wastedMs = Math.min(connectionTime, timeBetweenMainResourceAndDnsStart);

core/gather/driver/network-monitor.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ class NetworkMonitor extends NetworkMonitorEventEmitter {
218218
if (request.protocol === 'ws' || request.protocol === 'wss') return;
219219

220220
// convert the network timestamp to ms
221-
timeBoundaries.push({time: request.startTime * 1000, isStart: true});
221+
timeBoundaries.push({time: request.networkRequestTime * 1000, isStart: true});
222222
if (request.finished) {
223-
timeBoundaries.push({time: request.endTime * 1000, isStart: false});
223+
timeBoundaries.push({time: request.networkEndTime * 1000, isStart: false});
224224
}
225225
});
226226

core/gather/gatherers/dobetterweb/tags-blocking-first-paint.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ class TagsBlockingFirstPaint extends FRGatherer {
155155
*/
156156
static async findBlockingTags(driver, networkRecords) {
157157
const firstRequestEndTime = networkRecords.reduce(
158-
(min, record) => Math.min(min, record.endTime),
158+
(min, record) => Math.min(min, record.networkEndTime),
159159
Infinity
160160
);
161161
const tags = await driver.executionContext.evaluate(collectTagsThatBlockFirstPaint, {args: []});
@@ -167,7 +167,7 @@ class TagsBlockingFirstPaint extends FRGatherer {
167167
const request = requests.get(tag.url);
168168
if (!request || request.isLinkPreload) continue;
169169

170-
let endTime = request.endTime;
170+
let endTime = request.networkEndTime;
171171
let mediaChanges;
172172

173173
if (tag.tagName === 'LINK') {
@@ -180,7 +180,7 @@ class TagsBlockingFirstPaint extends FRGatherer {
180180
if (timesResourceBecameNonBlocking.length > 0) {
181181
const earliestNonBlockingTime = Math.min(...timesResourceBecameNonBlocking);
182182
const lastTimeResourceWasBlocking = Math.max(
183-
request.startTime,
183+
request.networkRequestTime,
184184
firstRequestEndTime + earliestNonBlockingTime / 1000
185185
);
186186
endTime = Math.min(endTime, lastTimeResourceWasBlocking);
@@ -194,7 +194,7 @@ class TagsBlockingFirstPaint extends FRGatherer {
194194
result.push({
195195
tag: {tagName, url, mediaChanges},
196196
transferSize: request.transferSize,
197-
startTime: request.startTime,
197+
startTime: request.networkRequestTime,
198198
endTime,
199199
});
200200

core/lib/dependency-graph/network-node.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ class NetworkNode extends BaseNode {
2626
* @return {number}
2727
*/
2828
get startTime() {
29-
return this._record.startTime * 1000;
29+
return this._record.networkRequestTime * 1000;
3030
}
3131

3232
/**
3333
* @return {number}
3434
*/
3535
get endTime() {
36-
return this._record.endTime * 1000;
36+
return this._record.networkEndTime * 1000;
3737
}
3838

3939
/**

core/lib/dependency-graph/simulator/network-analyzer.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ class NetworkAnalyzer {
150150
if (!Number.isFinite(timing.receiveHeadersEnd) || timing.receiveHeadersEnd < 0) return;
151151

152152
// Compute the amount of time downloading everything after the first congestion window took
153-
const totalTime = record.endTime - record.startTime;
153+
const totalTime = record.networkEndTime - record.networkRequestTime;
154154
const downloadTimeAfterFirstByte = totalTime - timing.receiveHeadersEnd;
155155
const numberOfRoundTrips = Math.log2(record.transferSize / INITIAL_CWD);
156156

@@ -279,17 +279,19 @@ class NetworkAnalyzer {
279279
const groupedByOrigin = NetworkAnalyzer.groupByOrigin(records);
280280
for (const [_, originRecords] of groupedByOrigin.entries()) {
281281
const earliestReusePossible = originRecords
282-
.map(record => record.endTime)
282+
.map(record => record.networkEndTime)
283283
.reduce((a, b) => Math.min(a, b), Infinity);
284284

285285
for (const record of originRecords) {
286286
connectionWasReused.set(
287287
record.requestId,
288-
record.startTime >= earliestReusePossible || record.protocol === 'h2'
288+
record.networkRequestTime >= earliestReusePossible || record.protocol === 'h2'
289289
);
290290
}
291291

292-
const firstRecord = originRecords.reduce((a, b) => (a.startTime > b.startTime ? b : a));
292+
const firstRecord = originRecords.reduce((a, b) => {
293+
return a.networkRequestTime > b.networkRequestTime ? b : a;
294+
});
293295
connectionWasReused.set(firstRecord.requestId, false);
294296
}
295297

@@ -399,8 +401,8 @@ class NetworkAnalyzer {
399401

400402
// If we've made it this far, all the times we need should be valid (i.e. not undefined/-1).
401403
totalBytes += record.transferSize;
402-
boundaries.push({time: record.responseReceivedTime / 1000, isStart: true});
403-
boundaries.push({time: record.endTime / 1000, isStart: false});
404+
boundaries.push({time: record.responseHeadersEndTime / 1000, isStart: true});
405+
boundaries.push({time: record.networkEndTime / 1000, isStart: false});
404406
return boundaries;
405407
}, /** @type {Array<{time: number, isStart: boolean}>} */([])).sort((a, b) => a.time - b.time);
406408

core/lib/navigation-error.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ function getPageLoadError(navigationError, context) {
125125
record.resourceType === NetworkRequest.TYPES.Document
126126
);
127127
if (documentRequests.length) {
128-
mainRecord = documentRequests.reduce((min, r) => (r.startTime < min.startTime ? r : min));
128+
mainRecord = documentRequests.reduce((min, r) => {
129+
return r.networkRequestTime < min.networkRequestTime ? r : min;
130+
});
129131
}
130132
}
131133

core/lib/network-recorder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ class NetworkRecorder extends RequestEventEmitter {
248248

249249
let candidates = recordsByURL.get(initiatorURL) || [];
250250
// The initiator must come before the initiated request.
251-
candidates = candidates.filter(cand => cand.responseReceivedTime <= record.startTime);
251+
candidates = candidates.filter(c => c.responseHeadersEndTime <= record.networkRequestTime);
252252
if (candidates.length > 1) {
253253
// Disambiguate based on prefetch. Prefetch requests have type 'Other' and cannot
254254
// initiate requests, so we drop them here.

0 commit comments

Comments
 (0)