Files
ttstd-infinite-canvas/web/src/lib/canvas/canvas-performance-mode.ts

28 lines
1.1 KiB
TypeScript

import { CanvasNodeType, type CanvasMediaPerformanceMode, type CanvasNodeData } from "@/types/canvas";
const STORAGE_KEY = "canvas-media-performance-mode";
export function readCanvasMediaPerformanceMode(): CanvasMediaPerformanceMode {
try {
const stored = window.localStorage.getItem(STORAGE_KEY);
return stored === "quality" || stored === "performance" ? stored : "auto";
} catch {
return "auto";
}
}
export function persistCanvasMediaPerformanceMode(mode: CanvasMediaPerformanceMode) {
try {
window.localStorage.setItem(STORAGE_KEY, mode);
} catch {
// 浏览器禁用本地存储时保留当前会话内的选择。
}
}
export function shouldReduceCanvasMediaEffects(mode: CanvasMediaPerformanceMode, nodes: CanvasNodeData[]) {
if (mode === "performance") return true;
if (mode === "quality") return false;
const mediaCount = nodes.filter((node) => node.type === CanvasNodeType.Image || node.type === CanvasNodeType.Video || node.type === CanvasNodeType.Audio).length;
return nodes.length >= 80 || mediaCount >= 32;
}