Skip to content

Commit 5d1b7af

Browse files
committed
Queue OOB trace instead of sending right away. The web vitals library often updates the values at unload time, and os queuing this until the end means those latest values get captured.
1 parent e3ede56 commit 5d1b7af

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

packages/performance/src/services/oob_resources_service.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ describe('Firebase Performance > oob_resources_service', () => {
220220

221221
stub(mockWindow.document, 'visibilityState').value('hidden');
222222
callEventListener('visibilitychange');
223+
clock.tick(1);
223224

224225
expect(getEntriesByTypeStub).to.be.calledWith('navigation');
225226
expect(getEntriesByTypeStub).to.be.calledWith('paint');
@@ -238,6 +239,7 @@ describe('Firebase Performance > oob_resources_service', () => {
238239
clock.tick(1);
239240

240241
callEventListener('pagehide');
242+
clock.tick(1);
241243

242244
expect(getEntriesByTypeStub).to.be.calledWith('navigation');
243245
expect(getEntriesByTypeStub).to.be.calledWith('paint');
@@ -268,6 +270,7 @@ describe('Firebase Performance > oob_resources_service', () => {
268270
// Force the page load event to be sent
269271
stub(mockWindow.document, 'visibilityState').value('hidden');
270272
callEventListener('visibilitychange');
273+
clock.tick(1);
271274

272275
expect(createOobTraceStub).to.be.calledWithExactly(
273276
performanceController,
@@ -303,6 +306,7 @@ describe('Firebase Performance > oob_resources_service', () => {
303306
// Force the page load event to be sent
304307
stub(mockWindow.document, 'visibilityState').value('hidden');
305308
callEventListener('visibilitychange');
309+
clock.tick(1);
306310

307311
expect(createOobTraceStub).to.be.calledWithExactly(
308312
performanceController,
@@ -330,6 +334,7 @@ describe('Firebase Performance > oob_resources_service', () => {
330334
// Force the page load event to be sent
331335
stub(mockWindow.document, 'visibilityState').value('hidden');
332336
callEventListener('visibilitychange');
337+
clock.tick(1);
333338

334339
expect(createOobTraceStub).to.be.calledWithExactly(
335340
performanceController,
@@ -358,6 +363,7 @@ describe('Firebase Performance > oob_resources_service', () => {
358363
// Force the page load event to be sent
359364
stub(mockWindow.document, 'visibilityState').value('hidden');
360365
callEventListener('visibilitychange');
366+
clock.tick(1);
361367

362368
expect(createOobTraceStub).to.be.calledWithExactly(
363369
performanceController,
@@ -392,6 +398,7 @@ describe('Firebase Performance > oob_resources_service', () => {
392398
// Force the page load event to be sent
393399
stub(mockWindow.document, 'visibilityState').value('hidden');
394400
callEventListener('visibilitychange');
401+
clock.tick(1);
395402

396403
expect(createOobTraceStub).to.be.calledWithExactly(
397404
performanceController,

packages/performance/src/services/oob_resources_service.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,18 @@ function sendOobTrace(performanceController: PerformanceController): void {
145145
'navigation'
146146
) as PerformanceNavigationTiming[];
147147
const paintTimings = api.getEntriesByType('paint');
148-
Trace.createOobTrace(
149-
performanceController,
150-
navigationTimings,
151-
paintTimings,
152-
webVitalMetrics,
153-
firstInputDelay
154-
);
148+
149+
// On page unload web vitals may be updated so queue the oob trace creation
150+
// so that these updates have time to be included.
151+
setTimeout(() => {
152+
Trace.createOobTrace(
153+
performanceController,
154+
navigationTimings,
155+
paintTimings,
156+
webVitalMetrics,
157+
firstInputDelay
158+
);
159+
}, 0);
155160
}
156161
}
157162

0 commit comments

Comments
 (0)