Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Installer/Installer.iss
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#define MyAppPublisher "ThreadPilot"
#define MyAppURL "https://github.com/"
#define MyAppExeName "ThreadPilot.exe"
#define MyAppVersion "1.7.8-beta.2"
#define MyAppVersion "1.7.8"

#ifndef MyWizardStyle
#define MyWizardStyle "modern dynamic windows11"
Expand Down
2 changes: 1 addition & 1 deletion Installer/setup.iss
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#endif

#ifndef MyAppVersion
#define MyAppVersion "1.7.8-beta.2"
#define MyAppVersion "1.7.8"
#endif

#ifndef MyAppSourceDir
Expand Down
14 changes: 6 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

<a href="assets/screenshots/overview-themes.png"><img width="1600" height="960" alt="ThreadPilot 1.7.8-beta.1: the current Processes interface in dark and light themes" src="assets/screenshots/overview-themes.png"></a>

<p align="center"><sub>Real dark/light screenshots of the preview interface. <a href="assets/screenshots/processes-dark.png">View dark</a> · <a href="assets/screenshots/processes-light.png">View light</a></sub></p>
<p align="center"><sub>Real dark/light screenshots of the interface. <a href="assets/screenshots/processes-dark.png">View dark</a> · <a href="assets/screenshots/processes-light.png">View light</a></sub></p>

## What is ThreadPilot?

Expand All @@ -42,7 +42,7 @@ It is designed as an open-source alternative for power users who need Process La
- Intel hybrid CPU handling through Windows topology and `EfficiencyClass`, not hardcoded SKU lists.
- Reusable CPU mask presets and custom core selections for process and rule workflows.
- Three-state efficiency mode / EcoQoS for running processes and persistent rules, independently of CPU priority.
- **Pre-release only:** opt-in Game Boost with topology-aware game/background CPU Sets, optional priority and restoration. Real dual-CCD Ryzen/X3D and supported Intel hybrid validation is still pending.
- Opt-in Game Boost (off by default) with topology-aware game/background CPU Sets, optional priority and restoration. Real dual-CCD Ryzen/X3D and supported Intel hybrid validation is still pending.
- CPU priority controls with guardrails: High priority warning and Realtime priority blocked.
- Process memory priority support.
- Persistent process rules with explicit Apply now and Save as rule flows.
Expand Down Expand Up @@ -89,9 +89,7 @@ choco upgrade threadpilot
### Download from GitHub Releases

[![Download Latest Stable](https://img.shields.io/badge/Download-Latest%20Stable-2ea44f?logo=github)](https://github.com/PrimeBuild-pc/ThreadPilot/releases/latest)
[![Download Pre-release — Game Boost Preview](https://img.shields.io/badge/Download-Pre--release%20%28Game%20Boost%29-f59e0b?logo=github)](https://github.com/PrimeBuild-pc/ThreadPilot/releases/tag/v1.7.8-beta.2)

**Stable v1.7.7 does not include Game Boost.** The **v1.7.8-beta.2 pre-release** includes it for volunteers and early adopters; see its [test steps and issue-reporting checklist](docs/releases/v1.7.8-beta.2.md). Preview downloads are manual and do not replace the stable update channel.
**Stable v1.7.8 includes Game Boost** (off by default). It is not yet validated on real dual-CCD Ryzen and Intel hybrid CPUs; if you have one, see the [test steps and issue-reporting checklist](docs/releases/v1.7.8.md#help-us-test-dual-ccd-ryzen-and-intel-hybrid).

Both channels use the same application/settings location. Export a configuration backup before switching; they are not separate side-by-side installations.

Expand All @@ -111,7 +109,7 @@ Compare the result with `SHA256SUMS.txt` from the same release.

## 🖼️ Screenshots

Captured from the official **v1.7.8-beta.1** installer in a Windows 11 test VM, using real UI and a sample Notepad rule. **Game Boost is preview-only, not part of stable v1.7.7.** These are interface examples, not performance benchmarks. Click any image for full resolution.
Captured from the official **v1.7.8-beta.1** installer in a Windows 11 test VM, using real UI and a sample Notepad rule. These are interface examples, not performance benchmarks. Click any image for full resolution.

<table>
<tr>
Expand All @@ -123,8 +121,8 @@ Captured from the official **v1.7.8-beta.1** installer in a Windows 11 test VM,
<td><a href="assets/screenshots/rules-dark.png"><img src="assets/screenshots/rules-dark.png" alt="Process rules in dark theme: a saved Notepad rule selected in the editor" width="800"></a><br><strong>Process rules · Dark</strong><br>Saved settings and the rule editor.</td>
</tr>
<tr>
<td><a href="assets/screenshots/game-boost-dark.png"><img src="assets/screenshots/game-boost-dark.png" alt="Tweaks in dark theme with the preview-only Game Boost card, shown off by default" width="800"></a><br><strong>Game Boost overview · Dark · Preview only</strong><br>Opt-in controls alongside Windows tweaks.</td>
<td><a href="assets/screenshots/game-boost-light.png"><img src="assets/screenshots/game-boost-light.png" alt="Game Boost in light theme, enabled in the test VM with game/background app lists expanded and unsupported CPU fallback shown" width="800"></a><br><strong>Game Boost configuration · Light · Preview only</strong><br>Game lists, exclusions and selected background apps.</td>
<td><a href="assets/screenshots/game-boost-dark.png"><img src="assets/screenshots/game-boost-dark.png" alt="Tweaks in dark theme with the Game Boost card, shown off by default" width="800"></a><br><strong>Game Boost overview · Dark</strong><br>Opt-in controls alongside Windows tweaks.</td>
<td><a href="assets/screenshots/game-boost-light.png"><img src="assets/screenshots/game-boost-light.png" alt="Game Boost in light theme, enabled in the test VM with game/background app lists expanded and unsupported CPU fallback shown" width="800"></a><br><strong>Game Boost configuration · Light</strong><br>Game lists, exclusions and selected background apps.</td>
</tr>
<tr>
<td><a href="assets/screenshots/activity-light.png"><img src="assets/screenshots/activity-light.png" alt="Activity in light theme: real settings and saved-rule events with filters and export" width="800"></a><br><strong>Activity · Light</strong><br>Changes, results, filters and export.</td>
Expand Down
4 changes: 2 additions & 2 deletions Tests/ThreadPilot.Core.Tests/PackagingMetadataTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace ThreadPilot.Core.Tests

public sealed partial class PackagingMetadataTests
{
private const string ReleaseVersion = "1.7.8-beta.2";
private const string ReleaseVersion = "1.7.8";
private const string ReleaseAssemblyVersion = "1.7.8.0";

[Fact]
Expand Down Expand Up @@ -160,7 +160,7 @@ private static string FindRepositoryRoot()
throw new InvalidOperationException("Repository root could not be located.");
}

[GeneratedRegex("#define MyAppVersion \"1\\.7\\.8-beta\\.2\"", RegexOptions.CultureInvariant)]
[GeneratedRegex("#define MyAppVersion \"1\\.7\\.8\"", RegexOptions.CultureInvariant)]
private static partial Regex MyAppVersionRegex();
}
}
4 changes: 2 additions & 2 deletions ThreadPilot.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
copies text, and an elevated process should not deserialize data another program can put there. -->
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
<NoWarn>CS1998;CS0067;CS0414;WFAC010;IL3000;MVVMTK0034</NoWarn>
<Version>1.7.8-beta.2</Version>
<Version>1.7.8</Version>
<AssemblyVersion>1.7.8.0</AssemblyVersion>
<FileVersion>1.7.8.0</FileVersion>
<InformationalVersion>1.7.8-beta.2</InformationalVersion>
<InformationalVersion>1.7.8</InformationalVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion build/build-installer.ps1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
param(
[string]$Version = "1.7.8-beta.2",
[string]$Version = "1.7.8",
[string]$Configuration = "Release",
[switch]$SkipPublish
)
Expand Down
2 changes: 1 addition & 1 deletion build/build-release.ps1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
param(
[string]$Version = "1.7.8-beta.2",
[string]$Version = "1.7.8",
[string]$Configuration = "Release",
[string]$Runtime = "win-x64"
)
Expand Down
2 changes: 1 addition & 1 deletion build/package-release-zips.ps1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
param(
[string]$Version = "1.7.8-beta.2"
[string]$Version = "1.7.8"
)

$ErrorActionPreference = "Stop"
Expand Down
4 changes: 2 additions & 2 deletions chocolatey/threadpilot.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>threadpilot</id>
<version>1.7.8-beta.2</version>
<version>1.7.8</version>
<title>ThreadPilot</title>
<authors>Prime Build</authors>
<projectUrl>https://github.com/PrimeBuild-pc/ThreadPilot</projectUrl>
Expand All @@ -15,7 +15,7 @@
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Advanced Windows process and power plan manager with rules automation and performance controls.</description>
<summary>ThreadPilot process and power plan manager.</summary>
<releaseNotes>https://github.com/PrimeBuild-pc/ThreadPilot/releases/tag/v1.7.8-beta.2</releaseNotes>
<releaseNotes>https://github.com/PrimeBuild-pc/ThreadPilot/releases/tag/v1.7.8</releaseNotes>
<tags>threadpilot process powerplan performance windows</tags>
</metadata>
<files>
Expand Down
9 changes: 9 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

All notable changes to this project are documented in this file.

## v1.7.8 - Game Boost, security hardening and a much lighter app

- Stable release with everything from v1.7.8-beta.1 and v1.7.8-beta.2.
- Game Boost (off by default): game/background CPU Sets, high QoS for the game, EcoQoS for listed background apps in Isolation, dynamic release under heavy load, a minimal-rights game handle and restoration on exit.
- Security and performance audit: window-open CPU ~25–30% → ~2.3% of a core, near-zero in the tray; elevated tasks only for Program Files installs, no native DLLs extracted to %TEMP%, updates require a trusted SHA256SUMS.txt.
- Installer always installs in Program Files and moves old installs without deleting settings; portable copies can install themselves for autostart.
- Game Boost is not yet validated on real dual-CCD Ryzen/X3D and Intel hybrid CPUs. No FPS improvement is claimed.
- [Full release notes](releases/v1.7.8.md).

## v1.7.8-beta.1 - Experimental Game Boost preview

- Includes stable v1.7.7 plus all local Game Boost work: game/background CPU Sets, optional priority, rule precedence, restoration, crash journal and Activity diagnostics.
Expand Down
6 changes: 6 additions & 0 deletions docs/release/RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## ThreadPilot v1.7.8

Stable release with everything from beta.1 and beta.2: Game Boost (off by default), a full security and performance audit (window-open CPU ~25–30% → ~2.3% of a core, near-zero in the tray), an installer that always installs in Program Files, and portable copies that can install themselves for autostart. Game Boost is not yet validated on real dual-CCD Ryzen and Intel hybrid CPUs; testers wanted.

[Full notes, performance table and tester checklist](../releases/v1.7.8.md). Artifacts unsigned; verify SHA256 checksums.

## ThreadPilot v1.7.8-beta.2

Pre-release on top of v1.7.8-beta.1: a full security and performance audit (window-open CPU ~25–30% → ~2.3% of a core, near-zero in the tray), Game Boost orchestration with a minimal-rights game handle, an installer that always installs in Program Files, and portable copies that can install themselves for autostart. Dual-CCD Ryzen and Intel hybrid testers wanted.
Expand Down
83 changes: 83 additions & 0 deletions docs/releases/v1.7.8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# ThreadPilot v1.7.8 — Game Boost, security hardening and a much lighter app

Stable release. It contains everything from the v1.7.8-beta.1 and v1.7.8-beta.2 previews: **Game Boost** (off by default), a full security and performance audit, and a new installer. Upgrading from v1.7.7 is recommended: the app uses about a tenth of the CPU with the window open and almost none in the tray, and several security issues are fixed.

> **Hardware validation still pending for Game Boost on dual-CCD Ryzen and Intel hybrid CPUs.** Game Boost's core split has been tested only with unit tests and a simulated topology on those CPUs, not on real hardware. It is off by default and everything else in this release does not depend on it. If you have one of these CPUs, see [Help us test](#help-us-test-dual-ccd-ryzen-and-intel-hybrid) below. No FPS improvement is claimed.

## New since v1.7.7

- **Game Boost (off by default):** topology-aware CPU Sets for the game and explicitly listed background apps, optional Above Normal priority, high QoS for the game, EcoQoS for listed background apps in Isolation, respect for your rules and manual changes, restoration when the game exits or Game Boost is turned off, and a crash-recovery journal. Open **Tweaks → Game Boost** to try it.
- **Activity diagnostics:** session start/end, what was applied or left unchanged and why, and restoration results.
- **CPU topology fixes:** Intel P-cores are identified by the highest Windows EfficiencyClass; AMD CCD groups use real L3 groups and sizes, including 6+6 layouts.

## Performance: before and after

Measured on the Release build, Ryzen 7 5800X3D, Processes page open, ~200 running processes. "% of a core" = CPU time of ThreadPilot divided by wall time.

| | before | after |
|---|---|---|
| window open, idle | ~25–30% of a core | ~2.3% of a core |
| minimized to tray | ~2% of a core | 0 ms of CPU in 90 s (0–0.03%) |
| wake-ups in tray (context switches/s) | ~275 | 0–10 |
| startup CPU (first 15–20 s) | ~8.4–9.9 s | ~6.0 s |
| main window appears | ~1.3 s | ~1.3 s |
| during a game, Game Boost in Isolation (tray) | ~0.42–0.62% of a core | ~0.10–0.15% of a core |
| restore after the game closes | ~1.4–3 s | ~0.05–0.1 s |
| private memory, steady state | ~225 MB | ~220–230 MB (unchanged: ~145 MB is WPF and native drivers) |

Where it came from: the startup spinner no longer animates forever behind the hidden overlay, the process list is updated in place instead of rebuilt every 5 s, startup does less work and no fixed waits, dynamic PGO is off (it recompiled hot code in the background for seconds after launch), and Game Boost only runs a timer while it is on.

## Security

- **Elevated tasks only for Program Files installs.** The no-UAC scheduled tasks are registered only when ThreadPilot runs from Program Files, where a normal program cannot replace the exe. Tasks that point anywhere else are deleted at every elevated start.
- **No native DLLs extracted to %TEMP%.** The WPF native libraries now ship next to `ThreadPilot.exe` instead of being unpacked into a user-writable folder and loaded by the admin process.
- **Admin-only temp folders** for the scheduled-task definition and the downloaded update installer (random name under `%SystemRoot%\Temp`, Administrators and SYSTEM only). Leftover update folders are cleaned at startup.
- **Updates require a trusted `SHA256SUMS.txt`.** The updater refuses a release whose checksum file is missing or not hosted on GitHub, before downloading anything.
- **Saved rules respect protected processes** for every action (CPU Sets, memory/I/O priority, EcoQoS), not only affinity. Driver-tweak restores accept only the tweak's own on/off values.
- **Installer hardening:** when it moves an old install out of another folder it deletes nothing if that folder (or any folder above it) is a junction or symbolic link.
- Smaller fixes: `explorer.exe` launched by full path, DLL search limited to System32, BinaryFormatter disabled, registry CPU priority now writes the correct `PerfOptions` key.
- Release pipeline: GitHub Actions pinned to commit SHAs, write access only for the release job, publishing behind a protected environment with a required reviewer.

## Game Boost

- **Orchestration (beyond CPU Sets):** the game gets high QoS (Windows does not throttle it when it is not in front), on any CPU. In **Isolation**, listed background apps get EcoQoS (on Intel hybrid Windows moves them to E-cores by itself). If the game uses ≥ 80% of its confined cores for ~12 s, its CPU Set is lifted and Windows may use every core; after ~60 s of low load it is confined again (at most twice per session). User rules and an app's own QoS choice always win.
- **The game handle:** ThreadPilot now keeps the game open for the session with a minimal-rights handle (`SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION`, not full access, which is what anti-cheats look for). The session ends the moment the game exits, so restoring takes ~0.05–0.1 s instead of up to 3 s, and a reused process ID can never be mistaken for the game. If a game refuses even that handle, ThreadPilot falls back to polling.
- The 15-second background rescan only builds process details for names in your lists.
- Fixed: changing a Game Boost setting during a session no longer drops the game's Above Normal priority.
- Fixed: a game that gets the process ID of an app that just closed is detected at once, instead of after up to 30 s.
- Fixed: EcoQoS changes no longer wipe other power-throttling flags a process set for itself (e.g. timer resolution).

## Installer and portable

- **The installer always installs in Program Files.** It no longer asks for a folder. An existing install in another folder (e.g. `D:\Apps\ThreadPilot`) is moved: the new version goes to Program Files and only ThreadPilot's own program files are removed from the old folder. Settings, rules and your other files there are kept; the old uninstaller is not run (it would delete your settings).
- **A portable copy can install itself for autostart.** Turning on "Start with Windows" in a portable copy offers to download, verify (SHA256) and install the official version in Program Files; ThreadPilot then restarts from there with autostart on. It never installs an older version. On a preview build, turn on **Include prerelease updates** first, otherwise only the older stable release is found (the app now tells you).
- **Update a portable copy by replacing the whole folder,** not only `ThreadPilot.exe`: the native DLLs now live next to the exe.

## Other fixes

- Processes page: the table is as wide as its columns and the details panel takes the free space (Priority and CPU cores side by side on wide windows); the narrow layout is unchanged.
- The main window reopens maximized if it was closed maximized.
- "Reset process changes on exit" works again: it ran after the process monitor had already forgotten what it changed.
- In-app updates close ThreadPilot through the normal shutdown, so Game Boost and power-plan changes are restored before the installer runs.
- A leftover autostart entry from very old versions no longer hides that autostart is off.
- Update checks order prereleases correctly (beta.10 is newer than beta.9).

## Help us test: dual-CCD Ryzen and Intel hybrid

Game Boost's core split and dynamic release only act where the game is confined: **AMD dual-CCD** (7900X3D / 7950X3D / 9900X3D / 9950X3D, and 7950X / 9950X in Isolation) and **Intel hybrid** (12th–14th gen, Core Ultra). On single-CCD CPUs, or with fewer than six physical cores on the game side, Game Boost leaves CPU Sets to Windows.

Please use the [quick test from beta.1](https://github.com/PrimeBuild-pc/ThreadPilot/blob/main/docs/releases/v1.7.8-beta.1.md#quick-test) and also note:

- whether the CPU Set is lifted during heavy scenes (Activity shows it) and whether that helps or hurts frame times;
- Isolation with and without a browser video or Steam download in the background;
- on Intel, a heavily multithreaded game;
- any anti-cheat refusal (ThreadPilot never bypasses process protection).

Open an [issue](https://github.com/PrimeBuild-pc/ThreadPilot/issues) titled **[1.7.8][Game Boost] CPU model — result/problem** with CPU, SMT state, Windows build, chipset driver, game, mode, Activity entries and, if you can, CapFrameX/PresentMon captures (at least three runs per scenario). If Game Boost causes problems, turn it off: the rest of the app is unaffected.

## Known limits


- An old install in another folder that is still running from the tray during the upgrade keeps its exe there; close it and delete the old folder by hand. The new version removes any elevated task that points to it.
- Artifacts are **unsigned** while code-signing enrollment is pending. SmartScreen may warn; verify the SHA256 checksums.
- Upgrades preserve settings; uninstalling removes ThreadPilot-owned user data.
2 changes: 1 addition & 1 deletion sonar-project.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
sonar.projectKey=threadpilot
sonar.projectName=ThreadPilot
sonar.projectVersion=1.7.8-beta.2
sonar.projectVersion=1.7.8

sonar.sourceEncoding=UTF-8
sonar.sources=.
Expand Down
Loading