feat: reduce gpu usage when hidden

This commit is contained in:
GyDi 2022-05-07 14:43:52 +08:00 committed by GitHub
parent 18a6bfd73a
commit 0be4b1222d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,5 +1,7 @@
import { useEffect, useRef } from "react"; import { useEffect, useRef, useState } from "react";
import { useTheme } from "@mui/material"; import { useTheme } from "@mui/material";
import { listen } from "@tauri-apps/api/event";
import { appWindow } from "@tauri-apps/api/window";
const maxPoint = 30; const maxPoint = 30;
@ -70,7 +72,28 @@ const TrafficGraph = (props: Props) => {
}; };
}, []); }, []);
// reduce the GPU usage when hidden
const [enablePaint, setEnablePaint] = useState(true);
useEffect(() => { useEffect(() => {
appWindow.isVisible().then(setEnablePaint);
const unlistenBlur = listen("tauri://blur", async () => {
setEnablePaint(await appWindow.isVisible());
});
const unlistenFocus = listen("tauri://focus", async () => {
setEnablePaint(await appWindow.isVisible());
});
return () => {
unlistenBlur.then((fn) => fn());
unlistenFocus.then((fn) => fn());
};
}, []);
useEffect(() => {
if (!enablePaint) return;
let raf = 0; let raf = 0;
const canvas = canvasRef.current!; const canvas = canvasRef.current!;
@ -193,7 +216,7 @@ const TrafficGraph = (props: Props) => {
return () => { return () => {
cancelAnimationFrame(raf); cancelAnimationFrame(raf);
}; };
}, [palette]); }, [enablePaint, palette]);
return <canvas ref={canvasRef} style={{ width: "100%", height: "100%" }} />; return <canvas ref={canvasRef} style={{ width: "100%", height: "100%" }} />;
}; };