Skip to content

Commit c08d552

Browse files
committed
šŸ› do not calculate resource duration if page was in frozen state during resource duration
1 parent 4f444a2 commit c08d552

File tree

1 file changed

+29
-15
lines changed

1 file changed

+29
-15
lines changed

ā€Žpackages/rum-core/src/domain/resource/resourceCollection.ts

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ export function startResourceCollection(
5454
}).subscribe((entries) => {
5555
for (const entry of entries) {
5656
if (!isResourceEntryRequestType(entry)) {
57-
handleResource(() => processResourceEntry(entry, configuration))
57+
handleResource(() => processResourceEntry(entry, configuration, pageStateHistory))
5858
}
5959
}
6060
})
6161

6262
retrieveInitialDocumentResourceTimingImpl(configuration, (timing) => {
63-
handleResource(() => processResourceEntry(timing, configuration))
63+
handleResource(() => processResourceEntry(timing, configuration, pageStateHistory))
6464
})
6565

6666
function handleResource(computeRawEvent: () => RawRumEventCollectedData<RawRumResourceEvent> | undefined) {
@@ -91,11 +91,15 @@ function processRequest(
9191
return
9292
}
9393

94+
const duration = computeRequestDuration(pageStateHistory, startClocks, request.duration)
95+
9496
const type = request.type === RequestType.XHR ? ResourceType.XHR : ResourceType.FETCH
9597

96-
const correspondingTimingOverrides = matchingTiming ? computeResourceEntryMetrics(matchingTiming) : undefined
98+
console.log('matchingTiming', matchingTiming)
9799

98-
const duration = computeRequestDuration(pageStateHistory, startClocks, request.duration)
100+
const correspondingTimingOverrides = matchingTiming
101+
? computeResourceEntryMetrics(matchingTiming, pageStateHistory)
102+
: undefined
99103

100104
const resourceEvent = combine(
101105
{
@@ -137,7 +141,8 @@ function processRequest(
137141

138142
function processResourceEntry(
139143
entry: RumPerformanceResourceTiming,
140-
configuration: RumConfiguration
144+
configuration: RumConfiguration,
145+
pageStateHistory: PageStateHistory
141146
): RawRumEventCollectedData<RawRumResourceEvent> | undefined {
142147
const startClocks = relativeToClocks(entry.startTime)
143148
const tracingInfo = computeResourceEntryTracingInfo(entry, configuration)
@@ -146,7 +151,7 @@ function processResourceEntry(
146151
}
147152

148153
const type = computeResourceEntryType(entry)
149-
const entryMetrics = computeResourceEntryMetrics(entry)
154+
const entryMetrics = computeResourceEntryMetrics(entry, pageStateHistory)
150155

151156
const resourceEvent = combine(
152157
{
@@ -176,14 +181,23 @@ function processResourceEntry(
176181
}
177182
}
178183

179-
function computeResourceEntryMetrics(entry: RumPerformanceResourceTiming) {
184+
function computeResourceEntryMetrics(entry: RumPerformanceResourceTiming, pageStateHistory: PageStateHistory) {
180185
const { renderBlockingStatus } = entry
186+
if (!pageStateHistory.wasInPageStateDuringPeriod(PageState.FROZEN, entry.startTime, entry.duration)) {
187+
return {
188+
resource: {
189+
duration: computeResourceEntryDuration(entry),
190+
render_blocking_status: renderBlockingStatus,
191+
...computeResourceEntrySize(entry),
192+
...computeResourceEntryDetails(entry),
193+
},
194+
}
195+
}
196+
181197
return {
182198
resource: {
183-
duration: computeResourceEntryDuration(entry),
184199
render_blocking_status: renderBlockingStatus,
185200
...computeResourceEntrySize(entry),
186-
...computeResourceEntryDetails(entry),
187201
},
188202
}
189203
}
@@ -216,16 +230,16 @@ function computeResourceEntryTracingInfo(entry: RumPerformanceResourceTiming, co
216230
}
217231
}
218232

219-
function computeRequestDuration(pageStateHistory: PageStateHistory, startClocks: ClocksState, duration: Duration) {
220-
return !pageStateHistory.wasInPageStateDuringPeriod(PageState.FROZEN, startClocks.relative, duration)
221-
? toServerDuration(duration)
222-
: undefined
223-
}
224-
225233
/**
226234
* The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it
227235
* https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes
228236
*/
229237
function discardZeroStatus(statusCode: number | undefined): number | undefined {
230238
return statusCode === 0 ? undefined : statusCode
231239
}
240+
241+
function computeRequestDuration(pageStateHistory: PageStateHistory, startClocks: ClocksState, duration: Duration) {
242+
return !pageStateHistory.wasInPageStateDuringPeriod(PageState.FROZEN, startClocks.relative, duration)
243+
? toServerDuration(duration)
244+
: undefined
245+
}

0 commit comments

Comments
Ā (0)