From fd677929ef772b46e103d002230e87fa2d3b587d Mon Sep 17 00:00:00 2001 From: Jesse Wang Date: Tue, 24 Sep 2024 08:57:31 -0700 Subject: [PATCH] feat(session replay): adding timeout into config --- .../src/typings/session-replay.ts | 1 + packages/session-replay-browser/src/config/types.ts | 1 + .../src/events/event-compressor.ts | 11 +++++++---- packages/session-replay-browser/src/session-replay.ts | 1 - .../test/event-compressor.test.ts | 1 + 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/plugin-session-replay-browser/src/typings/session-replay.ts b/packages/plugin-session-replay-browser/src/typings/session-replay.ts index 87ccd1597..7cb38c2ac 100644 --- a/packages/plugin-session-replay-browser/src/typings/session-replay.ts +++ b/packages/plugin-session-replay-browser/src/typings/session-replay.ts @@ -12,6 +12,7 @@ export interface SessionReplayPrivacyConfig { export interface SessionReplayPerformanceConfig { enabled: boolean; + timeout?: number; } export interface SessionReplayOptions { diff --git a/packages/session-replay-browser/src/config/types.ts b/packages/session-replay-browser/src/config/types.ts index a4bbdfe7e..26df50188 100644 --- a/packages/session-replay-browser/src/config/types.ts +++ b/packages/session-replay-browser/src/config/types.ts @@ -75,6 +75,7 @@ export interface SessionReplayVersion { export interface SessionReplayPerformanceConfig { enabled: boolean; + timeout?: number; } export type SessionReplayType = 'standalone' | 'plugin' | 'segment'; diff --git a/packages/session-replay-browser/src/events/event-compressor.ts b/packages/session-replay-browser/src/events/event-compressor.ts index 648342f0e..bbd8c96c7 100644 --- a/packages/session-replay-browser/src/events/event-compressor.ts +++ b/packages/session-replay-browser/src/events/event-compressor.ts @@ -9,6 +9,7 @@ interface TaskQueue { sessionId: number; } +const DEFAULT_TIMEOUT = 2000; export class EventCompressor { taskQueue: TaskQueue[] = []; isProcessing = false; @@ -16,6 +17,7 @@ export class EventCompressor { config: SessionReplayJoinedConfig; deviceId: string | undefined; canUseIdleCallback: boolean | undefined; + timeout: number; constructor( eventsManager: SessionReplayEventsManager<'replay' | 'interaction', string>, @@ -27,6 +29,7 @@ export class EventCompressor { this.eventsManager = eventsManager; this.config = config; this.deviceId = deviceId; + this.timeout = config.performanceConfig?.timeout || DEFAULT_TIMEOUT; } // Schedule processing during idle time @@ -37,7 +40,7 @@ export class EventCompressor { (idleDeadline) => { this.processQueue(idleDeadline); }, - { timeout: 2000 }, + { timeout: this.timeout }, ); } } @@ -69,20 +72,20 @@ export class EventCompressor { (idleDeadline) => { this.processQueue(idleDeadline); }, - { timeout: 2000 }, + { timeout: this.timeout }, ); } else { this.isProcessing = false; } } - compressEvents = (event: eventWithTime) => { + compressEvent = (event: eventWithTime) => { const packedEvent = pack(event); return JSON.stringify(packedEvent); }; public addCompressedEvent = (event: eventWithTime, sessionId: number) => { - const compressedEvent = this.compressEvents(event); + const compressedEvent = this.compressEvent(event); if (this.eventsManager && this.deviceId) { this.eventsManager.addEvent({ diff --git a/packages/session-replay-browser/src/session-replay.ts b/packages/session-replay-browser/src/session-replay.ts index a0022c9ef..c644fff06 100644 --- a/packages/session-replay-browser/src/session-replay.ts +++ b/packages/session-replay-browser/src/session-replay.ts @@ -315,7 +315,6 @@ export class SessionReplay implements AmplitudeSessionReplay { recordEvents() { const shouldRecord = this.getShouldRecord(); const sessionId = this.identifiers?.sessionId; - // const canDelayCompression = globalScope && 'requestIdleCallback' in globalScope; if (!shouldRecord || !sessionId || !this.config) { return; } diff --git a/packages/session-replay-browser/test/event-compressor.test.ts b/packages/session-replay-browser/test/event-compressor.test.ts index 5a5a785d6..d22dd8c1b 100644 --- a/packages/session-replay-browser/test/event-compressor.test.ts +++ b/packages/session-replay-browser/test/event-compressor.test.ts @@ -39,6 +39,7 @@ describe('EventCompressor', () => { sampleRate: 1, performanceConfig: { enabled: true, + timeout: 2000, }, });