UNPKG

@ordojs/dev-tools

Version:

Advanced developer tools for OrdoJS with component inspector, AST explorer, and performance profiling

1 lines 13.3 kB
{"version":3,"sources":["../../src/profiler/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @fileoverview OrdoJS Dev Tools - Performance Profiler\n *\n * Performance profiler for analyzing and optimizing application performance.\n */\n\nimport { EventEmitter } from 'events';\nimport type { PerformanceMeasurement, PerformanceProfile } from '../types/index.js';\n\n/**\n * Performance profiler for analyzing application performance\n */\nexport class PerformanceProfiler extends EventEmitter {\n private profiles: Map<string, PerformanceProfile>;\n private activeProfiles: Map<string, PerformanceProfile>;\n private measurements: Map<string, PerformanceMeasurement[]>;\n private isRunning: boolean;\n private port: number;\n\n /**\n * Create a new PerformanceProfiler instance\n *\n * @param port - WebSocket port for profiler\n */\n constructor(port: number = 24680) {\n super();\n\n this.profiles = new Map();\n this.activeProfiles = new Map();\n this.measurements = new Map();\n this.isRunning = false;\n this.port = port;\n }\n\n /**\n * Start the performance profiler\n */\n async start(): Promise<void> {\n if (this.isRunning) {\n console.warn('Performance profiler is already running');\n return;\n }\n\n try {\n // Start WebSocket server for profiler communication\n await this.startWebSocketServer();\n\n this.isRunning = true;\n console.log(`Performance profiler started on port ${this.port}`);\n\n this.emit('started');\n } catch (error) {\n console.error('Failed to start performance profiler:', error);\n this.emit('error', error);\n throw error;\n }\n }\n\n /**\n * Stop the performance profiler\n */\n async stop(): Promise<void> {\n if (!this.isRunning) {\n console.warn('Performance profiler is not running');\n return;\n }\n\n try {\n // Stop all active profiles\n for (const [name, profile] of this.activeProfiles) {\n await this.stopProfile(name);\n }\n\n // Clean up WebSocket server\n await this.stopWebSocketServer();\n\n this.isRunning = false;\n console.log('Performance profiler stopped');\n\n this.emit('stopped');\n } catch (error) {\n console.error('Failed to stop performance profiler:', error);\n this.emit('error', error);\n throw error;\n }\n }\n\n /**\n * Start a performance profile\n *\n * @param name - Profile name\n * @param metadata - Profile metadata\n * @returns Profile instance\n */\n startProfile(name: string, metadata: Record<string, any> = {}): PerformanceProfile {\n if (this.activeProfiles.has(name)) {\n throw new Error(`Profile '${name}' is already active`);\n }\n\n const profile: PerformanceProfile = {\n name,\n startTime: performance.now(),\n endTime: 0,\n duration: 0,\n measurements: [],\n metadata\n };\n\n this.activeProfiles.set(name, profile);\n this.emit('profileStarted', profile);\n\n return profile;\n }\n\n /**\n * Stop a performance profile\n *\n * @param name - Profile name\n * @returns Completed profile\n */\n stopProfile(name: string): PerformanceProfile {\n const profile = this.activeProfiles.get(name);\n if (!profile) {\n throw new Error(`Profile '${name}' is not active`);\n }\n\n profile.endTime = performance.now();\n profile.duration = profile.endTime - profile.startTime;\n\n this.activeProfiles.delete(name);\n this.profiles.set(name, profile);\n\n this.emit('profileStopped', profile);\n\n return profile;\n }\n\n /**\n * Add a performance measurement\n *\n * @param profileName - Profile name\n * @param measurementName - Measurement name\n * @param category - Measurement category\n * @param metadata - Measurement metadata\n * @returns Measurement instance\n */\n addMeasurement(\n profileName: string,\n measurementName: string,\n category: string = 'general',\n metadata: Record<string, any> = {}\n ): PerformanceMeasurement {\n const profile = this.activeProfiles.get(profileName);\n if (!profile) {\n throw new Error(`Profile '${profileName}' is not active`);\n }\n\n const measurement: PerformanceMeasurement = {\n name: measurementName,\n startTime: performance.now(),\n endTime: 0,\n duration: 0,\n category,\n metadata\n };\n\n if (!this.measurements.has(profileName)) {\n this.measurements.set(profileName, []);\n }\n\n this.measurements.get(profileName)!.push(measurement);\n profile.measurements.push(measurement);\n\n this.emit('measurementAdded', measurement);\n\n return measurement;\n }\n\n /**\n * End a performance measurement\n *\n * @param profileName - Profile name\n * @param measurementName - Measurement name\n * @returns Completed measurement\n */\n endMeasurement(profileName: string, measurementName: string): PerformanceMeasurement {\n const profile = this.activeProfiles.get(profileName);\n if (!profile) {\n throw new Error(`Profile '${profileName}' is not active`);\n }\n\n const measurements = this.measurements.get(profileName);\n if (!measurements) {\n throw new Error(`No measurements found for profile '${profileName}'`);\n }\n\n const measurement = measurements.find(m => m.name === measurementName);\n if (!measurement) {\n throw new Error(`Measurement '${measurementName}' not found in profile '${profileName}'`);\n }\n\n measurement.endTime = performance.now();\n measurement.duration = measurement.endTime - measurement.startTime;\n\n this.emit('measurementEnded', measurement);\n\n return measurement;\n }\n\n /**\n * Get a profile by name\n *\n * @param name - Profile name\n * @returns Profile or undefined\n */\n getProfile(name: string): PerformanceProfile | undefined {\n return this.profiles.get(name) || this.activeProfiles.get(name);\n }\n\n /**\n * Get all profiles\n *\n * @returns Array of all profiles\n */\n getAllProfiles(): PerformanceProfile[] {\n return Array.from(this.profiles.values());\n }\n\n /**\n * Get active profiles\n *\n * @returns Array of active profiles\n */\n getActiveProfiles(): PerformanceProfile[] {\n return Array.from(this.activeProfiles.values());\n }\n\n /**\n * Clear all profiles\n */\n clearProfiles(): void {\n this.profiles.clear();\n this.activeProfiles.clear();\n this.measurements.clear();\n this.emit('profilesCleared');\n }\n\n /**\n * Get profiler statistics\n *\n * @returns Profiler statistics\n */\n getStats(): {\n totalProfiles: number;\n activeProfiles: number;\n totalMeasurements: number;\n averageProfileDuration: number;\n } {\n const allProfiles = Array.from(this.profiles.values());\n const totalMeasurements = allProfiles.reduce((sum, profile) => sum + profile.measurements.length, 0);\n const averageProfileDuration = allProfiles.reduce((sum, profile) => sum + profile.duration, 0) / allProfiles.length || 0;\n\n return {\n totalProfiles: allProfiles.length,\n activeProfiles: this.activeProfiles.size,\n totalMeasurements,\n averageProfileDuration\n };\n }\n\n /**\n * Start WebSocket server for profiler communication\n */\n private async startWebSocketServer(): Promise<void> {\n // Implementation for WebSocket server\n // This would handle communication with the browser extension\n console.log('Starting WebSocket server for performance profiler...');\n }\n\n /**\n * Stop WebSocket server\n */\n private async stopWebSocketServer(): Promise<void> {\n // Implementation for stopping WebSocket server\n console.log('Stopping WebSocket server for performance profiler...');\n }\n}\n"]}