From cbb22a00946f1c6da680c62717eab26166d9843a Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 8 Oct 2026 09:03:42 +0200 Subject: [PATCH] Keep background effects to desktops until the menu says what they cost - The one support check asks for a desktop again, as #4059 had the pipeline do: menu and pipeline still agree, so a phone is neither offered blur nor refused it. - Lifting it moves to the PR that tells the user where effects run slowly, so it is their choice to make. Co-Authored-By: Claude Opus 5.5 (1M context) --- src/components/CallFooterViewModel.test.ts | 4 ++-- src/livekit/TrackProcessorContext.test.ts | 12 +++++++----- src/livekit/backgroundProcessing.ts | 9 ++++----- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/components/CallFooterViewModel.test.ts b/src/components/CallFooterViewModel.test.ts index 450482ceb..34c76fc64 100644 --- a/src/components/CallFooterViewModel.test.ts +++ b/src/components/CallFooterViewModel.test.ts @@ -243,9 +243,9 @@ describe("createCallFooterViewModel", () => { ); } - it("offers them on a phone whose browser can run them", () => { + it("offers nothing on a phone, where the pipeline would refuse them", () => { sdkSupportMock.mockReturnValue(true); - expect(lobbyOn("ios").toggleBlur$.value).toBeDefined(); + expect(lobbyOn("ios").toggleBlur$.value).toBeUndefined(); }); it("offers them where the pipeline will honour them", () => { diff --git a/src/livekit/TrackProcessorContext.test.ts b/src/livekit/TrackProcessorContext.test.ts index 0ba37c402..178e39dc6 100644 --- a/src/livekit/TrackProcessorContext.test.ts +++ b/src/livekit/TrackProcessorContext.test.ts @@ -48,8 +48,8 @@ vi.mock("@livekit/track-processors", () => ({ }), supportsBackgroundProcessors: (): boolean => true, })); -// A phone: the pipeline must not ask. -vi.mock("../Platform", () => ({ platform: "ios" })); +const platformMock = vi.hoisted(() => ({ platform: "desktop" })); +vi.mock("../Platform", () => platformMock); vi.mock("./BackgroundEffectTransformer", () => ({ BackgroundEffectTransformer: vi.fn(), })); @@ -176,6 +176,7 @@ describe("ProcessorProvider", () => { pipelines.built = 0; pipelines.destroyed = 0; pipelines.switches = []; + platformMock.platform = "desktop"; backgroundBlur.setValue(false); }); afterEach(() => backgroundBlur.setValue(false)); @@ -194,13 +195,14 @@ describe("ProcessorProvider", () => { expect(track.stopProcessor).not.toHaveBeenCalled(); }); - it("runs on a phone whose browser can run it", async () => { + it("does not run on a phone, even where its browser could", async () => { + platformMock.platform = "ios"; const track = cameraTrack(); render(surfaces(track)); await blur(true); - expect(latest().supported).toBe(true); - expect(track.setProcessor).toHaveBeenCalledWith(latest().processor); + expect(latest().supported).toBe(false); + expect(track.setProcessor).not.toHaveBeenCalled(); }); it("preview and call share one pipeline", async () => { diff --git a/src/livekit/backgroundProcessing.ts b/src/livekit/backgroundProcessing.ts index 3dc32e5ec..8b6168dad 100644 --- a/src/livekit/backgroundProcessing.ts +++ b/src/livekit/backgroundProcessing.ts @@ -7,10 +7,9 @@ Please see LICENSE in the repository root for full details. import { supportsBackgroundProcessors as supportsBackgroundProcessorsLivekitSdk } from "@livekit/track-processors"; -/** - * Whether this browser can run background effects: the one answer for the - * controls and the pipeline, so nothing is offered that the pipeline refuses. - */ +import { platform } from "../Platform"; + +/** One answer for the controls and the pipeline, so neither offers what the other refuses. */ export function supportsBackgroundProcessors(): boolean { - return supportsBackgroundProcessorsLivekitSdk(); + return supportsBackgroundProcessorsLivekitSdk() && platform === "desktop"; }