diff --git a/mobile/src/browser/mobile-browser-frameless-stream.test.tsx b/mobile/src/browser/mobile-browser-frameless-stream.test.tsx index f2b42b37c84..bf486d3c5c0 100644 --- a/mobile/src/browser/mobile-browser-frameless-stream.test.tsx +++ b/mobile/src/browser/mobile-browser-frameless-stream.test.tsx @@ -87,7 +87,7 @@ async function renderPane(): Promise<{ renderer: ReactTestRenderer; stream: Subs isActive: true } - let renderer: ReactTestRenderer | null = null + let renderer: ReactTestRenderer await act(async () => { renderer = create( createElement(MobileBrowserPane, { @@ -104,9 +104,6 @@ async function renderPane(): Promise<{ renderer: ReactTestRenderer; stream: Subs ) await Promise.resolve() }) - if (!renderer) { - throw new Error('MobileBrowserPane did not render') - } const mounted: ReactTestRenderer = renderer const viewport = mounted.root .findAllByType('View') diff --git a/src/renderer/src/components/browser-pane/browser-guest-paint-retention.ts b/src/renderer/src/components/browser-pane/browser-guest-paint-retention.ts index 10cfde64aba..d2e3e8876eb 100644 --- a/src/renderer/src/components/browser-pane/browser-guest-paint-retention.ts +++ b/src/renderer/src/components/browser-pane/browser-guest-paint-retention.ts @@ -1,3 +1,4 @@ +import { useMemo } from 'react' import { useShallow } from 'zustand/react/shallow' import { useAppStore } from '../../store' import { useBrowserMobileDriverForAny } from '../../lib/pane-manager/browser-mobile-driver-state' @@ -25,6 +26,7 @@ export function collectBrowserPageIds( // Why: a stable identity keeps the disabled branch from re-running downstream shallow compares. const NO_BROWSER_PAGE_IDS: string[] = [] +const NO_BROWSER_TABS_BY_WORKTREE: Record = {} export function useWorktreeBrowserPageIds(worktreeId: string): string[] { return useAppStore( @@ -46,12 +48,15 @@ export function useBrowserGuestPaintRetention(browserPageIds: readonly string[]) // on the driver alone and the guest never mounts, so the driver never flips: a deadlock that // leaves the page unreachable from the phone entirely. export function useAnyBrowserGuestNeedsPaint(enabled: boolean): boolean { - const browserPageIds = useAppStore( - useShallow((state) => + const browserTabsByWorktree = useAppStore((state) => + enabled ? state.browserTabsByWorktree : NO_BROWSER_TABS_BY_WORKTREE + ) + const browserPageIds = useMemo( + () => enabled - ? Object.values(state.browserTabsByWorktree).flatMap((tabs) => collectBrowserPageIds(tabs)) - : NO_BROWSER_PAGE_IDS - ) + ? Object.values(browserTabsByWorktree).flatMap((tabs) => collectBrowserPageIds(tabs)) + : NO_BROWSER_PAGE_IDS, + [browserTabsByWorktree, enabled] ) return useBrowserGuestPaintRetention(browserPageIds) }