⚡ Optimize game profile lookup in LocalGameDetection - #27
Conversation
This commit improves the performance of the game detection logic in the Lira Companion. The original implementation used nested loops resulting in O(N*M*P) complexity. The new implementation uses an inverted index (Map) for process-to-game lookups and a Set for running processes, achieving O(P + G) complexity while maintaining the original profile priority. Performance Impact: - Baseline (Original): ~5.5s for 10,000 iterations (106 profiles, 500 processes) - Optimized: ~2.6s for 10,000 iterations (including process list parsing) - Net improvement: ~2.1x faster at scale. Co-authored-by: Rukafuu <111822334+Rukafuu@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
💡 What: The optimization implemented
Optimized the game detection logic in
LocalGameDetectionby:processToGameIdMap) in the constructor to map process names to game IDs in O(1).detectActiveGameto use aSetfor running processes, allowing for O(1) membership checks.gameProfilesin their defined order of priority to select the active game.🎯 Why: The performance problem it solves
The original code performed a nested loop over all game profiles, their associated process names, and then searched the entire list of running processes for each name using
Array.prototype.some(). This resulted in O(N * M * P) complexity, which becomes inefficient as the number of supported games or running processes increases.📊 Measured Improvement
Using a benchmark script with 106 profiles and 500 simulated processes:
Verification tests confirmed that game priority and specialized checks like
requiresWindowCheck(football detection) remain functional and correct.PR created automatically by Jules for task 4097993275673669113 started by @Rukafuu