Skip to content

Commit 81ca8d5

Browse files
refactor: Update storage usage calculation in SegmentMemoryStorage (#421)
1 parent db830f1 commit 81ca8d5

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

packages/p2p-media-loader-core/src/segment-storage/segment-memory-storage.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const BYTES_PER_MiB = 1048576;
3737
export class SegmentMemoryStorage implements SegmentStorage {
3838
private readonly userAgent = navigator.userAgent;
3939
private segmentMemoryStorageLimit = 4 * 1024;
40-
private currentMemoryStorageSize = 0;
40+
private currentStorageUsage = 0;
4141

4242
private cache = new Map<string, SegmentDataItem>();
4343
private readonly logger: debug.Debugger;
@@ -113,6 +113,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
113113
endTime,
114114
streamType,
115115
});
116+
this.increaseStorageUsage(data.byteLength);
116117

117118
this.logger(`add segment: ${segmentId} to ${streamId}`);
118119

@@ -137,7 +138,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
137138
if (!this.lastRequestedSegment || !this.currentPlayback) {
138139
return {
139140
totalCapacity: this.segmentMemoryStorageLimit,
140-
usedCapacity: this.currentMemoryStorageSize,
141+
usedCapacity: this.currentStorageUsage,
141142
};
142143
}
143144
const playbackPosition = this.currentPlayback.position;
@@ -193,7 +194,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
193194
);
194195

195196
for (const segmentData of sortedCache) {
196-
const { streamId, segmentId } = segmentData;
197+
const { streamId, segmentId, data } = segmentData;
197198
const storageId = getStorageItemId(streamId, segmentId);
198199

199200
const shouldRemove = this.shouldRemoveSegment(
@@ -206,6 +207,8 @@ export class SegmentMemoryStorage implements SegmentStorage {
206207

207208
this.cache.delete(storageId);
208209
affectedStreams.add(streamId);
210+
this.decreaseStorageUsage(data.byteLength);
211+
209212
this.logger(`Removed segment ${segmentId} from stream ${streamId}`);
210213

211214
if (!this.isMemoryLimitReached(newSegmentSize) && !isLiveStream) break;
@@ -216,7 +219,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
216219

217220
private isMemoryLimitReached(segmentByteLength: number) {
218221
return (
219-
this.currentMemoryStorageSize + segmentByteLength / BYTES_PER_MiB >
222+
this.currentStorageUsage + segmentByteLength / BYTES_PER_MiB >
220223
this.segmentMemoryStorageLimit
221224
);
222225
}
@@ -257,6 +260,14 @@ export class SegmentMemoryStorage implements SegmentStorage {
257260
return true;
258261
}
259262

263+
private increaseStorageUsage(segmentByteLength: number) {
264+
this.currentStorageUsage += segmentByteLength / BYTES_PER_MiB;
265+
}
266+
267+
private decreaseStorageUsage(segmentByteLength: number) {
268+
this.currentStorageUsage -= segmentByteLength / BYTES_PER_MiB;
269+
}
270+
260271
private setMemoryStorageLimit() {
261272
if (this.coreConfig && this.coreConfig.segmentMemoryStorageLimit) {
262273
this.segmentMemoryStorageLimit =

0 commit comments

Comments
 (0)