Skip to content

feat: per-process efficiency mode (EcoQoS) - #69

Merged
PrimeBuild-pc merged 21 commits into
codex/ux-rules-reliabilityfrom
feat/ecoqos-efficiency-mode
Oct 16, 2026
Merged

PrimeBuild-pc merged 21 commits into
codex/ux-rules-reliabilityfrom
feat/ecoqos-efficiency-mode

Conversation

@PrimeBuild-pc

Copy link
Copy Markdown
Owner

Closes #66. Stacked on #68.

Summary

Per-process Windows efficiency mode, following the review on #66:

  • Three states, as documented for SetProcessInformation(ProcessPowerThrottling): Windows decides (ControlMask 0), On / EcoQoS (Control+State = EXECUTION_SPEED), Off / never throttle (Control = EXECUTION_SPEED, State 0).
  • Process tab: context-menu submenu, a picker with Apply in the details panel, current state in the summary, covered by Undo last priority change, and captured by Save current settings as rule (only when explicitly On/Off).
  • Rules: EfficiencyMode? + ApplyEfficiencyModeOnStart (same pattern as I/O priority), applied by the rules engine, editable in the saved-rule editor, validated on import, included in conflict detection. Existing rule files load unchanged.
  • Power Throttling tweak: when Windows power throttling is disabled system-wide, the summary shows that efficiency mode has no effect.
  • CPU priority is not changed (Task Manager's efficiency mode also lowers priority; the tooltip says so).
  • Not included on purpose: IGNORE_TIMER_RESOLUTION, a list column (reading the state needs a handle per process).
  • Localized in all 7 languages.

Tests

  • Service: each mode maps to the right masks and reads back; access denied is reported.
  • Native integration: real Set/Get round trip on the test process (On, Off, back to Windows decides).
  • Rules engine applies it; save-as-rule keeps only explicit modes; summary flags the voiding tweak.
  • Full suite: 786 passed. Debug and Release builds clean.

Closes #66.

- Native: SetProcessInformation/GetProcessInformation with
  ProcessPowerThrottling (EXECUTION_SPEED), three states: Windows decides,
  On (EcoQoS), Off (never throttle / HighQoS).
- Process tab: context menu entries, a picker with Apply in the details
  panel, current state in the summary, undo of the last change, included
  when saving current settings as a rule (only if explicitly set).
- Rules: EfficiencyMode + ApplyEfficiencyModeOnStart, applied by the rules
  engine, editable in the saved-rule editor, validated on import and part
  of conflict detection.
- The summary flags when the global Power Throttling tweak voids it. CPU
  priority is left alone, unlike Task Manager's efficiency mode.
- Localized in all seven languages.
…-mode

# Conflicts:
#	ViewModels/SelectedProcessSummaryViewModel.cs
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

- Navigation pane open with short labels instead of seven bare icons.
- Processes: one toolbar row (search with placeholder, Filters and
  Columns menus, sort, refresh); details split into Process, Priority,
  CPU cores and Rule cards; pickers start from the process's current
  values and stay empty when a value cannot be read; help paragraphs
  moved into tooltips; core picker always visible.
- Rules: process rules first, clearer tab names, localized choices in the
  saved-rule editor instead of internal enum names.
- Shorter page titles and subtitles in all seven languages; removed the
  strings this made unused.

No data format changes.
PrimeBuild-pc and others added 18 commits October 14, 2026 18:17
- Settings: one column of rows (what it is on the left, its switch on the
  right), most used sections first, Save as the primary action.
- Tweaks: one tweak per row with its status dot and switch.
- Rule list: 'Applies' and 'Mode' columns use the same localized labels as
  the editor and refresh on language change.
- Removed 76 strings no code referenced, from all seven languages.
- Process counter could show more visible processes than the total
  ('157 / 151'): the batch total was a snapshot from the first load.
- Narrow windows (or 150% scaling): toolbar buttons move under the search
  box instead of squeezing it to a few letters.
- Rules list keeps the 'Applies' column readable when narrow.
- Settings status message gets its own line instead of being cut.

Tested in a Hyper-V Windows 11 VM: clean install, upgrade, uninstall,
light and dark theme, 100% and 150% scaling.
- The navigation pane, window size/position/maximized state, and the
  process list filters, sort and columns now survive a restart. They live
  in ui-state.json, apart from settings.json, so they never mark the
  Settings page as unsaved or travel in exported configurations. A corrupt
  file falls back to defaults; tests write to a temp file.
- Fixes the pane re-opening on every start (it was hard-coded open).
- Tweaks use a native-looking Windows 11 switch (40x20 track, sliding
  thumb) with On/Off written beside it.
- New test: every on/off setting survives save and reload.
…3 groups

The legacy topology treated the lowest EfficiencyClass as the performance
core, swapping P- and E-cores on hybrid Intel CPUs. AMD CCDs were guessed
as 8 cores each, which split 6+6 parts (7900X3D, 9900X3D) into 8+4; they now
come from the L3 groups Windows reports, with the guess kept only as a
fallback. The topology snapshot also keeps each L3 group's size.
While a detected game runs, Game Boost sets process default CPU Sets from
the CPU topology: on AMD X3D with one larger L3 the game goes to the V-Cache
CCD, on Intel hybrid CPUs to the P-cores, and selected background apps
(browsers, sync clients, updaters, launchers) to the other cores. On dual-CCD
parts with equal L3 only the background moves, unless Isolation mode also
keeps the game on CCD0. Single-L3 and unreadable topologies are left to
Windows. Above Normal priority for the game is optional; never High.

Each change is written to a journal before it is made and undone when the
game exits, Game Boost is turned off or ThreadPilot closes, and on the next
start after a crash. Only values still exactly as Game Boost set them are
restored, never one a user rule or a manual change has taken over since.
Persistent rules and Game Boost share one apply gate, and a rule always
wins over Game Boost for the setting it covers.

The switch, mode and lists are on the Tweaks page, off by default, and take
effect without a restart.
The background list compared full-path entries against an empty path, so
only bare process names worked. Found by a new integration test that runs
the real services on two copies of PING.EXE: CPU Sets and priority are set
and read back through Windows, removed when Game Boost is turned off, and
undone from the journal after a simulated crash. The topology is simulated
from this machine's CPU Set IDs, so the test also runs on CPUs where Game
Boost would not act; it skips itself below 8 cores.
Windows Server 2022 build 20348 rejects GetProcessInformation(ProcessPowerThrottling) with ERROR_INVALID_PARAMETER (87), with both limited and full query handles. Windows 11 local tests pass. Use Server 2025 for CI/release tests and smoke testing; keep the real round-trip assertions, remove temporary probes.
feat: Game Boost sessions, CPU topology fixes and Activity diagnostics
feat: clearer navigation, process page and rules editor
@PrimeBuild-pc
PrimeBuild-pc merged commit 232aa7c into codex/ux-rules-reliability Oct 16, 2026
1 check passed
@PrimeBuild-pc
PrimeBuild-pc deleted the feat/ecoqos-efficiency-mode branch October 16, 2026 09:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants