Skip to content

Commit 64efd51

Browse files
Connor ClarkDevtools-frontend LUCI CQ
authored andcommitted
[DocumentLatency] Use headers end (not start) for server response time
Bug: 448670042 Change-Id: I446e08be9b4aa9f33a490797a360a0f3cccbfc88 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/7004563 Reviewed-by: Paul Irish <[email protected]> Commit-Queue: Connor Clark <[email protected]> Auto-Submit: Connor Clark <[email protected]>
1 parent 7374af9 commit 64efd51

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

front_end/models/trace/handlers/NetworkRequestsHandler.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,15 @@ export async function finalize(): Promise<void> {
448448
Types.Timing.Micro((timing.receiveHeadersEnd - timing.sendEnd) * MILLISECONDS_TO_MICROSECONDS) :
449449
Types.Timing.Micro(0);
450450

451+
// Server Response Time
452+
// =======================
453+
// Time from when the send finished going to when the first byte of headers were received.
454+
const serverResponseTime = timing ?
455+
Types.Timing.Micro(
456+
((timing.receiveHeadersStart ?? timing.receiveHeadersEnd) - timing.sendEnd) *
457+
MILLISECONDS_TO_MICROSECONDS) :
458+
Types.Timing.Micro(0);
459+
451460
// Download
452461
// =======================
453462
// Time from receipt of headers to the finish time.
@@ -513,6 +522,7 @@ export async function finalize(): Promise<void> {
513522
stalled,
514523
totalTime,
515524
waiting,
525+
serverResponseTime,
516526
},
517527
// All fields below are from TraceEventsForNetworkRequest.
518528
decodedBodyLength,

front_end/models/trace/insights/DocumentLatency.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ describeWithEnvironment('DocumentLatency', function() {
4343
const mainRequestEvent = structuredClone(traceEvents[mainRequestEventIndex]);
4444
assert(Types.Events.isResourceReceiveResponse(mainRequestEvent));
4545
assert.strictEqual(mainRequestEvent.args.data.requestId, '1000C0FDC0A75327167272FC7438E999');
46-
if (!mainRequestEvent.args.data.timing) {
46+
if (!mainRequestEvent.args.data.timing?.receiveHeadersStart) {
4747
throw new Error('missing timing field');
4848
}
49-
mainRequestEvent.args.data.timing.receiveHeadersEnd =
50-
Types.Timing.Milli(mainRequestEvent.args.data.timing.receiveHeadersEnd + 1000);
49+
mainRequestEvent.args.data.timing.receiveHeadersStart =
50+
Types.Timing.Milli(mainRequestEvent.args.data.timing.receiveHeadersStart + 1000);
5151
traceEvents[mainRequestEventIndex] = mainRequestEvent;
5252

5353
await processor.parse(traceEvents, {isCPUProfile: false, isFreshRecording: true});
@@ -148,8 +148,8 @@ describeWithEnvironment('DocumentLatency', function() {
148148
getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
149149
assert.strictEqual(insight.data?.redirectDuration, 6059);
150150
assert.strictEqual(insight.data?.uncompressedResponseBytes, 111506);
151-
assert.strictEqual(insight.data?.serverResponseTime, 2008);
152-
assert.isFalse(insight.data?.checklist.serverResponseIsFast.value);
153-
assert.deepEqual(insight.metricSavings, {FCP: 7967, LCP: 7967} as Trace.Insights.Types.MetricSavings);
151+
assert.strictEqual(insight.data?.serverResponseTime, 1);
152+
assert.isTrue(insight.data?.checklist.serverResponseIsFast.value);
153+
assert.deepEqual(insight.metricSavings, {FCP: 6059, LCP: 6059} as Trace.Insights.Types.MetricSavings);
154154
});
155155
});

front_end/models/trace/insights/DocumentLatency.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ function getServerResponseTime(request: Types.Events.SyntheticNetworkRequest): T
110110
return null;
111111
}
112112

113-
const ms = Helpers.Timing.microToMilli(request.args.data.syntheticData.waiting);
113+
const ms = Helpers.Timing.microToMilli(request.args.data.syntheticData.serverResponseTime);
114114
return Math.round(ms) as Types.Timing.Milli;
115115
}
116116

front_end/models/trace/types/TraceEvents.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,10 @@ interface SyntheticArgsData {
363363
ssl: Micro;
364364
stalled: Micro;
365365
totalTime: Micro;
366-
/** Server response time (receiveHeadersEnd - sendEnd) */
366+
/** receiveHeadersEnd - sendEnd */
367367
waiting: Micro;
368+
/** receiveHeadersStart - sendEnd */
369+
serverResponseTime: Micro;
368370
}
369371

370372
export interface SyntheticNetworkRequest extends Complete, SyntheticBased<Phase.COMPLETE> {

0 commit comments

Comments
 (0)