feat: monitor web recorder frontend performance

This commit is contained in:
amhsirak
2025-01-04 15:57:18 +05:30
parent 230f40bc9a
commit e20a4073de

View File

@@ -7,6 +7,7 @@ import DatePicker from './DatePicker';
import Dropdown from './Dropdown'; import Dropdown from './Dropdown';
import TimePicker from './TimePicker'; import TimePicker from './TimePicker';
import DateTimeLocalPicker from './DateTimeLocalPicker'; import DateTimeLocalPicker from './DateTimeLocalPicker';
import { FrontendPerformanceMonitor } from '../../../perf/performance';
interface CreateRefCallback { interface CreateRefCallback {
(ref: React.RefObject<HTMLCanvasElement>): void; (ref: React.RefObject<HTMLCanvasElement>): void;
@@ -28,6 +29,9 @@ export interface Coordinates {
const Canvas = ({ width, height, onCreateRef }: CanvasProps) => { const Canvas = ({ width, height, onCreateRef }: CanvasProps) => {
const performanceMonitor = useRef(new FrontendPerformanceMonitor());
console.log('Frontend Performance Report:', performanceMonitor.current.getPerformanceReport());
const canvasRef = useRef<HTMLCanvasElement>(null); const canvasRef = useRef<HTMLCanvasElement>(null);
const { socket } = useSocketStore(); const { socket } = useSocketStore();
const { setLastAction, lastAction } = useGlobalInfoStore(); const { setLastAction, lastAction } = useGlobalInfoStore();
@@ -111,6 +115,7 @@ const Canvas = ({ width, height, onCreateRef }: CanvasProps) => {
}, [socket]); }, [socket]);
const onMouseEvent = useCallback((event: MouseEvent) => { const onMouseEvent = useCallback((event: MouseEvent) => {
performanceMonitor.current.measureEventLatency(event);
if (socket && canvasRef.current) { if (socket && canvasRef.current) {
// Get the canvas bounding rectangle // Get the canvas bounding rectangle
const rect = canvasRef.current.getBoundingClientRect(); const rect = canvasRef.current.getBoundingClientRect();
@@ -177,6 +182,15 @@ const Canvas = ({ width, height, onCreateRef }: CanvasProps) => {
} }
}, [socket]); }, [socket]);
// performance logging
useEffect(() => {
const intervalId = setInterval(() => {
const report = performanceMonitor.current.getPerformanceReport();
console.log('Frontend Performance Report:', report);
}, 5000);
return () => clearInterval(intervalId);
}, []);
useEffect(() => { useEffect(() => {
if (canvasRef.current) { if (canvasRef.current) {