CmdPal: Add adaptive parallel fallback processing and consistent updates (#42273)
## Summary of the Pull Request This PR replaces sequential fallback processing with an adaptive parallel dispatch model and isolates fallback work onto a dedicated thread pool, preventing misbehaving extensions from starving the .NET ThreadPool on blocked synchronous COM RPC call. The other major change is allowing MainListPage to allow take control over the debounce of search updates directly, reducing latency and improving smoothness of the search. - Adds `DedicatedThreadPool` — an elastic pool of background threads (min 2, max 32) that expand on demand when all threads are blocked in COM calls and shrink after 30s idle. - Extracts all fallback dispatch machinery (adaptive workers, per-command inflight tracking, pending-retry slots) from MainListPage into a standalone FallbackUpdateManager. - Prevents one fallback from monopolizing all threads by capping concurrent in-flight calls per fallback to 4. - Starts with low degree of parallelism (2) and gently scales up to half of CPU cores per batch. If a fallback takes more than 200ms, another worker is spawned so remaining commands aren't blocked. - Adds `ThrottledDebouncedAction` to coalesce rapid `RaiseItemsChanged` calls from fallback completions and user input (100ms for external events, 50ms adjusted for keystrokes), replacing unbatched direct calls. - Bypasses the UI-layer debounce timer for the main list page since it now handles its own throttling, eliminating double-debounce latency. - Introduces diagnostics for fallbacks and timing hidden behind feature flags. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #42286 - [x] Related to: #44407 - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed
J
Jiří Polášek committed
f0134e444832c680489f833a70551f2114159a8a
Parent: f651d1a
Committed by GitHub <[email protected]>
on 3/5/2026, 8:34:24 PM