MCPcopy Create free account
hub / github.com/esengine/esengine / ProfilerService

Class ProfilerService

packages/editor-app/src/services/ProfilerService.ts:35–546  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33type AdvancedProfilerDataListener = (data: AdvancedProfilerDataPayload) => void;
34
35export class ProfilerService implements IProfilerService {
36 private ws: WebSocket | null = null;
37 private isServerRunning = false;
38 private wsPort: number;
39 private listeners: Set<ProfilerDataListener> = new Set();
40 private advancedListeners: Set<AdvancedProfilerDataListener> = new Set();
41 private currentData: ProfilerData | null = null;
42 private lastRawData: AdvancedProfilerDataPayload | null = null;
43 private checkServerInterval: NodeJS.Timeout | null = null;
44 private reconnectTimeout: NodeJS.Timeout | null = null;
45 private clientIdMap: Map<string, string> = new Map();
46 private autoStart: boolean;
47
48 constructor() {
49 const settings = SettingsService.getInstance();
50 this.wsPort = settings.get('profiler.port', 8080);
51 this.autoStart = settings.get('profiler.autoStart', true);
52
53 this.startServerCheck();
54 this.listenToSettingsChanges();
55
56 // 如果设置了自动启动,则启动服务器
57 if (this.autoStart) {
58 this.manualStartServer();
59 }
60 }
61
62 private listenToSettingsChanges(): void {
63 window.addEventListener('settings:changed', ((event: CustomEvent) => {
64 const newPort = event.detail['profiler.port'];
65 if (newPort !== undefined && Number(newPort) !== this.wsPort) {
66 console.log(`[ProfilerService] Port changed from ${this.wsPort} to ${newPort}`);
67 this.wsPort = Number(newPort);
68 this.reconnectWithNewPort();
69 }
70 }) as EventListener);
71 }
72
73 private async reconnectWithNewPort(): Promise<void> {
74 this.disconnect();
75
76 if (this.checkServerInterval) {
77 clearInterval(this.checkServerInterval);
78 this.checkServerInterval = null;
79 }
80
81 try {
82 await invoke('stop_profiler_server');
83 this.isServerRunning = false;
84 } catch (error) {
85 console.error('[ProfilerService] Failed to stop server:', error);
86 }
87
88 this.startServerCheck();
89 }
90
91 public subscribe(listener: ProfilerDataListener): () => void {
92 this.listeners.add(listener);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected