From c408bbe9c983272a255dc11015648bc02cd19c29 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 17 Apr 2026 20:26:14 +0100 Subject: [PATCH] perf: cache browser plugin sdk facades --- src/plugin-activation-boundary.test.ts | 9 +-------- src/plugin-sdk/browser-control-auth.ts | 12 ++++++++---- src/plugin-sdk/browser-host-inspection.ts | 12 ++++++++---- src/plugin-sdk/browser-maintenance.ts | 12 ++++++++---- src/plugin-sdk/browser-profiles.ts | 13 +++++++++---- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/plugin-activation-boundary.test.ts b/src/plugin-activation-boundary.test.ts index bfa6f24c19e..0a87ce18e9c 100644 --- a/src/plugin-activation-boundary.test.ts +++ b/src/plugin-activation-boundary.test.ts @@ -227,14 +227,7 @@ describe("plugin activation boundary", () => { loadBundledPluginPublicSurfaceModuleSync.mock.calls.map( ([params]) => params.artifactBasename, ), - ).toEqual([ - "browser-host-inspection.js", - "browser-control-auth.js", - "browser-profiles.js", - "browser-profiles.js", - "browser-host-inspection.js", - "browser-host-inspection.js", - ]); + ).toEqual(["browser-host-inspection.js", "browser-control-auth.js", "browser-profiles.js"]); loadBundledPluginPublicSurfaceModuleSync.mockReset(); await expect(browser.closeTrackedBrowserTabsForSessions({ sessionKeys: [] })).resolves.toBe(0); diff --git a/src/plugin-sdk/browser-control-auth.ts b/src/plugin-sdk/browser-control-auth.ts index 89be3a1b751..6ec64283de8 100644 --- a/src/plugin-sdk/browser-control-auth.ts +++ b/src/plugin-sdk/browser-control-auth.ts @@ -24,11 +24,15 @@ type BrowserControlAuthSurface = { ) => Promise; }; +let cachedBrowserControlAuthSurface: BrowserControlAuthSurface | undefined; + function loadBrowserControlAuthSurface(): BrowserControlAuthSurface { - return loadBundledPluginPublicSurfaceModuleSync({ - dirName: "browser", - artifactBasename: "browser-control-auth.js", - }); + cachedBrowserControlAuthSurface ??= + loadBundledPluginPublicSurfaceModuleSync({ + dirName: "browser", + artifactBasename: "browser-control-auth.js", + }); + return cachedBrowserControlAuthSurface; } export function resolveBrowserControlAuth( diff --git a/src/plugin-sdk/browser-host-inspection.ts b/src/plugin-sdk/browser-host-inspection.ts index b3db53ae17f..889adfc1acc 100644 --- a/src/plugin-sdk/browser-host-inspection.ts +++ b/src/plugin-sdk/browser-host-inspection.ts @@ -11,11 +11,15 @@ type BrowserHostInspectionSurface = { parseBrowserMajorVersion: (rawVersion: string | null | undefined) => number | null; }; +let cachedBrowserHostInspectionSurface: BrowserHostInspectionSurface | undefined; + function loadBrowserHostInspectionSurface(): BrowserHostInspectionSurface { - return loadBundledPluginPublicSurfaceModuleSync({ - dirName: "browser", - artifactBasename: "browser-host-inspection.js", - }); + cachedBrowserHostInspectionSurface ??= + loadBundledPluginPublicSurfaceModuleSync({ + dirName: "browser", + artifactBasename: "browser-host-inspection.js", + }); + return cachedBrowserHostInspectionSurface; } export function resolveGoogleChromeExecutableForPlatform( diff --git a/src/plugin-sdk/browser-maintenance.ts b/src/plugin-sdk/browser-maintenance.ts index d430ea448eb..1d0afcb9663 100644 --- a/src/plugin-sdk/browser-maintenance.ts +++ b/src/plugin-sdk/browser-maintenance.ts @@ -10,15 +10,19 @@ type BrowserMaintenanceSurface = { closeTrackedBrowserTabsForSessions: (params: CloseTrackedBrowserTabsParams) => Promise; }; +let cachedBrowserMaintenanceSurface: BrowserMaintenanceSurface | undefined; + function hasRequestedSessionKeys(sessionKeys: Array): boolean { return sessionKeys.some((key) => Boolean(key?.trim())); } function loadBrowserMaintenanceSurface(): BrowserMaintenanceSurface { - return loadBundledPluginPublicSurfaceModuleSync({ - dirName: "browser", - artifactBasename: "browser-maintenance.js", - }); + cachedBrowserMaintenanceSurface ??= + loadBundledPluginPublicSurfaceModuleSync({ + dirName: "browser", + artifactBasename: "browser-maintenance.js", + }); + return cachedBrowserMaintenanceSurface; } export async function closeTrackedBrowserTabsForSessions( diff --git a/src/plugin-sdk/browser-profiles.ts b/src/plugin-sdk/browser-profiles.ts index 31b5068957a..61791c47b75 100644 --- a/src/plugin-sdk/browser-profiles.ts +++ b/src/plugin-sdk/browser-profiles.ts @@ -57,11 +57,16 @@ type BrowserProfilesSurface = { ) => ResolvedBrowserProfile | null; }; +let cachedBrowserProfilesSurface: BrowserProfilesSurface | undefined; + function loadBrowserProfilesSurface(): BrowserProfilesSurface { - return loadBundledPluginPublicSurfaceModuleSync({ - dirName: "browser", - artifactBasename: "browser-profiles.js", - }); + cachedBrowserProfilesSurface ??= loadBundledPluginPublicSurfaceModuleSync( + { + dirName: "browser", + artifactBasename: "browser-profiles.js", + }, + ); + return cachedBrowserProfilesSurface; } export function resolveBrowserConfig(