Skip to content

Commit

Permalink
@remotion/renderer: Cleanup headless browsers inbetween renders
Browse files Browse the repository at this point in the history
  • Loading branch information
JonnyBurger committed May 16, 2024
1 parent 1e77c05 commit 604f741
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 12 deletions.
19 changes: 19 additions & 0 deletions packages/renderer/src/browser-instances.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import type {HeadlessBrowser} from './browser/Browser';

const browserInstances: HeadlessBrowser[] = [];

export const killAllBrowsers = async () => {
for (const browser of browserInstances) {
try {
await browser.close(true, 'info', false);
} catch (err) {}
}
};

export const addHeadlessBrowser = (browser: HeadlessBrowser) => {
browserInstances.push(browser);
};

export const removeHeadlessBrowser = (browser: HeadlessBrowser) => {
browserInstances.splice(browserInstances.indexOf(browser), 1);
};
2 changes: 2 additions & 0 deletions packages/renderer/src/browser/Browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
* limitations under the License.
*/

import {removeHeadlessBrowser} from '../browser-instances';
import type {LogLevel} from '../log-level';
import {assert} from './assert';
import type {Page} from './BrowserPage';
Expand Down Expand Up @@ -278,6 +279,7 @@ export class HeadlessBrowser extends EventEmitter {
this.emit(
silent ? BrowserEmittedEvents.ClosedSilent : BrowserEmittedEvents.Closed,
);
removeHeadlessBrowser(this);
}

disconnect(): void {
Expand Down
3 changes: 2 additions & 1 deletion packages/renderer/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import {DEFAULT_JPEG_QUALITY, validateJpegQuality} from './jpeg-quality';
import {isEqualOrBelowLogLevel, isValidLogLevel, logLevels} from './log-level';
import {INDENT_TOKEN, Log} from './logger';
import {mimeContentType, mimeLookup} from './mime-types';
import {internalOpenBrowser, killAllBrowsers} from './open-browser';
import {internalOpenBrowser} from './open-browser';
import {
DEFAULT_OPENGL_RENDERER,
validOpenGlRenderers,
Expand Down Expand Up @@ -132,6 +132,7 @@ export {validateOutputFilename} from './validate-output-filename';
export type {AudioCodec};

import {makeDownloadMap} from './assets/download-map';
import {killAllBrowsers} from './browser-instances';
import {codecSupportsMedia} from './codec-supports-media';
import {makeFileExecutableIfItIsNot} from './compositor/make-file-executable';
import {internalEnsureBrowser} from './ensure-browser';
Expand Down
13 changes: 2 additions & 11 deletions packages/renderer/src/open-browser.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type {Browser} from './browser';
import {addHeadlessBrowser} from './browser-instances';
import type {HeadlessBrowser} from './browser/Browser';
import {defaultBrowserDownloadProgress} from './browser/browser-download-progress-bar';
import {puppeteer} from './browser/node';
Expand Down Expand Up @@ -52,16 +53,6 @@ const getOpenGlRenderer = (option?: OpenGlRenderer | null): string[] => {
return [`--use-gl=${renderer}`];
};

const browserInstances: HeadlessBrowser[] = [];

export const killAllBrowsers = async () => {
for (const browser of browserInstances) {
try {
await browser.close(true, 'info', false);
} catch (err) {}
}
};

type InternalOpenBrowserOptions = {
browserExecutable: string | null;
chromiumOptions: ChromiumOptions;
Expand Down Expand Up @@ -207,7 +198,7 @@ export const internalOpenBrowser = async ({
const pages = await browserInstance.pages(logLevel, indent);
await pages[0].close();

browserInstances.push(browserInstance);
addHeadlessBrowser(browserInstance);
return browserInstance;
};

Expand Down

0 comments on commit 604f741

Please sign in to comment.