Skip to content

Commit 030b467

Browse files
authored
Merge pull request #4781 from remotion-dev/event-loop-break
2 parents 17b8209 + cb1b693 commit 030b467

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

packages/convert/app/lib/use-thumbnail.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ export const useThumbnailAndWaveform = ({
3131

3232
const execute = useCallback(() => {
3333
const abortController = new AbortController();
34+
35+
const hasEnoughData = () => {
36+
onDone();
37+
};
38+
3439
parseMedia({
3540
signal: abortController.signal,
3641
reader: src.type === 'file' ? webFileReader : fetchReader,
@@ -114,7 +119,7 @@ export const useThumbnailAndWaveform = ({
114119
if (frames >= framesToGet) {
115120
abortController.abort();
116121
frame.close();
117-
onDone();
122+
hasEnoughData();
118123
return;
119124
}
120125

packages/media-parser/src/parse-media.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ const internalParseMedia: InternalParseMedia = async function <
187187
}
188188
}
189189

190+
await state.eventLoop.eventLoopBreakIfNeeded();
191+
190192
const hasBigBuffer = iterator.bytesRemaining() > 100_000;
191193

192194
if (iterationWithThisOffset > 0 || !hasBigBuffer) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import type {LogLevel} from '../log';
2+
import {Log} from '../log';
3+
4+
export const eventLoopState = (logLevel: LogLevel) => {
5+
let lastEventLoopBreak = Date.now();
6+
7+
const eventLoopBreakIfNeeded = async () => {
8+
if (Date.now() - lastEventLoopBreak > 2_000) {
9+
await new Promise<void>((resolve) => {
10+
setTimeout(() => resolve(), 50);
11+
});
12+
Log.verbose(logLevel, '10ms event loop break');
13+
lastEventLoopBreak = Date.now();
14+
}
15+
};
16+
17+
return {eventLoopBreakIfNeeded};
18+
};

packages/media-parser/src/state/parser-state.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {flacState} from './flac-state';
99
import {imagesState} from './images';
1010
import {isoBaseMediaState} from './iso-base-media/iso-state';
1111
import {keyframesState} from './keyframes';
12+
import {eventLoopState} from './last-eventloop-break';
1213
import {makeMp3State} from './mp3';
1314
import {riffSpecificState} from './riff';
1415
import {sampleCallback} from './sample-callbacks';
@@ -101,6 +102,7 @@ export const makeParserState = ({
101102
videoSection: videoSectionState(),
102103
logLevel,
103104
iterator,
105+
eventLoop: eventLoopState(logLevel),
104106
};
105107
};
106108

0 commit comments

Comments
 (0)