From a2b3469ba0e549cc6281e2a7a18473cbe4563ed6 Mon Sep 17 00:00:00 2001 From: Makito Date: Mon, 12 Jan 2026 22:37:08 +0900 Subject: [PATCH] perf(stage-tamagotchi): no buffer copying in screen-capture devtool when possible --- .../renderer/pages/devtools/screen-capture.vue | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/stage-tamagotchi/src/renderer/pages/devtools/screen-capture.vue b/apps/stage-tamagotchi/src/renderer/pages/devtools/screen-capture.vue index 7b841e205..e770123c0 100644 --- a/apps/stage-tamagotchi/src/renderer/pages/devtools/screen-capture.vue +++ b/apps/stage-tamagotchi/src/renderer/pages/devtools/screen-capture.vue @@ -19,8 +19,15 @@ const { getSources, selectWithSource } = useElectronScreenCapture(window.electro fetchWindowIcons: true, }) +function toLocalArrayBuffer(bytes: Uint8Array) { + if (bytes.buffer instanceof SharedArrayBuffer) { + return bytes.slice().buffer + } + return bytes.buffer +} + function toObjectUrl(bytes: Uint8Array, mime: string) { - return URL.createObjectURL(new Blob([bytes.slice().buffer], { type: mime })) + return URL.createObjectURL(new Blob([toLocalArrayBuffer(bytes)], { type: mime })) } async function startCapture(source: SerializableDesktopCapturerSource) { @@ -52,10 +59,11 @@ async function refetchSources() { const nextSources = (await getSources()) .sort((a, b) => { - if (a.id.startsWith('screen:') && b.id.startsWith('window:')) - return -1 - if (a.id.startsWith('window:') && b.id.startsWith('screen:')) - return 1 + const aIsScreen = a.id.startsWith('screen:') + const bIsScreen = b.id.startsWith('screen:') + if (aIsScreen !== bIsScreen) + return aIsScreen ? -1 : 1 + return a.name.localeCompare(b.name) })