""" Cursor Performance Test Script Tests system resources and Cursor IDE performance on Windows desktop environment. """ import psutil import time import json import sys from datetime import datetime from pathlib import Path def get_system_resources(): """Get current system resource usage""" cpu_percent = psutil.cpu_percent(interval=1) cpu_count = psutil.cpu_count() cpu_freq = psutil.cpu_freq() memory = psutil.virtual_memory() disk = psutil.disk_usage('C:\\') return { 'cpu': { 'usage_percent': cpu_percent, 'cores': cpu_count, 'frequency_mhz': cpu_freq.current if cpu_freq else None, 'status': 'healthy' if cpu_percent < 80 else 'warning' if cpu_percent < 95 else 'critical' }, 'memory': { 'total_gb': round(memory.total / (1024**3), 2), 'used_gb': round(memory.used / (1024**3), 2), 'available_gb': round(memory.available / (1024**3), 2), 'usage_percent': memory.percent, 'status': 'healthy' if memory.percent < 80 else 'warning' if memory.percent < 95 else 'critical' }, 'disk': { 'total_gb': round(disk.total / (1024**3), 2), 'used_gb': round(disk.used / (1024**3), 2), 'free_gb': round(disk.free / (1024**3), 2), 'usage_percent': disk.percent, 'status': 'healthy' if disk.percent < 80 else 'warning' if disk.percent < 95 else 'critical' } } def get_cursor_processes(): """Get all Cursor-related processes""" cursor_processes = [] total_cpu = 0 total_memory = 0 for proc in psutil.process_iter(['pid', 'name', 'exe', 'cpu_percent', 'memory_info', 'create_time', 'num_threads']): try: proc_info = proc.info name = proc_info['name'].lower() # Check if it's a Cursor process if 'cursor' in name or (proc_info.get('exe') and 'cursor' in proc_info['exe'].lower()): cpu = proc_info.get('cpu_percent', 0) or 0 memory = proc_info.get('memory_info', None) memory_mb = (memory.rss / (1024**2)) if memory else 0 # Get more detailed info try: proc_obj = psutil.Process(proc_info['pid']) num_threads = proc_obj.num_threads() open_files = len(proc_obj.open_files()) connections = len(proc_obj.connections()) except: num_threads = proc_info.get('num_threads', 0) open_files = 0 connections = 0 process_data = { 'pid': proc_info['pid'], 'name': proc_info['name'], 'cpu_percent': round(cpu, 2), 'memory_mb': round(memory_mb, 2), 'memory_gb': round(memory_mb / 1024, 2), 'threads': num_threads, 'open_files': open_files, 'connections': connections, 'uptime_seconds': round(time.time() - proc_info.get('create_time', time.time()), 2) } cursor_processes.append(process_data) total_cpu += cpu total_memory += memory_mb except (psutil.NoSuchProcess, psutil.AccessDenied): continue return { 'processes': cursor_processes, 'total_count': len(cursor_processes), 'total_cpu_percent': round(total_cpu, 2), 'total_memory_mb': round(total_memory, 2), 'total_memory_gb': round(total_memory / 1024, 2) } def get_top_processes(limit=10): """Get top resource-consuming processes""" processes = [] for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']): try: proc_info = proc.info cpu = proc_info.get('cpu_percent', 0) or 0 memory = proc_info.get('memory_info', None) memory_mb = (memory.rss / (1024**2)) if memory else 0 processes.append({ 'pid': proc_info['pid'], 'name': proc_info['name'], 'cpu_percent': round(cpu, 2), 'memory_mb': round(memory_mb, 2) }) except (psutil.NoSuchProcess, psutil.AccessDenied): continue # Sort by memory usage processes.sort(key=lambda x: x['memory_mb'], reverse=True) return processes[:limit] def run_performance_test(): """Run comprehensive performance test""" print("=" * 70) print("CURSOR PERFORMANCE TEST") print("=" * 70) print(f"Timestamp: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") results = { 'timestamp': datetime.now().isoformat(), 'system': {}, 'cursor': {}, 'top_processes': [] } # System Resources print("Checking System Resources...") results['system'] = get_system_resources() print(f"\nCPU: {results['system']['cpu']['usage_percent']}% ({results['system']['cpu']['cores']} cores) - {results['system']['cpu']['status']}") print(f"Memory: {results['system']['memory']['used_gb']}GB / {results['system']['memory']['total_gb']}GB ({results['system']['memory']['usage_percent']}%) - {results['system']['memory']['status']}") print(f"Disk: {results['system']['disk']['used_gb']}GB / {results['system']['disk']['total_gb']}GB ({results['system']['disk']['usage_percent']}%) - {results['system']['disk']['status']}") # Cursor Processes print("\n" + "-" * 70) print("Checking Cursor Processes...") results['cursor'] = get_cursor_processes() if results['cursor']['total_count'] > 0: print(f"\nFound {results['cursor']['total_count']} Cursor process(es):") print(f"Total CPU Usage: {results['cursor']['total_cpu_percent']}%") print(f"Total Memory Usage: {results['cursor']['total_memory_gb']}GB ({results['cursor']['total_memory_mb']}MB)") print("\nIndividual Processes:") for proc in results['cursor']['processes']: print(f" PID {proc['pid']:6d} | {proc['name']:20s} | CPU: {proc['cpu_percent']:6.2f}% | Memory: {proc['memory_mb']:8.2f}MB | Threads: {proc['threads']}") else: print("\nNo Cursor processes found. Is Cursor running?") # Top Processes print("\n" + "-" * 70) print("Top 10 Processes by Memory Usage:") results['top_processes'] = get_top_processes(10) for i, proc in enumerate(results['top_processes'], 1): print(f" {i:2d}. {proc['name']:30s} | CPU: {proc['cpu_percent']:6.2f}% | Memory: {proc['memory_mb']:8.2f}MB") # Performance Assessment print("\n" + "=" * 70) print("PERFORMANCE ASSESSMENT") print("=" * 70) issues = [] recommendations = [] # Check system resources if results['system']['cpu']['usage_percent'] > 80: issues.append(f"High CPU usage: {results['system']['cpu']['usage_percent']}%") recommendations.append("Close unnecessary applications to free up CPU resources") if results['system']['memory']['usage_percent'] > 80: issues.append(f"High memory usage: {results['system']['memory']['usage_percent']}%") recommendations.append("Close unused applications or consider adding more RAM") if results['system']['disk']['usage_percent'] > 80: issues.append(f"Low disk space: {results['system']['disk']['usage_percent']}% used") recommendations.append("Free up disk space by removing unnecessary files") # Check Cursor-specific issues if results['cursor']['total_count'] > 0: if results['cursor']['total_memory_gb'] > 2: issues.append(f"Cursor using high memory: {results['cursor']['total_memory_gb']}GB") recommendations.append("Consider restarting Cursor or closing unused tabs/files") if results['cursor']['total_cpu_percent'] > 50: issues.append(f"Cursor using high CPU: {results['cursor']['total_cpu_percent']}%") recommendations.append("Cursor may be indexing or processing. Wait for it to complete.") if issues: print("\n⚠️ ISSUES DETECTED:") for issue in issues: print(f" • {issue}") else: print("\n✅ No major performance issues detected") if recommendations: print("\n💡 RECOMMENDATIONS:") for rec in recommendations: print(f" • {rec}") # Save results to file output_file = Path("cursor_performance_report.json") with open(output_file, 'w') as f: json.dump(results, f, indent=2) print(f"\n📄 Detailed report saved to: {output_file}") return results if __name__ == "__main__": try: run_performance_test() except KeyboardInterrupt: print("\n\nTest interrupted by user") sys.exit(1) except Exception as e: print(f"\n\nError running test: {str(e)}") import traceback traceback.print_exc() sys.exit(1)