0.28.6.10 - Performance Improvements and OpenXInput Support
Dear Patreons, thank you as always for your continued support, testing, and feedback.
A large part of this build is about removing overhead in places that constantly run in the background, while also modernizing how we identify and manage XInput controllers thanks to OpenXInput. While the Windows update that broke our previous UserIndex path forced our hand a bit, the new implementation is not only more resilient, it is also a meaningful step forward in controller compatibility.
Highlights
Performance improvements: This update includes a broad round of optimizations aimed at reducing CPU usage and memory footprint in several subsystems, including process and window management, LibreHardware, SDL event waiting, and power management logic.
OpenXInput implementation: Recent Windows changes broke the previous method we relied on for associating an XInput controller with its UserIndex. HC now implements OpenXInput. This replaces our previous approach for retrieving XInput controller UserIndex through the device path and gives us a much more reliable foundation beyond Xbox 360-based controllers, extending support to Xbox One-based controllers as well.
What Changed
Performance
Reduced CPU and memory footprint from process and window management.
Reduced CPU and memory footprint from LibreHardware.
Reduced CPU footprint from SDL.WaitEventTimeout().
Reduced CPU footprint in PerformanceManager, with RequestCoreParkingMode now checking current values before reapplying them.
Reduced overall CPU and memory footprint across the application.
Controller / Input
Implemented OpenXInput (Xinput1_4.dll) to support Windows 11 KB5086672 update while improving the UserIndex reading logic.
Implemented ReleaseNumber reading, which may help manage firmware-related HID index differences in the future.
Improved the overall Inputs manager robustness and implemented per-device, KeyboardChord-based flush intervals.
Improved the overall Controller manager robustness.
Fixed an issue causing a race condition with XInput controller IsGone / IsBusy.
Fixed SDL GetPathFromUserIndex() logic.
UI / UX
Reworked the Controller Page architecture around a cleaner MVVM structure, improving maintainability and helping make future controller-related UI changes easier to build and manage.
Improved threading and observable collection management.
Fixed an issue preventing UI navigation when focus was on a disabled, hidden, or collapsed control.
Fixed a controller lock race condition that could freeze the UI.
Device
Legion Go: updated factory default fan values.
Legion Go: reduced keyboard hook flush interval from 150ms to 10ms.
Library / Dependencies
Updated library components:
PixiEditor.ColorPicker
Sentry
WindowsAPICodePack
Comments (4)
This version does not work on Steam Deck LCD. Does not recognize the physical controller as it states: "No physical controller detected You may want to plug a physical controller or trigger to rescan"
Super weird. I have and OLED model and will double check.
Dolphin emulator won't close when running this version of Handheld Companion
I'll try and reproduce.
