From 0fe5d3c8d34a38d8368e92618aad31ec122b63ca Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Tue, 27 Dec 2022 10:28:27 +0100 Subject: [PATCH] feat(tracker):reset batchSize to initial after sending a big message --- tracker/tracker/src/webworker/BatchWriter.ts | 25 ++++++++++--------- .../tracker/src/webworker/PrimitiveEncoder.ts | 2 +- tracker/tracker/src/webworker/index.ts | 5 ++++ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/tracker/tracker/src/webworker/BatchWriter.ts b/tracker/tracker/src/webworker/BatchWriter.ts index 47ef6560c..167c1aff6 100644 --- a/tracker/tracker/src/webworker/BatchWriter.ts +++ b/tracker/tracker/src/webworker/BatchWriter.ts @@ -36,7 +36,7 @@ export default class BatchWriter { } private prepare(): void { - if (!this.encoder.isEmpty()) { + if (!this.encoder.isEmpty) { return } @@ -94,19 +94,20 @@ export default class BatchWriter { if (this.writeWithSize(message)) { return } + // buffer overflow, send already written data first then try again this.finaliseBatch() - while (!this.writeWithSize(message)) { - if (this.beaconSize === this.beaconSizeLimit) { - console.warn('OpenReplay: beacon size overflow. Skipping large message.', message, this) - this.encoder.reset() - this.prepare() - return - } - // MBTODO: tempWriter for one message? - this.beaconSize = Math.min(this.beaconSize * 2, this.beaconSizeLimit) - this.encoder = new MessageEncoder(this.beaconSize) - this.prepare() + if (this.writeWithSize(message)) { + return } + // buffer is too small. Create one with maximal capacity + this.encoder = new MessageEncoder(this.beaconSizeLimit) + this.prepare() + if (!this.writeWithSize(message)) { + console.warn('OpenReplay: beacon size overflow. Skipping large message.', message, this) + } + // reset encoder to normal size + this.encoder = new MessageEncoder(this.beaconSize) + this.prepare() } finaliseBatch() { diff --git a/tracker/tracker/src/webworker/PrimitiveEncoder.ts b/tracker/tracker/src/webworker/PrimitiveEncoder.ts index 34cd3f055..ac3e98a03 100644 --- a/tracker/tracker/src/webworker/PrimitiveEncoder.ts +++ b/tracker/tracker/src/webworker/PrimitiveEncoder.ts @@ -66,7 +66,7 @@ export default class PrimitiveEncoder { checkpoint() { this.checkpointOffset = this.offset } - isEmpty(): boolean { + get isEmpty(): boolean { return this.offset === 0 } skip(n: number): boolean { diff --git a/tracker/tracker/src/webworker/index.ts b/tracker/tracker/src/webworker/index.ts index 6cddb8a6b..2c6253210 100644 --- a/tracker/tracker/src/webworker/index.ts +++ b/tracker/tracker/src/webworker/index.ts @@ -1,3 +1,8 @@ +// Do strong type WebWorker as soon as it is possible: +// https://github.com/microsoft/TypeScript/issues/14877 +// At the moment "webworker" lib conflicts with jest-environment-jsdom that uses "dom" lib +// + import type Message from '../common/messages.gen.js' import { Type as MType } from '../common/messages.gen.js' import { ToWorkerData, FromWorkerData } from '../common/interaction.js'