From dc21f3c456e51a123fe3c243f1dac1d18bee9438 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 13:49:47 -0300 Subject: [PATCH 01/60] fix(turbo): a falcond that crashed here does not turn Turbo off from Home With a falcond build recorded as crashing on this processor, Turbo is the Booster's: turbo::state() reads the Booster's journal. Home's 10-second watcher still read falcond's unit alone, saw it inactive, and set Turbo to Off a few seconds after it came on. Its tidy-up then did nothing (falcond does not govern), so the power profile stayed at performance while every surface said Off, and the next start showed Turbo on again before flipping. The watcher and the support report now ask turbo::backend_governs, made public for that, before taking falcond's unit as Turbo's state. --- bigame-engine/bigame-core/src/diagnostics.rs | 6 +++--- bigame-engine/bigame-core/src/turbo.rs | 6 ++++-- bigame-engine/bigame-ui/src/views/home.rs | 21 ++++++++++---------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/bigame-engine/bigame-core/src/diagnostics.rs b/bigame-engine/bigame-core/src/diagnostics.rs index bace9c6..2f2a08f 100644 --- a/bigame-engine/bigame-core/src/diagnostics.rs +++ b/bigame-engine/bigame-core/src/diagnostics.rs @@ -173,10 +173,10 @@ fn section_bigame(out: &mut String) { let _ = writeln!(out, "── Big Game Mode ──"); let reader = crate::systemd::Reader::shared(); let unit = reader.and_then(|r| r.unit_state(crate::turbo::BACKEND_UNIT)); - // As Home reads it (turbo::state): falcond's unit when it is installed, - // Booster's journal without it. + // As Home reads it (turbo::state): falcond's unit when it governs Turbo, + // Booster's journal without it or with a build that crashed here. let turbo = match &unit { - Some(u) if u.is_installed() => on_off(u.is_active()), + Some(u) if crate::turbo::backend_governs(u) => on_off(u.is_active()), Some(_) => on_off(crate::booster::BoosterEngine::is_active()), None => "unknown (systemd did not answer)", }; diff --git a/bigame-engine/bigame-core/src/turbo.rs b/bigame-engine/bigame-core/src/turbo.rs index 5c1055f..1ef6015 100644 --- a/bigame-engine/bigame-core/src/turbo.rs +++ b/bigame-engine/bigame-core/src/turbo.rs @@ -79,8 +79,10 @@ pub async fn state() -> Result { /// Whether Turbo's state is falcond's: it is installed, and not a build that /// crashed on this processor. Otherwise Turbo is the Booster's, as without -/// falcond. -fn backend_governs(unit: &crate::systemd::UnitState) -> bool { +/// falcond. Every surface that reads Turbo from falcond's unit asks this +/// first: an inactive falcond that does not govern is not a Turbo off. +#[must_use] +pub fn backend_governs(unit: &crate::systemd::UnitState) -> bool { unit.is_installed() && !crate::falcond_compat::crashes_here() } diff --git a/bigame-engine/bigame-ui/src/views/home.rs b/bigame-engine/bigame-ui/src/views/home.rs index 1bee5e9..f9a9424 100644 --- a/bigame-engine/bigame-ui/src/views/home.rs +++ b/bigame-engine/bigame-ui/src/views/home.rs @@ -504,22 +504,21 @@ pub fn build( ); glib::spawn_future_local(async move { let reading = gio::spawn_blocking(|| { - ( - bigame_core::systemd::Reader::shared() - .and_then(|r| r.unit_state(bigame_core::turbo::BACKEND_UNIT)), - Report::load_last(), - ) + // A falcond that crashed on this processor is not + // Turbo's state: Turbo is the Booster's then, as without + // falcond, and its unit staying inactive is not Turbo + // going off. + let governing = bigame_core::systemd::Reader::shared() + .and_then(|r| r.unit_state(bigame_core::turbo::BACKEND_UNIT)) + .map(|unit| turbo::backend_governs(&unit).then(|| unit.is_active())); + (governing, Report::load_last()) }) .await; busy.set(false); - let Ok((Some(unit), report)) = reading else { + let Ok((Some(governing), report)) = reading else { return; }; - let on = if unit.is_installed() { - unit.is_active() - } else { - turbo_on.get() - }; + let on = governing.unwrap_or_else(|| turbo_on.get()); // A launcher opened again, or closed, by hand leaves the // notice. if root.is_mapped() { From c3a214813ecc8f2f344c7e70907e219c80acd4f8 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 13:49:47 -0300 Subject: [PATCH 02/60] fix(ui): centre the welcome grid with a clamp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A centred grid of wrapping labels is measured for its width at the height it was given; on a short screen that is less than it needs, and GTK warned at every first start ("Trying to measure GtkGrid … for height of 464, but it needs at least 1299"). An AdwClamp centres it without that measurement. --- .../bigame-ui/src/widgets/welcome.rs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/bigame-engine/bigame-ui/src/widgets/welcome.rs b/bigame-engine/bigame-ui/src/widgets/welcome.rs index 3c97104..05bfde2 100644 --- a/bigame-engine/bigame-ui/src/widgets/welcome.rs +++ b/bigame-engine/bigame-ui/src/widgets/welcome.rs @@ -138,6 +138,10 @@ fn greeting() -> gtk4::Box { header } +/// The dialog's width, and the margin either side of what it shows. +const WIDTH: i32 = 900; +const MARGIN: i32 = 20; + /// Present the welcome screen over `parent`'s window. pub fn show(parent: &impl IsA) { // A grid rather than two boxes, so each pair lines up across the columns @@ -147,12 +151,20 @@ pub fn show(parent: &impl IsA) { .column_spacing(28) .column_homogeneous(true) .margin_top(14) - .halign(gtk4::Align::Center) .hexpand(true) .build(); for (i, (icon, title, text)) in (0i32..).zip(features()) { grid.attach(&feature_row(icon, &title, &text, 32), i % 2, i / 2, 1, 1); } + // Centred by a clamp, not by `halign`: a centred grid of wrapping labels + // is measured for its width at the height it was given, which on a short + // screen is less than it needs ("Trying to measure GtkGrid … for height + // of 464, but it needs at least 1299"). + let features = adw::Clamp::builder() + .maximum_size(WIDTH - 2 * MARGIN) + .tightening_threshold(WIDTH - 2 * MARGIN) + .child(&grid) + .build(); let tip = gtk4::Label::builder() .label(i18n( @@ -165,12 +177,12 @@ pub fn show(parent: &impl IsA) { .build(); let content = gtk4::Box::new(gtk4::Orientation::Vertical, 12); - content.set_margin_start(20); - content.set_margin_end(20); + content.set_margin_start(MARGIN); + content.set_margin_end(MARGIN); content.set_margin_top(20); content.set_margin_bottom(12); content.append(&greeting()); - content.append(&grid); + content.append(&features); content.append(&tip); let scrolled = gtk4::ScrolledWindow::builder() @@ -222,7 +234,7 @@ pub fn show(parent: &impl IsA) { let dialog = adw::Dialog::builder() .title(i18n("Welcome to Big Game Mode")) - .content_width(900) + .content_width(WIDTH) .content_height(650) .child(&handle) .build(); From 3c00bef844f81ab6ce5b0ad39ae688eee3876c4f Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 13:49:47 -0300 Subject: [PATCH 03/60] fix(logs): lines other components print at every start are debug The kernel's "Registered N planes with drm panic", the Vulkan loader skipping lsfg-vk 2's layer in a process without a profile, and libadwaita ignoring the GTK dark-theme key KDE writes were shown as errors and warnings, with nothing to act on. --- bigame-engine/bigame-core/src/logs.rs | 57 ++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/bigame-engine/bigame-core/src/logs.rs b/bigame-engine/bigame-core/src/logs.rs index c3d6006..e99e2e6 100644 --- a/bigame-engine/bigame-core/src/logs.rs +++ b/bigame-engine/bigame-core/src/logs.rs @@ -293,11 +293,20 @@ pub fn tracing_level(message: &str) -> Option<(Level, &str)> { /// gvfs, inside the UI, reports each volume monitor the system has masked or /// not installed, every time GIO starts, with "failed" in the wording. /// Wine's `fixme:` lines are notes to Wine's developers. falcond's `sudo` -/// calls open and close a PAM session each time. +/// calls open and close a PAM session each time. The kernel's DRM drivers +/// note at every boot that their planes can show a kernel panic ("Registered +/// 5 planes with drm panic"): a capability, not a panic. lsfg-vk 2's layer +/// is implicit and stands aside in every process without a profile, the UI +/// included; the Vulkan loader reports each time that it skipped it. KDE +/// writes `gtk-application-prefer-dark-theme` into GTK's settings, which +/// libadwaita ignores, and says so at every start. const NOISE: &[&str] = &[ "for remote volume monitor with dbus name", ":fixme:", "pam_unix(", + "planes with drm panic", + "failed to find 'vkgetinstanceprocaddr' in layer \"liblsfg-vk-layer.so\"", + "gtk-application-prefer-dark-theme with libadwaita is unsupported", ]; /// What a sched-ext scheduler prints each time it starts, and what the @@ -1227,6 +1236,52 @@ mod tests { ); } + #[test] + fn a_driver_that_can_show_a_panic_is_not_a_panic() { + // Real lines, printed by the kernel at every boot at priority 6. + for line in [ + "amdgpu 0000:01:00.0: [drm] Registered 5 planes with drm panic", + "simple-framebuffer simple-framebuffer.0: [drm] Registered 1 planes with drm panic", + ] { + assert_eq!(classify(Some(6), line), Level::Debug, "{line}"); + } + assert_eq!( + classify(Some(0), "Kernel panic - not syncing: Fatal exception"), + Level::Error + ); + } + + #[test] + fn what_other_components_say_at_every_start_is_not_a_problem() { + // Real lines, from bigame-ui's own output, at the priority the + // journal gave them. + assert_eq!( + classify( + Some(4), + "Vulkan: Loader Message: loader_create_device_chain: Failed to find \ + 'vkGetInstanceProcAddr' in layer \"liblsfg-vk-layer.so\". Skipping layer." + ), + Level::Debug + ); + assert_eq!( + classify( + Some(4), + "Using GtkSettings:gtk-application-prefer-dark-theme with libadwaita is \ + unsupported. Please use AdwStyleManager:color-scheme instead." + ), + Level::Debug + ); + // Another layer the loader cannot load is still an error. + assert_eq!( + classify( + Some(4), + "Vulkan: Loader Message: loader_create_device_chain: Failed to find \ + 'vkGetInstanceProcAddr' in layer \"libVkLayer_other.so\". Skipping layer." + ), + Level::Error + ); + } + #[test] fn the_levels_of_game_components_are_read_from_their_own_prefixes() { // Real lines from Steam's stream. From de92922bddeb1ae9608c3b561955a44553828c3c Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 13:57:34 -0300 Subject: [PATCH 04/60] docs: fold the issue #4 and CI audit reports into permanent pages docs/issue-4-falcond-sigill.md and docs/ci-workflows-audit.md recorded one investigation and one audit each. What stays true is now where it belongs: CPU-COMPATIBILITY.md says what Big Game Mode does with a falcond built for a newer level and how to build falcond for the baseline (the patch it linked is two lines, inlined), and the new CI.md describes the workflows, how the BigLinux builders are triggered, namcap's expected warnings and how to reproduce and investigate a run. The workflows and the README point there. --- .github/workflows/backend-tests.yml | 2 +- .github/workflows/build-package.yml | 4 +- .github/workflows/package-check.yml | 2 +- README.md | 6 +- docs/CI.md | 167 +++++++++++++ docs/CPU-COMPATIBILITY.md | 47 +++- docs/ci-workflows-audit.md | 358 --------------------------- docs/falcond/PKGBUILD-baseline.patch | 32 --- docs/issue-4-falcond-sigill.md | 332 ------------------------- 9 files changed, 220 insertions(+), 730 deletions(-) create mode 100644 docs/CI.md delete mode 100644 docs/ci-workflows-audit.md delete mode 100644 docs/falcond/PKGBUILD-baseline.patch delete mode 100644 docs/issue-4-falcond-sigill.md diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index 50cfc69..501b59b 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -5,7 +5,7 @@ name: Backend tests # # Not run on its own for pushes or pull requests: build-package.yml calls it # beside the package, so each push or pull request is one run with both -# jobs (see docs/ci-workflows-audit.md). A manual run checks any branch. +# jobs (see docs/CI.md). A manual run checks any branch. on: workflow_call: diff --git a/.github/workflows/build-package.yml b/.github/workflows/build-package.yml index fa500ed..687d812 100644 --- a/.github/workflows/build-package.yml +++ b/.github/workflows/build-package.yml @@ -12,7 +12,7 @@ name: Build Package # stable-*, and manual runs of such a branch. A failed run is not built, and # a branch with '/' breaks their recipe, so pull requests are checked by # package-check.yml, which calls this workflow under another name. -# See docs/ci-workflows-audit.md. +# See docs/CI.md. on: push: @@ -245,7 +245,7 @@ jobs: echo "errors=$errors" >> "$GITHUB_OUTPUT" echo "warnings=$warnings" >> "$GITHUB_OUTPUT" # Errors fail the build. Warnings are reviewed in - # docs/ci-workflows-audit.md and shown in the run summary: the + # docs/CI.md and shown in the run summary: the # owned empty directories, libraries GTK already pulls in, and # programs or services the package runs rather than links. if (( errors )); then diff --git a/.github/workflows/package-check.yml b/.github/workflows/package-check.yml index 9935578..bf6f10a 100644 --- a/.github/workflows/package-check.yml +++ b/.github/workflows/package-check.yml @@ -4,7 +4,7 @@ name: Package check # and the package), for pull requests and manual runs of any branch, as one # run. Under this name a successful run is not handed to the BigLinux package # builders, which act on "Build Package" runs only (see build-package.yml). -# See docs/ci-workflows-audit.md. +# See docs/CI.md. on: pull_request: diff --git a/README.md b/README.md index 7451868..5a59be2 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ a way back. settings, as on a system without falcond. That falcond build is not started again until the package changes; a falcond built for the x86-64 baseline is used as soon as it is installed. See - [docs/issue-4-falcond-sigill.md](docs/issue-4-falcond-sigill.md). + [docs/CPU-COMPATIBILITY.md](docs/CPU-COMPATIBILITY.md). - **A falcond that crashes at start** no longer stays enabled to crash again at every boot, and Turbo can be turned off after it. - **Game detection:** the Steam runtime's library cache tool (`ldconfig`) is @@ -66,7 +66,7 @@ a way back. - **Packaging:** the BigLinux package builders receive only the branches they can build (`main`, `testing-*`, `stable-*`); pull requests are checked by a separate workflow. See - [docs/ci-workflows-audit.md](docs/ci-workflows-audit.md). + [docs/CI.md](docs/CI.md). ### 2.3.0 @@ -471,7 +471,7 @@ template, compiles the catalogues and runs `cargo test --release --frozen --workspace` in `check()`. One run checks every pull request and every push (details in -[`docs/ci-workflows-audit.md`](docs/ci-workflows-audit.md)), with two jobs in +[`docs/CI.md`](docs/CI.md)), with two jobs in parallel: - the code (`.github/workflows/backend-tests.yml`): formatting, Clippy with diff --git a/docs/CI.md b/docs/CI.md new file mode 100644 index 0000000..a71badb --- /dev/null +++ b/docs/CI.md @@ -0,0 +1,167 @@ +# Continuous integration + +Every push and pull request answers one question: **does this commit build, +pass its tests and produce an installable Arch/BigLinux package?** Nothing in +the application or the package depends on this page. + +## Workflows + +```text +pull_request ──► "Package check" (package-check.yml) ─┐ + │ workflow_call +push main, ▼ +testing-*, stable-* ──► "Build Package" (build-package.yml) + ├─ rust (backend-tests.yml, workflow_call): + │ fmt · clippy · test · test on a baseline CPU · + │ doc · authorization · translations + └─ package: source of $GITHUB_SHA → makepkg -s + → identify → metadata → contents → legacy CPUs + → desktop → AppStream → namcap → SHA256SUMS + → artifact +``` + +One run per push or pull request, with both jobs in parallel. +`backend-tests.yml` runs only when called, or by hand. + +### How the BigLinux builders are triggered + +The BigLinux package builders build a branch of biglinux/bigamemode when a run +of the workflow named **Build Package** ends in **success**, with that run's +branch. No step sends anything, and there is no secret. Hence: + +- **build-package.yml** ("Build Package") runs only for branches the builders + can build: pushes to plain branch names (`main`, `testing-*`, `stable-*`; + `'*'` does not match `/`) and manual runs. A manual run of a branch with `/` + fails at once. +- **package-check.yml** ("Package check") runs the same jobs for pull requests + and manual runs of any branch, through `workflow_call`. Under that name a + success is not handed over. + +A `repository_dispatch` step to the builders was tried once: its token was +refused, the failed job failed the run, and no push was built after it. + +### backend-tests.yml: the code + +Runs in `archlinux:base-devel` with `--init` (the launcher's terminate test +needs a PID 1 that reaps orphans), as the ordinary user `builder`: the tests +of permission refusals pass under root for the wrong reason. Every check runs +when the setup succeeded, so the first failure does not hide the others. + +| Step | Command | +|---|---| +| Formatting | `cargo fmt --all --check` | +| Clippy | `cargo clippy --locked --workspace --all-targets --all-features -- -D warnings -A clippy::assert_is_empty` | +| Tests | `cargo test --locked --workspace` | +| Tests on a baseline x86-64 CPU | the same tests under `qemu-x86_64 -cpu Opteron_G1` (SSE2 only), see [CPU-COMPATIBILITY.md](CPU-COMPATIBILITY.md) | +| Documentation | `RUSTDOCFLAGS='-D warnings' cargo doc --locked --workspace --no-deps` | +| Helper authorization | `tests/daemon-authorization.sh` on a private `dbus-daemon`, no Polkit: every privileged method must answer *Access denied* | +| Translations | `locale/extract-strings.py --check` (template current, `LINGUAS` complete), `msgfmt --check --check-format` on every catalogue | + +`--locked` everywhere: CI never rewrites `Cargo.lock`. +`clippy::assert_is_empty` is the one allowed lint: it would rewrite test +assertions such as `assert!(x.is_empty())`, and it is allowed on the command +line because an older Clippy rejects the unknown name. + +### build-package.yml: the package + +1. **Source of this commit.** `.github/scripts/prepare-package-source.sh` + copies `pkgbuild/` as committed, packs `HEAD` with `git archive` and + appends `source=() sha256sums=()` to the copy, so + `prepare()`, `build()`, `check()` and `package()` run exactly as written. + It refuses a recipe with a second source and checks the override with + `makepkg --printsrcinfo`. `pkgbuild/PKGBUILD` itself still builds `main`. +2. **Build.** `makepkg --syncdeps --cleanbuild --noconfirm --log` as + `builder`, whose sudo is limited to `pacman`: the LTO release build, the + template check, the catalogues, `check()` and `package()`. +3. **Identify** the package and `bigame-mode-debug` with + `makepkg --packagelist` and `pacman -Qpq`. +4. **Metadata.** Name, version and architecture match the recipe; the + `[workspace.package]` version in `Cargo.toml` and the newest `` in + the AppStream file equal `pkgver`. +5. **Contents.** `.github/scripts/check-package-contents.sh`: every runtime + file with its mode and owner, a catalogue per `locale/LINGUAS` entry, + nothing outside `/etc` and `/usr`, and the references between the files + (desktop `Exec`/`Icon`, D-Bus activation → systemd unit → binary, bus + policy → bus name, AppStream → desktop entry). +6. **Legacy CPUs.** `.github/scripts/legacy-cpu-test.sh` runs the packaged + binaries on emulated processors, see + [CPU-COMPATIBILITY.md](CPU-COMPATIBILITY.md). +7. **Desktop entry and AppStream.** `desktop-file-validate`, and + `appstreamcli validate --no-net`; every AppStream `` must be + `https://github.com/biglinux/bigamemode[/…]`. +8. **namcap** on `pkgbuild/PKGBUILD` and the package. Errors fail the build; + warnings go to the summary. +9. **Artifact** `bigame-mode---`: both packages, + `SHA256SUMS`, `namcap.log`, `package-info.txt`, `package-files.txt` and + makepkg's logs per stage. Nothing is published from CI. + +Permissions are `contents: read`, no secrets, no `pull_request_target`. The +only third-party actions are `actions/checkout` and `actions/upload-artifact`, +pinned by commit. There is no cache (Arch's `rust` moves with every stable +release, and `--cleanbuild` starts clean anyway) and no path filter (nearly +every path ends up in the package). + +### namcap: expected warnings + +| Message | Why | +|---|---| +| `Directory (etc/falcond) is empty`, `Directory (usr/share/falcond/profiles/user) is empty` | The package owns them so the helper's sandbox can write there before falcond is installed. | +| `Dependency cairo / pango / graphene / gdk-pixbuf2 detected and implicitly satisfied` | `bigame-ui` links them through gtk4-rs; `gtk4` pulls them in. | +| `Dependency included, but may not be needed ('dbus', 'polkit', 'systemd', 'curl', 'libarchive', 'hwdata', 'iputils', 'iproute2')` | namcap sees only ELF links. These are services the helper runs under, programs Big Game Mode runs (`curl`, `bsdtar`, `ping`, `tc`) and data it reads (`pci.ids`). | + +A new `W:` line should be read and either fixed or added here. + +## Reproducing locally + +On BigLinux/Arch with the build dependencies: + +```bash +cd bigame-engine +cargo fmt --all --check +cargo clippy --locked --workspace --all-targets --all-features -- -D warnings -A clippy::assert_is_empty +cargo test --locked --workspace +RUSTDOCFLAGS='-D warnings' cargo doc --locked --workspace --no-deps +cargo build --locked --workspace --bin bigame-daemon +cd .. +bash tests/daemon-authorization.sh bigame-engine/target/debug/bigame-daemon +python3 locale/extract-strings.py --check +for po in locale/*.po; do msgfmt --check --check-format -o /dev/null "$po"; done +``` + +The package as CI builds it (committed content only): + +```bash +dir=$(mktemp -d)/package-build +.github/scripts/prepare-package-source.sh "$dir" +(cd "$dir" && makepkg --syncdeps --cleanbuild --noconfirm --log) +pkg=$(cd "$dir" && makepkg --packagelist | grep -v -- '-debug-') +.github/scripts/check-package-contents.sh "$pkg" "$dir/package-root" +desktop-file-validate "$dir"/package-root/usr/share/applications/*.desktop +appstreamcli validate --no-net "$dir"/package-root/usr/share/metainfo/*.xml +namcap pkgbuild/PKGBUILD "$pkg" +``` + +`actionlint .github/workflows/*.yml` and `shellcheck .github/scripts/*.sh +tests/*.sh` check the workflows themselves. + +## Investigating a failure + +1. The run's **Summary** shows which check failed and which did not run. +2. `gh run view --repo biglinux/bigamemode --log-failed` shows the + failing step. +3. The artifacts hold `cargo-test.log`, `daemon-authorization.log`, + `ci-versions.log` (commit, toolchain and every installed package), and + makepkg's logs per stage with `namcap.log`. +4. A failure right after an Arch update (new rustc, Clippy lint or namcap + rule) shows up as a version change in `ci-versions.log` against the last + green run. + +## What CI cannot test + +CI runs in a container: no systemd as PID 1, no system bus, no Polkit agent, +no GPU and no games. A real BigLinux installation is needed for the helper +started by D-Bus activation inside its sandbox and granted by a Polkit prompt; +falcond taken over and handed back; `scx_loader` and power-profiles-daemon; +install, upgrade and removal through pacman; Gamescope, MangoHud, vkBasalt, +lsfg-vk, OptiScaler downloads and real games; GPU telemetry and hybrid +graphics; the GTK interface and the tray. diff --git a/docs/CPU-COMPATIBILITY.md b/docs/CPU-COMPATIBILITY.md index ee02b9c..837867f 100644 --- a/docs/CPU-COMPATIBILITY.md +++ b/docs/CPU-COMPATIBILITY.md @@ -16,7 +16,8 @@ same way. A program built for a level runs only where the CPU has *every* extension of that level. Otherwise it stops with SIGILL on the first instruction it lacks -(falcond 2.0.14 built for v3, [issue #4](issue-4-falcond-sigill.md)), or, +(falcond 2.0.14 built for v3, +[issue #4](https://github.com/biglinux/bigamemode/issues/4)), or, for LZCNT/TZCNT, silently gets a wrong result. ## Why not `-march=native` or a newer level @@ -48,6 +49,50 @@ AVX2 code they run only after a CPUID check, so a newer instruction in the disassembly is not a bug by itself. Running the code on an old CPU is the test. +## A falcond built for a newer level + +falcond comes from another recipe, so a falcond built for x86-64-v3 can reach +an older processor. Zig's standard library uses `SHLX` (BMI2) while building +the process environment, before any falcond code runs, so such a build dies +at once and at every restart. systemd restarts it five times in about half a +second and leaves the unit `failed` with `start-limit-hit`, main process +`code=dumped, status=4/ILL`. + +What Big Game Mode does about it: + +| Where | Behaviour | +|---|---| +| Helper (`bigame-daemon/src/backend.rs`) | Turbo on resets a `failed` unit first (an explicit retry), then requires falcond to *stay* active, without restarts, for 2 s. If it does not, the unit is disabled, so it does not crash again at every boot. Turbo off resets a failed unit and still disables it. | +| Crash record (`bigame-core/src/falcond_compat.rs`) | A death by illegal instruction is recorded in `/var/lib/bigame-mode/game-backend.incompatible.json`: the binary's size and modification time (set by pacman from the package, so they name the build) and the processor's x86-64 level. While both match, falcond is not started again. A package update changes the binary and falcond is tried again; reinstalling the same build does not. | +| Turbo (`bigame-core/src/turbo.rs`) | With a recorded build, Turbo goes on without falcond, as on a system without it: the Booster applies the general settings and the power profile, and Turbo's state is the Booster's journal. Every surface that reads Turbo from falcond's unit asks `turbo::backend_governs` first. | +| Explanations | Home, Details, the tray and the support report say that the falcond package is built for a newer level, name the extensions this processor lacks (`bigame-core/src/isa.rs`), and do not suggest turning Turbo off and on again. An illegal instruction on an x86-64-v3 processor is described as an incompatibility *or* a damaged binary. | + +A falcond that crashes later than the 2 s grace period is not caught when +Turbo starts; it shows up as a failed service, with its cause, on the same +pages. + +### Building falcond for the baseline + +Zig builds for the build machine's CPU unless told otherwise, and upstream's +Debian rules ask for `x86_64_v3`. The AUR recipe needs one option: + +```diff + DESTDIR=build zig build \ + --summary all \ + --prefix /usr \ +- -Doptimize=ReleaseFast ++ -Doptimize=ReleaseFast \ ++ -Dcpu=baseline +``` + +`baseline` is Zig's name for the architecture's generic CPU, the x86-64 +baseline here (the same code as `-Dcpu=x86_64`). Nothing in falcond's +dependencies forces another level, and its only SIMD (`isAllDigits` in the +`/proc` scan) is sized at compile time. Measured on a Ryzen 7 5700G scanning +2,000 processes every 50 ms (180 times the default rate), the baseline build +costs 0.5 % more CPU time; at the default interval falcond uses about 0.24 % +of one core either way. + ## Checking by hand ```bash diff --git a/docs/ci-workflows-audit.md b/docs/ci-workflows-audit.md deleted file mode 100644 index ff6c3bd..0000000 --- a/docs/ci-workflows-audit.md +++ /dev/null @@ -1,358 +0,0 @@ -# CI workflows: audit and design - -This page records why `.github/workflows/backend-tests.yml` and -`.github/workflows/build-package.yml` look the way they do, how to reproduce -what they do, and how to read a failure. Nothing in the application or the -package depends on it. - -Every pull request should answer one question: **does this code build, pass -its tests and produce an installable Arch/BigLinux package?** The two -workflows answer it for the exact commit under test. - -## Where the workflows came from - -| Commit | What happened | -|---|---| -| `a60ef91` | `integration.yml`: Rust checks and a `makepkg` build of the checkout. | -| `7dd3d99` | `build-package.yml`: the BigLinux builders' hook. Every push sent a `repository_dispatch` to `BigLinux-Package-Build/build-package`. | -| `a663783` | The hook reverted to the organization's template (secrets interpolated into the script, no `--fail`, an ARM request for an x86_64-only package); `integration.yml` deleted. | -| `30cee92` | Both files replaced by big-video-converter's (Python, pytest, Debian, Xvfb). The builders' hook disappeared. | -| `72fed17` | The copies adapted to Rust and Arch again. Green, but with the problems below. | - -## Findings - -The runs before this change were green; the problems were in what green -meant. - -| Problem | Root cause | Fix | How it is validated | -|---|---|---|---| -| ~~Pushes to `main`, `testing-*` and `stable-*` no longer reached the BigLinux package builders.~~ **Wrong**: see *How the BigLinux builders are triggered* below. | — | The `notify-builders` job added for it is removed. | | -| `if: always()` with `if-no-files-found: error` on the package upload. | Copied pattern. | The package is uploaded only on success; after a failure a separate upload keeps whatever logs exist, with `if-no-files-found: ignore`. | A failure shows one error: the step that failed. | -| A change in cargo's output format could fail the backend run. | The totals parser raised an error when it found no `test result:` line. | Totals are shown in the summary only; cargo's exit status decides. | | -| The first failing check hid the others (rustfmt failing skipped Clippy and the tests). | Default step semantics. | Every check runs when the setup succeeded (`!cancelled() && steps.setup.outcome == 'success'`); any failure still fails the job. | | -| `build-package` ran on push to every branch **and** on the pull request of the same branch, with no concurrency limit. | `branches: ['**']` from big-video-converter. | `branches: ['*']` (no `/`: `main`, `testing-*`, `stable-*`, as the builders' hook always had) plus `pull_request`; superseded pull request runs are cancelled. | | -| namcap ran on the CI copy of the recipe (with the source override), not on `pkgbuild/PKGBUILD`. | Path. | `namcap ../pkgbuild/PKGBUILD `. | `namcap.log`. | -| The package was found with a glob that could also match `bigame-mode-debug`. | Arch's `makepkg.conf` builds a debug package (`0e2136e` patched the glob). | `makepkg --packagelist`, each file's name read with `pacman -Qpq`. | | -| `SHA256SUMS` covered the package but not the debug package uploaded with it. | | Both, with names relative to the artifact so `sha256sum -c SHA256SUMS` works after download. | | -| Only a few installed files were checked. | | `.github/scripts/check-package-contents.sh`: every runtime file with its mode and owner, a catalogue per `locale/LINGUAS` entry, nothing outside `/etc` and `/usr`, the references between the files (desktop `Exec`/`Icon`, D-Bus activation → systemd unit → binary, bus policy → bus name, AppStream → desktop entry) and well-formed XML. | Step *Validate package contents*. | -| `rust-version = "1.85"` is false. | Let chains (stable in 1.88) are used, and the locked zbus 5.14 needs 1.87. | **Not fixed here**, see *Pending*: correcting it changes Clippy's verdict on application code. | `cargo +1.85 check` fails, `cargo +1.88 check` passes. | -| The README described `integration.yml`, deleted in `a663783`. | | The *Packaging* section describes the two workflows. | | -| `graphics::optiscaler::tests::the_cache_keeps_the_releases_in_use_and_drops_the_rest` failed once on GitHub (`prune_cache(..) >= 110` after `drop(held)`), and passed locally and on the previous run. | A race in the test, not in CI. A flock belongs to the open file description, and a process another test spawns at that moment (several run `systemctl`, `ps`…) holds a copy of every descriptor until it executes: `O_CLOEXEC` closes it only then. So the lock can outlive `drop()` for an instant. A minimal program (lock, drop, `try_lock`, with or without threads spawning `true`) showed 0 of 5.8 million `try_lock`s refused without spawning, and 1.6 % refused with it (21 % on two cores). | The test retries the prune for up to a second before asserting, as the application would on its next prune. A prune that never frees anything still fails it. | `cargo test`; the assertion is unchanged. | - -No application code, recipe or Cargo manifest changed. The one change -outside CI is the test above, in `bigame-core/src/graphics/optiscaler.rs`. - -### Assumptions that no longer held - -- **big-video-converter's environment.** Debian, Xvfb, pytest, ffmpeg and - `dev-bigbruno` came with `30cee92`; `72fed17` removed them. Nothing in this - project needs a display: no test opens a GTK window, and no test but the - authorization script talks to D-Bus. The workflows install neither Xvfb nor - a session bus. -- **Building the checkout means building `pkgbuild/`.** It does not: the - recipe fetches `main` from GitHub. Run as is in a pull request, it would build - `main` and pass for code it never compiled. - -## Final architecture - -```text -pull_request ──► "Package check" (package-check.yml) ─┐ - │ workflow_call -push main, ▼ -testing-*, stable-* ──► "Build Package" (build-package.yml) - ├─ rust (backend-tests.yml, workflow_call): - │ fmt · clippy · test · doc · authorization · translations - └─ package: prepare source of $GITHUB_SHA → makepkg -s - → identify → metadata → contents → desktop - → AppStream → namcap → SHA256SUMS → artifact - -A successful "Build Package" run (both jobs): the BigLinux builders build -its branch. -``` - -One run per push or pull request, with both jobs in parallel. Until -2026-10-09 the code's checks were a workflow of their own, so every push -and pull request showed two runs, and a push to `main` repeated, as two more -runs, what its pull request had just run. `backend-tests.yml` now only runs -when called (or by hand). - -## How the BigLinux builders are triggered - -The BigLinux builders (GitLab, `gitlab.bigib.org/builder/packagebuilder`) -build a branch of biglinux/bigamemode when a run of the workflow named -**Build Package** ends in **success**, with that run's branch. No step of the -workflow has to send anything. The builder's public job history against this -repository's runs, 2026-10-07 and 08 (UTC): - -| Build Package run | Conclusion | Builder job | -|---|---|---| -| push `main`, `testing-2026-10-07` (`72fed17`, no dispatch step), ends 07:14 / 07:16 | success | `main` 07:14, `testing-2026-10-07` 07:16 | -| push `stable-2026-10-07`, ends 12:34 | success | `stable-2026-10-07` 12:34 | -| pull requests `fix/…` (4 runs), end 14:18, 14:32, 19:34, 19:05 | success | `fix/…` at the same minutes, failing at the recipe's `sed` (the `/` ends its `s/…/…/`) | -| pushes `main`, `testing-2026-10-07-1`, `-4`, `testing-2026-10-08` | failure (`notify-builders`: 401) | none | - -So the `repository_dispatch` added on 2026-10-07 (`notify-builders`) did the -opposite of its purpose: its token is refused (401), the failed job failed the -run, and no push was built after it. Pull requests, built under the same -workflow name, were handed over instead. - -Hence: - -- **build-package.yml** ("Build Package") runs only for branches the builders - can build: pushes to plain branch names (`main`, `testing-*`, `stable-*`; - `'*'` does not match `/`) and manual runs. A manual run of a branch with `/` - fails at once, before anything is built. -- **package-check.yml** ("Package check") runs the same job for pull requests - and manual runs of any branch, through `workflow_call`. Under that name a - success is not handed over. -- There is no dispatch step and no secret. - -### backend-tests.yml: the code - -Runs in `archlinux:base-devel` with `--init` (the launcher's terminate test -needs a PID 1 that reaps orphans), as the ordinary user `builder`: the tests -of permission refusals pass under root for the wrong reason. - -| Step | Command | -|---|---| -| Check Rust formatting | `cargo fmt --all --check` | -| Run Clippy | `cargo clippy --locked --workspace --all-targets --all-features -- -D warnings -A clippy::assert_is_empty` | -| Run workspace tests | `cargo test --locked --workspace` | -| Run workspace tests on a baseline x86-64 CPU | the same tests, run by `qemu-x86_64 -cpu Opteron_G1` (SSE2 only): see [CPU-COMPATIBILITY.md](CPU-COMPATIBILITY.md) | -| Check Rust documentation | `RUSTDOCFLAGS='-D warnings' cargo doc --locked --workspace --no-deps` | -| Test helper authorization | `tests/daemon-authorization.sh` on a private `dbus-daemon`, no Polkit: every privileged method must answer *Access denied* | -| Validate translations | `locale/extract-strings.py --check` (template current, `LINGUAS` complete), `msgfmt --check --check-format` on every catalogue | - -`--locked` everywhere: CI never rewrites `Cargo.lock`. - -`clippy::assert_is_empty` is the one allowed lint. It appeared in Clippy 1.99 -and would rewrite 61 test assertions such as `assert!(x.is_empty())` into -`assert_eq!(x, [] as [String; 0])`. It is allowed on the command line, where -the README also has it, because an older Clippy rejects the unknown name. CI -uses Arch's `rust`, always the current stable release. - -### build-package.yml: the package - -1. **Prepare the PKGBUILD for this commit.** It fails unless the checkout is - `$GITHUB_SHA`. For a pull request that is the merge commit - `actions/checkout` checks out. `.github/scripts/prepare-package-source.sh` - then copies `pkgbuild/` as committed, packs `HEAD` with - `git archive --prefix=bigame-mode/` and appends - `source=() sha256sums=()` to the copy. `prepare()`, - `build()`, `check()` and `package()` run exactly as written. The script - refuses to run if the recipe gains a second source, and it checks with - `makepkg --printsrcinfo` that the override took effect. - `pkgbuild/PKGBUILD` itself is unchanged and still builds `main` for the - BigLinux builders. -2. **Build Arch package.** `makepkg --syncdeps --cleanbuild --noconfirm --log` - runs as `builder`, whose sudo is limited to `/usr/bin/pacman` (the only - thing `--syncdeps` needs). This is the full recipe: the LTO release build, - the translation template check, the catalogues, `check()` (every test in - release mode) and `package()`. -3. **Identify the built packages.** `makepkg --packagelist`; the package and - `bigame-mode-debug` are told apart by name. -4. **Validate package metadata.** `pacman -Qip`/`-Qlp` are saved to - `package-info.txt`/`package-files.txt`. Name, version and architecture must - match the recipe. The `[workspace.package]` version in `Cargo.toml` and the - newest `` in the AppStream file must equal `pkgver`. None of these - values is written into the workflow. -5. **Validate package contents.** `.github/scripts/check-package-contents.sh` - (see the table above). -6. **Check CPU compatibility (legacy x86-64).** The packaged binaries, run by - `.github/scripts/legacy-cpu-test.sh` on emulated processors from the - x86-64 baseline up. See [CPU-COMPATIBILITY.md](CPU-COMPATIBILITY.md). -7. **Validate desktop entry.** `desktop-file-validate` on the installed entry, - with the catalogues merged in. -8. **Validate AppStream metadata.** `appstreamcli validate --no-net`, and every - `` must be `https://github.com/biglinux/bigamemode[/…]`. -9. **Run namcap.** On `pkgbuild/PKGBUILD` and the package. Errors fail the - build; warnings go to the summary (see the next section). -10. **SHA256SUMS** for the package and the debug package. -11. **Artifact** `bigame-mode---`: the package, the - debug package, `SHA256SUMS`, `namcap.log`, `package-info.txt`, - `package-files.txt`, `build-report.md` and makepkg's logs per stage. -12. **Handing over.** None in the workflow: the run's success is what the - BigLinux builders act on (see *How the BigLinux builders are - triggered*). - -### namcap: what it reports today - -| Message | Class | Why | -|---|---|---| -| `Directory (etc/falcond) is empty`, `Directory (usr/share/falcond/profiles/user) is empty` | intended | The package owns them so the helper's sandbox (`ReadWritePaths=`, `ConfigurationDirectory=`) can write there before falcond is installed; see `package()`. | -| `Dependency cairo / pango / graphene / gdk-pixbuf2 detected and implicitly satisfied` | warning, valid | `bigame-ui` links them directly through gtk4-rs; `gtk4` pulls them in. Arch's guidelines prefer listing direct dependencies; adding them is a packaging decision left to the maintainer. | -| `Dependency included, but may not be needed ('dbus', 'polkit', 'systemd', 'curl', 'libarchive', 'hwdata', 'iputils', 'iproute2')` | false positive | namcap only sees ELF links. These are services the helper runs under (D-Bus, Polkit, systemd), programs Big Game Mode runs (`curl`, `bsdtar`, `ping`, `tc`) and data it reads (`pci.ids`). | - -An `E:` line fails the build. A new `W:` line should be read and either fixed -or added here. - -### Other decisions - -- **Container.** `archlinux:base-devel` is Arch's own image and repositories, - the ones the BigLinux package builders resolve `depends` against. Each job - installs only what it uses. -- **No cache.** Arch's `rust` changes with every stable release, which - invalidates `target/`. A debug `target/` is several GiB, and downloading the - crates takes seconds. `makepkg --cleanbuild` must start clean anyway. A - cache would add a failure mode for little gain. -- **No path filters.** Nearly every path ends up in the package (`README.md` - is installed, `data/`, `locale/`, `style/` and `usr/` are compiled in or - installed). A filter loose enough to be safe would save almost nothing. -- **Tags and releases.** Nothing is published from CI. The BigLinux builders - publish packages; the artifact is for testing. -- **Permissions.** `contents: read` at workflow level, no secrets. No - `pull_request_target`. -- **Third-party actions.** Only `actions/checkout` (v7.0.1) and - `actions/upload-artifact` (v7.0.1), pinned by commit. The pins were - checked against the tags' commits. Nothing is downloaded but Arch's signed - packages and the crates `Cargo.lock` pins by checksum. -- **makepkg runs `check()` in CI.** It is the slowest part of the build - (fat-LTO test binaries) and repeats the tests `backend-tests` runs in debug - mode. It stays because it is part of the real recipe: if `check()` fails, the - BigLinux builders fail too, and only this job would notice. - -## Reproducing locally - -From the repository root, on BigLinux/Arch with the build dependencies: - -```bash -cd bigame-engine -cargo fmt --all --check -cargo clippy --locked --workspace --all-targets --all-features -- -D warnings -A clippy::assert_is_empty -cargo test --locked --workspace -RUSTDOCFLAGS='-D warnings' cargo doc --locked --workspace --no-deps -cargo build --locked --workspace --bin bigame-daemon -cd .. -bash tests/daemon-authorization.sh bigame-engine/target/debug/bigame-daemon -python3 locale/extract-strings.py --check -for po in locale/*.po; do msgfmt --check --check-format -o /dev/null "$po"; done -``` - -The package, as CI builds it. This builds committed content only, so commit -first: - -```bash -dir=$(mktemp -d)/package-build -.github/scripts/prepare-package-source.sh "$dir" -(cd "$dir" && makepkg --syncdeps --cleanbuild --noconfirm --log) -pkg=$(cd "$dir" && makepkg --packagelist | grep -v -- '-debug-') -.github/scripts/check-package-contents.sh "$pkg" "$dir/package-root" -desktop-file-validate "$dir"/package-root/usr/share/applications/*.desktop -appstreamcli validate --no-net "$dir"/package-root/usr/share/metainfo/*.xml -namcap pkgbuild/PKGBUILD "$pkg" -``` - -In a container identical to CI's: - -```bash -docker run --rm -it --init -v "$PWD":/src:ro archlinux:base-devel bash -# inside: pacman -Syu --noconfirm git namcap desktop-file-utils appstream libxml2 -# useradd -m builder; echo 'builder ALL=(root) NOPASSWD: /usr/bin/pacman' > /etc/sudoers.d/builder -# runuser -u builder -- git clone /src /home/builder/bigamemode -# then the commands above as builder -``` - -`actionlint .github/workflows/*.yml` (with `shellcheck` installed it also -checks every `run:` block) and `shellcheck .github/scripts/*.sh tests/*.sh` -check the workflows themselves. - -## Investigating a failure - -1. Open the run's **Summary**. The table shows which check failed and which - ones did not run. -2. `gh run view --repo biglinux/bigamemode --log-failed` shows the - failing step's log. -3. Download the artifacts: - - `backend-test-logs-…`: `cargo-test.log`, `daemon-authorization.log` and - `ci-versions.log` (commit, toolchain and every installed package with its - version, which matters when Arch moves on); - - `bigame-mode-build-logs-…` after a failed package build, or - `bigame-mode--` after a successful one: makepkg's log - per stage (`*-prepare.log`, `*-build.log`, `*-check.log`, - `*-package.log`), `namcap.log`, `package-info.txt`. -4. A failure right after an Arch update (new rustc, new Clippy lint, new - namcap rule) shows up as a version change in `ci-versions.log` against - the last green run. - -## Pending - -- **`rust-version` is wrong.** `bigame-engine/Cargo.toml` declares 1.85, but - `cargo +1.85 check --locked --workspace --all-targets` fails: zbus 5.14, - zvariant 5.10 and their macros need 1.87, and the code uses let chains, - which need 1.88 (`cargo +1.87 check`: *`let` expressions in this position - are unstable*). `cargo +1.88 check` passes. Setting it to 1.88 makes - Clippy's MSRV-aware lints apply. With Clippy 1.99 that is 81 mechanical - rewrites in 42 files of `bigame-core` and `bigame-ui`: 76 nested `if`s into - let chains (`collapsible_if`), 3 `chunks_exact` into `as_chunks`, 2 - `% 2 == 0` into `is_multiple_of`. Clippy no longer suggests them because - 1.85 predates those features. This belongs in its own pull request: - `rust-version = "1.88"` (and the README's *Requires Rust* and badge), the - rewrites (`cargo clippy --fix`, then review), and a job that keeps the - declaration honest: - - ```yaml - msrv: - name: Minimum supported Rust (rust-version) - runs-on: ubuntu-24.04 - container: archlinux:base-devel - timeout-minutes: 20 - defaults: - run: - shell: bash - steps: - - name: Prepare Arch environment - run: pacman -Syu --noconfirm --needed git rustup gtk4 libadwaita glib2 - - name: Check out the commit under test - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - persist-credentials: false - - name: Build the workspace with the declared minimum Rust - working-directory: bigame-engine - run: | - set -Eeuo pipefail - msrv=$(sed -n '/^\[workspace\.package\]/,/^\[/s/^rust-version *= *"\([^"]*\)".*/\1/p' Cargo.toml) - test -n "$msrv" - # rustup verifies each component against the release manifest's SHA-256. - rustup toolchain install "$msrv" --profile minimal --no-self-update - cargo "+$msrv" check --locked --workspace --all-targets --all-features - ``` - - Tested while preparing this change: in a local replay of the job in - `archlinux:base-devel`, it passed with `rust-version = "1.88"`; - `cargo +1.85 check` fails as described above. -- **The builders' trigger is seen from outside only.** It was read from the - builder's public job history, not from its configuration. The first push - to `main` after this change, a successful Build Package run followed by a - `main` job on the builder, confirms it. -- **`check()` duration.** About 10 of the package job's ~18 minutes are - `cargo test --release` linking every test binary with fat LTO - (`[profile.release]`). Testing without `--release` in `check()` would be - much faster, but it changes the recipe the BigLinux builders run and is the - maintainer's call. -- **Desktop entry hint.** `desktop-file-validate` passes, with one hint: - `Categories=Game;System;Settings;` names three main categories, so some - menus may list the application more than once. -- **Direct library dependencies.** namcap's *implicitly satisfied* warnings - (cairo, pango, graphene, gdk-pixbuf2): listing them in `depends` is Arch's - guideline; see the namcap table. - -## Manual / integration testing required - -CI runs in a container: no systemd as PID 1, no system bus, no Polkit agent, -no GPU and no games. These need a real BigLinux installation: - -- the helper started by D-Bus activation through `bigame-daemon.service`, its - sandbox (`ProtectSystem=strict`, `ReadWritePaths=`, `CapabilityBoundingSet=`) - and a Polkit prompt that grants a method; -- falcond taken over and handed back (Turbo, `ReleaseGameBackend`, - `pre_remove`), `scx_loader` scheduler switches, power-profiles-daemon; -- install, upgrade and removal through pacman (`bigame-mode.install`); -- Gamescope, MangoHud, vkBasalt, lsfg-vk, OptiScaler downloads, Steam, Heroic, - Lutris and Proton games; -- GPU telemetry (NVML, AMD sysfs), hybrid graphics, 3D V-Cache CPUs; -- the GTK interface and the tray icon on a desktop session. - -CI covers what does not need them: the helper refusing every privileged call -without Polkit, the unit, the activation file and the bus policy agreeing with -each other and with the installed binary, and the policy files being -well-formed. diff --git a/docs/falcond/PKGBUILD-baseline.patch b/docs/falcond/PKGBUILD-baseline.patch deleted file mode 100644 index e1ce188..0000000 --- a/docs/falcond/PKGBUILD-baseline.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- a/PKGBUILD (AUR falcond 2.0.14-1, commit 46d68e2) -+++ b/PKGBUILD (built for the x86-64 baseline) -@@ -2,7 +2,7 @@ - # Contributor: Sergey A - pkgname=falcond - pkgver=2.0.14 --pkgrel=1 -+pkgrel=2 - pkgdesc="Advanced Linux gaming performance daemon" - arch=('x86_64') - url="https://git.pika-os.com/general-packages/falcond" -@@ -33,13 +33,19 @@ - zig build --fetch - } - -+# -Dcpu=baseline: the architecture's generic CPU (the x86-64 baseline here), -+# as arch=('x86_64') promises. Without it Zig builds for the build machine's -+# own CPU, and upstream's Debian rules ask for x86_64_v3; either way falcond -+# needs AVX2/BMI2 and dies with SIGILL on older processors (Sandy and Ivy -+# Bridge, older AMD parts). See biglinux/bigamemode#4. - build() { - cd "$pkgname-$pkgver/$pkgname" - export ZIG_GLOBAL_CACHE_DIR="$srcdir/zig-global-cache" - DESTDIR=build zig build \ - --summary all \ - --prefix /usr \ -- -Doptimize=ReleaseFast -+ -Doptimize=ReleaseFast \ -+ -Dcpu=baseline - } - - package() { diff --git a/docs/issue-4-falcond-sigill.md b/docs/issue-4-falcond-sigill.md deleted file mode 100644 index ec20408..0000000 --- a/docs/issue-4-falcond-sigill.md +++ /dev/null @@ -1,332 +0,0 @@ -# Issue #4: falcond dies with SIGILL on CPUs without BMI2 - -[biglinux/bigamemode#4](https://github.com/biglinux/bigamemode/issues/4): -on an Intel Core i3-2120 (Sandy Bridge), falcond 2.0.14-1 stops the moment -it starts, systemd gives up restarting it, and Turbo does not stay on. - -This page records how the cause was found, what was changed, and how each -claim was checked. Nothing in the application reads it. - -## Summary - -| | | -|---|---| -| **Cause** | BigLinux's `falcond-2.0.14-1` is built for **x86-64-v3** (AVX2, BMI1/2, FMA, MOVBE, LZCNT). Zig's standard library uses `SHLX` (BMI2) while building the process environment, before any falcond code runs, and a Sandy Bridge has no BMI2. | -| **Fix, falcond** | Build it with `-Dcpu=baseline` (the x86-64 baseline), as a package marked `x86_64` should be: [docs/falcond/PKGBUILD-baseline.patch](falcond/PKGBUILD-baseline.patch), `pkgrel` 2. The build costs **0.5 % more CPU** in a stress test and nothing measurable at the default polling interval. | -| **Fix, Big Game Mode** | Two bugs in the helper made the crash worse. It took falcond as started before it crashed, so Turbo applied the Booster and left falcond enabled. It also could not turn Turbo off while falcond was failed, so the unit stayed enabled and crashed again at every boot. SIGILL is now detected and explained, and the package is pinned to the x86-64 baseline. | -| **Prevention** | CI runs every test on an emulated 2003 Opteron (SSE2 only), and the packaged binaries on emulated Opteron, Sandy Bridge, Haswell and EPYC-Milan. | - -## The report - -| | | -|---|---| -| CPU | Intel Core i3-2120, Sandy Bridge, x86_64: SSE4.2 and AVX, no AVX2, BMI1, BMI2, FMA, F16C, LZCNT, MOVBE | -| System | BigLinux, falcond 2.0.14-1 (biglinux-stable), bigame-mode 2.2.0-1 | -| journal | `falcond.service: Main process exited, code=dumped, status=4/ILL` … `Start request repeated too quickly` … `Failed with result 'start-limit-hit'` | -| GDB | `SIGILL, Illegal instruction` at `0x105de47: shlx %r14,(%rcx,%rax,8),%r15` | - -`SHLX` is a BMI2 instruction. Intel added BMI2 with Haswell (2013) and AMD with -Excavator (2015). Sandy Bridge (2011) and Ivy Bridge (2012) have AVX but not -AVX2 or BMI2. - -### AVX, AVX2, BMI2 and the x86-64 levels - -| Level | Adds | First Intel / AMD | -|---|---|---| -| x86-64 (v1) | SSE2, the baseline of every x86-64 CPU | Pentium 4 / Athlon 64 | -| x86-64-v2 | SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CMPXCHG16B | Nehalem / Bulldozer | -| x86-64-v3 | **AVX, AVX2, BMI1, BMI2, FMA, F16C, LZCNT, MOVBE** | Haswell / Excavator | -| x86-64-v4 | AVX-512 (F, BW, CD, DQ, VL) | Skylake-X / Zen 4 | - -AVX (Sandy Bridge) is not AVX2. A level needs *every* extension it lists, so a -Sandy Bridge is x86-64-v2 with AVX, and anything built for v3 may use -instructions it does not have. `LZCNT` and `TZCNT` are worse than BMI2: an -older CPU runs them as `BSR`/`BSF` and returns a wrong result instead of -stopping. - -## Finding the cause - -**Where BigLinux's falcond comes from.** `pacman -Si falcond` shows -`biglinux-stable`, version 2.0.14-1, packager "BigLinux Package Build". Its -`.BUILDINFO` has `pkgbuild_sha256sum = 92ccea25…`. That matches neither the -AUR recipe (`3af5c3d3…` at 2.0.14, `4132b59c…` now) nor chaotic-aur's. So -BigLinux builds from its own recipe, which is not in a public repository we -could find (biglinux, BigLinuxAur, BigLinux-Package-Build). The AUR recipe -passes no `-Dcpu`. Upstream's `falcond/debian/rules` (PikaOS) passes -`-Dcpu=x86_64_v3`. - -**What the published binary is.** `.github/scripts/x86-64-isa-report.py` -disassembles a binary and sorts every instruction above the baseline into the -level that introduced it. On the installed binary, and on the one -biglinux-stable serves today (rebuilt 2026-10-03, still 2.0.14-1): - -```text -/usr/bin/falcond: 232244 instructions, highest level x86-64-v3 - v3 AVX 5267 (vmovups 2146, vmovaps 518, vzeroupper 489, …) - v3 AVX2 758 (vpermpd 226, vpermq 156, …) - v3 BMI2 343 (mulx 126, shlx 93, rorx 65, shrx 34, bzhi 24) - v3 MOVBE 122 - v3 LZCNT 24 -``` - -falcond 2.0.14 rebuilt from the same tarball (sha256 `7cef1d62…`, as the AUR -recipe checks) with Zig 0.16.0: - -| `-Dcpu=` | Instructions | Highest level | BMI2 | -|---|---|---|---| -| `x86_64_v3` | 232,244, the same count in every class as BigLinux's | v3 | 343 | -| (none: native, a Zen 3 here) | 234,697 (adds `bextr`) | v3 | 368 | -| `x86_64_v2` | 229,188 | v2 | 0 | -| `x86_64` / `baseline` (byte-identical `.text`) | 230,930 | **v1** | 0 | - -BigLinux's binary has the v3 build's instruction mix exactly, not the native -one's. It is not byte-identical, because embedded paths differ, and the two -BigLinux builds of 2.0.14-1 differ from each other the same way. - -**Is anything in falcond's dependencies forcing an ISA?** No. `otter_conf`, -`otter_desktop` and `otter_utils` call `standardTargetOptions`, but falcond -passes its own `target` to each `b.dependency()`, which overrides it. -`otter_desktop`'s vendored PipeWire picks AVX2/FMA code paths at compile time, -from the target, and falcond builds it with `enable_pipewire = false`. `aro` -and `translate_c` are build-time tools that never ship. falcond's own SIMD is -`scanner.zig`'s `@Vector(std.simd.suggestVectorLength(u8))` in `isAllDigits`. -That is compile-time too: 32 bytes for v3, 16 for the baseline. Nothing does -runtime dispatch, so the target alone decides. - -**Reproducing the crash.** `qemu-x86_64 -cpu SandyBridge` runs a program with -Sandy Bridge's instruction set and raises SIGILL on anything else: - -```text -$ qemu-x86_64 -cpu SandyBridge out-v3/bin/falcond --oneshot -qemu: uncaught target signal 4 (Illegal instruction) - core dumped (exit 132) - -$ gdb (attached through qemu's gdbstub) -Program received signal SIGILL, Illegal instruction. -array_hash_map.IndexHeader.alloc (new_bit_index=62) at /usr/lib/zig/std/array_hash_map.zig:1682 -=> 0x105e327 : shlx %r14,(%rcx,%rax,8),%r15 -#1 array_hash_map.Custom([]const u8,[]const u8,process.Environ.Map.EnvNameHashContext,…).ensureTotalCapacityContext -``` - -This is the instruction and operands of the report. Only the address differs, -with the build. It sits in Zig's standard library, building the environment -map at start-up, which is why falcond dies at once and every restart dies the -same way. - -**What systemd does with it** (systemd 261 in a container, falcond's own unit: -`Restart=on-failure`, the default 100 ms delay and start limit of 5 in 10 s): - -| Moment | `ActiveState` | `Result` | `ExecMainCode` / `Status` | `NRestarts` | -|---|---|---|---|---| -| right after `StartUnit` | `active` | | | 0 | -| ~0.5 s later | `failed` | `start-limit-hit` | 3 (dumped) / 4 (SIGILL) | 5 | -| after `StopUnit` | still `failed` | `start-limit-hit` | 3 / 4 | 5 | -| after `ResetFailedUnit` | `inactive` | `success` | **still 3 / 4** | | - -The unit file stays `enabled` throughout. - -## What Big Game Mode did with it (before) - -The helper (`bigame-daemon`) controls falcond for Turbo. Replaying the issue -with the helper from `main` (3273fd4), falcond 2.0.14-v3 on an emulated Sandy -Bridge, through the same calls the Home button makes: - -```text ---- turbo on - Verified GameBackend [falcond] running (systemd reports it active; falcond has not published its status yet) - (the Booster's plan applied) - systemd: ActiveState=failed UnitFileState=enabled Result=start-limit-hit NRestarts=5 ExecMainCode=3 ExecMainStatus=4 ---- turbo off - Failed GameBackend [falcond] falcond.service is still failed; not disabled yet - systemd: ActiveState=failed UnitFileState=enabled … -``` - -1. **Turbo was reported on, and the Booster applied, with falcond dead.** - falcond is `Type=simple`, so systemd calls it `active` as soon as its - process exists, and the helper took the first `active` as success. This is - the issue's "Turbo is applied at first, then falcond fails". Turbo's own - rule ("a falcond that does not start leaves Turbo off, and nothing of - Turbo is applied") was defeated by that race. -2. **Turbo could not be turned off.** Stopping a failed unit leaves it - `failed`, and the helper stopped there instead of disabling it. falcond - stayed **enabled**, and crashed again at every boot. -3. Everything the user saw said "falcond's service failed; turn Turbo off and - on again". With SIGILL that repeats the crash. - -## What changed - -### falcond's package (the cause) - -[docs/falcond/PKGBUILD-baseline.patch](falcond/PKGBUILD-baseline.patch): the -AUR recipe with `-Dcpu=baseline` and `pkgrel=2`. `ReleaseFast` stays: the -optimisation level was never the problem. - -* `baseline` is Zig 0.16's name for the architecture's generic CPU. On x86_64 - it is the x86-64 baseline, the same code as `-Dcpu=x86_64`, and it keeps - namcap from flagging a literal `x86_64`. -* BigLinux's own recipe was not found. The patch has to be applied there, with - the same two changes. To check a published package: - - ```bash - python3 .github/scripts/x86-64-isa-report.py /usr/bin/falcond # must say x86-64-v1 - qemu-x86_64 -cpu SandyBridge /usr/bin/falcond --oneshot # must not say "signal 4" - ``` - -Built with makepkg in a clean `archlinux:base-devel` container (`--nodeps`, -as `falcond-profiles` is only in the AUR): `falcond-2.0.14-2-x86_64.pkg.tar.zst`, -x86-64-v1, linked only to glibc. namcap shows the AUR recipe's own warnings -and none new. - -### Big Game Mode - -| Where | Change | -|---|---| -| `bigame-core/src/systemd.rs` | Reads `Result`, `ExecMainCode`, `ExecMainStatus` and `NRestarts` with the unit state, over D-Bus as before. `Failure` classifies them: `IllegalInstruction` (signal 4, killed or dumped), another signal, an exit code, or another result. The fields count only while `Result` is not `success`, because systemd keeps them after a reset. Adds `ResetFailedUnit`. | -| `bigame-core/src/isa.rs` (new) | `CpuIsa`: SSE2 … AVX-512 through `std::arch::is_x86_feature_detected!`, which includes the OS check for AVX state, plus the x86-64 level they add up to. | -| `bigame-daemon/src/backend.rs` | **On:** a unit left `failed` is reset first, because this is an explicit retry and it clears the start limit. After `active`, falcond has to *stay* active, without restarts, for 2 s. If it does not, systemd finishes its restarts (the unit stays `failed` with the cause), and the unit is disabled. **Off:** a `failed` unit is reset and still disabled. Never in a loop, only on the user's request. | -| `bigame-core/src/turbo.rs` | `explain_backend_failure`: a title, what happened, what to do, and whether retrying helps. An illegal instruction is called a CPU incompatibility of the package only when the processor is below x86-64-v3, which is the evidence. Otherwise it says "a CPU instruction-set incompatibility, or a damaged binary", without naming BMI2. Turbo on checks once more that falcond still runs before applying the Booster, and puts the explanation in its report. | -| Home, Details (Overview, Problems, Performance), the tray | Show that explanation. "Turn Turbo off and on again" is offered only where it can help. | -| Support report | The CPU's ISA, and falcond's last run with its cause. | -| `pkgbuild/PKGBUILD` | `-C target-cpu=x86-64` is added after the builder's `RUSTFLAGS`, so a `target-cpu=native` in its makepkg.conf cannot make the package need the builder's CPU. The last `-C target-cpu` wins (`rustc --print cfg` shows no AVX2 with `native` before it, AVX2 with it after). | -| CI | See [CPU-COMPATIBILITY.md](CPU-COMPATIBILITY.md). | - -Not changed: falcond's unit (`Restart=`, `StartLimitBurst=`). Allowing more -restarts would only crash more often. Booster, presets, power profile and -rollback order are unchanged. The only change to them is that the rollback -now really runs. - -## Tests - -### Big Game Mode, after the change (same replay) - -```text -### falcond v3 build on an emulated Sandy Bridge (Turbo client on Sandy Bridge too) -Turbo ON - Failed GameBackend [falcond] falcond crashed on a CPU instruction this processor does not have - (illegal instruction). The installed falcond package appears to be built for a newer - x86-64 level: this processor is x86-64-v2, without AVX2, BMI1, BMI2, FMA, F16C, LZCNT, - MOVBE. Update or reinstall falcond with a build for this processor. Turning Turbo off and - on again does not help: the same package crashes the same way. - Skipped Booster [Booster] not applied: Turbo did not come on - systemd: ActiveState=failed UnitFileState=disabled Result=start-limit-hit ExecMainStatus=4 -Turbo OFF - Restored GameBackend [falcond] stopped and disabled; … - systemd: ActiveState=inactive UnitFileState=disabled - -Support report: - falcond unit failed · disabled · 5 automatic restart(s) - falcond run result start-limit-hit · main process code=dumped status=4 - last failure SIGILL (illegal instruction) · systemd stopped restarting it (start-limit-hit) · - this CPU is x86-64-v2 (no AVX2/BMI1/BMI2/FMA/F16C/LZCNT/MOVBE): falcond appears built for a newer level - ISA x86-64-v2 · SSE2 yes · SSE4.1 yes · SSE4.2 yes · AVX yes · AVX2 no · BMI1 no · BMI2 no · FMA no - -### falcond baseline build on an emulated Sandy Bridge -Turbo ON: Verified, systemd active, NRestarts=0, still active 3 s later; 0 SIGILL/restart lines in its journal -### falcond baseline build, native -Turbo ON: Verified "running, 12 profiles loaded (desktop set)"; Turbo OFF: Restored, inactive, disabled -``` - -With the Turbo client running natively on the host (a Zen 3, which has BMI2), -the same failure is described without naming BMI2, as designed. The power -profile was `balanced` before a failed Turbo on and `balanced` after it. - -Under qemu-user, falcond does not receive SIGTERM through its `signalfd`, so -stopping it waits for systemd's timeout. That is an emulator limitation: run -natively, the same binary stops on SIGTERM with exit status 0. - -### falcond on emulated processors - -As root in a container with a system bus and power-profiles-daemon. Each run -loads the 12 profiles, sees a process named like one (`factorio`), stays up -for 18 s, and is then stopped: - -| Build | Opteron G1 (v1) | Sandy Bridge | Ivy Bridge | Haswell | EPYC-Milan | -|---|---|---|---|---|---| -| v3 (as published) | | **SIGILL at start** | | runs, profile seen | | -| baseline | runs, profile seen | runs, profile seen | runs, profile seen | runs, profile seen | runs, profile seen | - -falcond's 58 unit tests pass in both builds (`zig build test`). - -### Performance - -falcond's only SIMD is the `/proc` scan. Its own CPU time was measured while -scanning 2,000 processes every 50 ms, 180 times its default rate, for 20 s -per run. The two builds ran natively on a Ryzen 7 5700G and were alternated -(A B A B), with the first round discarded: - -| Build | CPU time per 20 s (5 runs) | Spread | -|---|---|---| -| x86-64-v3 | 8638 ms | 0.03 % | -| baseline | 8684 ms | 0.30 % | - -That is **+0.53 %** for the baseline. It is real (Welch t = 3.9) and small: -21.71 ms against 21.60 ms per full scan. At the default 9 s interval falcond -uses about 0.24 % of one core in either build. Runtime dispatch would add -complexity for nothing measurable. - -### The rest - -Covered by the CI and the commands in -[ci-workflows-audit.md](ci-workflows-audit.md): rustfmt, Clippy, 927 tests -(including the new ones for SIGILL, start-limit-hit, a reset failure, CPU -levels with and without AVX2/BMI2, the explanations, the Support report and -Home), the same tests on an emulated Opteron G1, rustdoc, translations (29 -catalogues, the 12 new messages translated) and the package build. - -## A second report: Ivy Bridge, and Turbo without falcond - -A second user reported the same crash on an Intel Xeon E3-1245 V2 (Ivy -Bridge, 2012) with a Radeon RX 550: `status=4/ILL` five times, then -`start-limit-hit`, and every Turbo off answered `falcond.service is still -failed; not disabled yet`. Its CPU flags have AVX and F16C, and no AVX2, -BMI1, BMI2, FMA, LZCNT (`abm`) or MOVBE: x86-64-v2. The packaged falcond -dies the same way under `qemu-x86_64 -cpu IvyBridge` (exit 132, SIGILL) and -runs under `-cpu Haswell`. - -The changes above stopped the crash from being hidden, but left Turbo off on -such a machine for as long as the package is not rebuilt: Turbo's state was -falcond's, and falcond never stays up. Each Turbo on also started it again, -five crashes each time. - -**Now** a falcond that dies on an illegal instruction is recorded by the -helper in `/var/lib/bigame-mode/game-backend.incompatible.json`: the -binary's size and modification time (pacman sets it from the package, so it -names the build), and the processor's x86-64 level -([`falcond_compat`](../bigame-engine/bigame-core/src/falcond_compat.rs)). -While both match: - -* the helper does not start falcond again; -* Turbo goes on without it, as on a system without falcond: the Booster - applies the general settings and takes the power profile, and Turbo's - state is the Booster's; -* the report, Details and the health check say why, after a reboot too, when - systemd no longer does. - -A package update changes the binary, the record no longer matches, and -falcond is tried again; it is forgotten once falcond stays up. Reinstalling -the same build keeps it: that build crashes the same way. - -Replayed in a container with systemd 261, the real helper, the client and -falcond 2.0.14-1 (x86-64-v3) all under `qemu-x86_64 -cpu IvyBridge`: - -| Step | Result | -|---|---| -| Turbo on | falcond crashes (5 starts, `start-limit-hit`), recorded with `cpu_level: 2`, left disabled. Report: the illegal-instruction explanation, then "Turbo applies the general settings without per-game profiles". Turbo **on**. | -| Turbo off, Turbo on | No new falcond start (still 5). Turbo on. | -| Same build, new mtime (an update that is still v3) | Tried once more (10 starts), recorded again. Turbo on. | -| A baseline build | Started, stays active, record removed, Turbo's state is falcond's again. Turbo off stops and disables it. | -| Reboot with the v3 build recorded | Turbo still on (Booster), falcond disabled, `Result=success`; the health check still explains the crash and names the missing AVX2, BMI1, BMI2, FMA, LZCNT, MOVBE. | - -## Limits - -* **No real Sandy Bridge was available.** The processor was emulated by QEMU - (user mode for the binaries, with systemd 261 and the real helper in a - container). The emulation's fidelity was checked both ways: `SHLX` runs on - the Haswell model and stops with SIGILL on the Sandy Bridge one. A run on - the reporter's machine is the remaining confirmation. -* **BigLinux's falcond recipe** has to receive the patch. Until a fixed - falcond is published, Big Game Mode explains the failure but cannot make - Turbo's per-game part run on those processors. The rest of Turbo, without - falcond, is what a system without falcond gets (see the second report). -* A falcond that crashes later than the 2 s grace period is not caught when - Turbo starts. It shows up as a failed service, with its cause, on the same - pages. From 27f7bde608a4e7a406e94ff9fa8dfbb3b7e44acd Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 13:57:34 -0300 Subject: [PATCH 05/60] build: one main menu category, and ignore two more leftovers Categories=Game;System;Settings; named three main categories, so menus could list Big Game Mode three times (desktop-file-validate's hint). It is a game application. .gitignore also covers Thumbs.db and *.save. --- .gitignore | 2 ++ data/com.biglinux.BiGameMode.desktop | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9657a5f..8fd1b92 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,8 @@ target/ .serena/ .claude/ .DS_Store +Thumbs.db +*.save __pycache__/ .pytest_cache/ .mypy_cache/ diff --git a/data/com.biglinux.BiGameMode.desktop b/data/com.biglinux.BiGameMode.desktop index 4b225a6..8c49b92 100644 --- a/data/com.biglinux.BiGameMode.desktop +++ b/data/com.biglinux.BiGameMode.desktop @@ -6,6 +6,6 @@ Comment=Dynamic gaming performance orchestration for BigLinux Exec=bigame-ui Icon=com.biglinux.BiGameMode Terminal=false -Categories=Game;System;Settings; +Categories=Game; Keywords=gaming;performance;boost;scheduler;governor;gamescope; StartupNotify=true From 30bc3f893a12965dd5115e6ece1ee63667f400f0 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 13:57:34 -0300 Subject: [PATCH 06/60] fix(about): the developer line names the developer AdwAboutDialog shows developer_name under the application's name, and AppStream's is Rafael Ruscher; the dialog showed the tagline there instead. --- bigame-engine/bigame-ui/src/app.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bigame-engine/bigame-ui/src/app.rs b/bigame-engine/bigame-ui/src/app.rs index cf8ef0a..665bc28 100644 --- a/bigame-engine/bigame-ui/src/app.rs +++ b/bigame-engine/bigame-ui/src/app.rs @@ -631,9 +631,9 @@ fn show_about_dialog(app: &adw::Application) { .application_name(NAME) .application_icon(APP_ID) .version(env!("CARGO_PKG_VERSION")) - // The line under the name: what the product is. The people who make - // it are in the credits. - .developer_name(i18n("BigLinux's game mode.")) + // The line under the name, as AppStream's names it: a + // person's name, not translated. + .developer_name("Rafael Ruscher") .website(WEBSITE) .issue_url(format!("{WEBSITE}/issues")) .license_type(gtk4::License::Gpl30) From 7a9c25c0e44ea2c79ce8931c0a58ebe239225102 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:02:11 -0300 Subject: [PATCH 07/60] build: declare Rust 1.88, the oldest that builds the workspace rust-version said 1.85, but zbus 5.14 and zvariant 5.10 need 1.87 and the code's let chains need 1.88: `cargo +1.85 check` fails, `cargo +1.88 check --locked --workspace --all-targets` passes. Declaring the real minimum lets Clippy's version-aware lints apply; their rewrites are mechanical (nested `if let`/`if` collapsed into let chains, one manual `is_multiple_of`). --- bigame-engine/Cargo.toml | 2 +- .../bigame-core/examples/falcond_control.rs | 11 +- .../bigame-core/src/benchmark/mod.rs | 10 +- .../bigame-core/src/benchmark/result.rs | 2 +- bigame-engine/bigame-core/src/capabilities.rs | 21 ++-- bigame-engine/bigame-core/src/diagnostics.rs | 17 +-- bigame-engine/bigame-core/src/fg.rs | 9 +- bigame-engine/bigame-core/src/games.rs | 36 +++--- bigame-engine/bigame-core/src/gamescope.rs | 9 +- .../bigame-core/src/graphics/backend.rs | 20 ++-- .../bigame-core/src/graphics/optiscaler.rs | 26 ++--- .../bigame-core/src/graphics/plan.rs | 10 +- .../bigame-core/src/graphics/report.rs | 27 +++-- .../bigame-core/src/graphics/scan.rs | 52 +++++---- .../bigame-core/src/graphics/support.rs | 25 ++--- .../bigame-core/src/graphics/transaction.rs | 28 ++--- .../bigame-core/src/graphics/versions.rs | 8 +- bigame-engine/bigame-core/src/hardware.rs | 18 +-- bigame-engine/bigame-core/src/health.rs | 17 ++- .../bigame-core/src/heroic_launch.rs | 8 +- bigame-engine/bigame-core/src/launcher.rs | 15 +-- bigame-engine/bigame-core/src/launchers.rs | 12 +- bigame-engine/bigame-core/src/logs.rs | 8 +- bigame-engine/bigame-core/src/mangohud.rs | 20 ++-- bigame-engine/bigame-core/src/optimization.rs | 20 ++-- bigame-engine/bigame-core/src/overview.rs | 8 +- bigame-engine/bigame-core/src/processes.rs | 8 +- bigame-engine/bigame-core/src/profiles.rs | 43 ++++---- bigame-engine/bigame-core/src/running.rs | 79 +++++++------ bigame-engine/bigame-core/src/steam.rs | 11 +- .../bigame-core/src/steam_gamescope.rs | 19 ++-- bigame-engine/bigame-core/src/turbo.rs | 79 +++++++------ bigame-engine/bigame-core/src/turbo_preset.rs | 8 +- bigame-engine/bigame-core/src/watch.rs | 12 +- bigame-engine/bigame-ui/src/game_watch.rs | 9 +- bigame-engine/bigame-ui/src/profile_offer.rs | 51 +++++---- .../bigame-ui/src/views/ai_graphics.rs | 5 +- .../bigame-ui/src/views/details/extras.rs | 8 +- bigame-engine/bigame-ui/src/views/home.rs | 25 ++--- bigame-engine/bigame-ui/src/views/profiles.rs | 63 +++++------ bigame-engine/bigame-ui/src/views/tuning.rs | 104 +++++++++--------- .../bigame-ui/src/widgets/error_indicator.rs | 11 +- 42 files changed, 485 insertions(+), 489 deletions(-) diff --git a/bigame-engine/Cargo.toml b/bigame-engine/Cargo.toml index c9e24f9..e64ad34 100644 --- a/bigame-engine/Cargo.toml +++ b/bigame-engine/Cargo.toml @@ -7,7 +7,7 @@ version = "2.3.1" authors = ["Rafael Ruscher "] edition = "2024" license = "GPL-3.0-or-later" -rust-version = "1.85" +rust-version = "1.88" [workspace.lints.clippy] pedantic = { level = "warn", priority = -1 } diff --git a/bigame-engine/bigame-core/examples/falcond_control.rs b/bigame-engine/bigame-core/examples/falcond_control.rs index 1735cfe..c105641 100644 --- a/bigame-engine/bigame-core/examples/falcond_control.rs +++ b/bigame-engine/bigame-core/examples/falcond_control.rs @@ -9,14 +9,13 @@ fn main() -> anyhow::Result<()> { use bigame_core::turbo; let what = std::env::args().nth(1).unwrap_or_else(|| "status".into()); - if what != "status" { - if let Some(secs) = std::env::var("BIGAME_WAIT") + if what != "status" + && let Some(secs) = std::env::var("BIGAME_WAIT") .ok() .and_then(|s| s.parse().ok()) - { - println!("pid {}", std::process::id()); - std::thread::sleep(std::time::Duration::from_secs(secs)); - } + { + println!("pid {}", std::process::id()); + std::thread::sleep(std::time::Duration::from_secs(secs)); } match what.as_str() { "release" => { diff --git a/bigame-engine/bigame-core/src/benchmark/mod.rs b/bigame-engine/bigame-core/src/benchmark/mod.rs index 7dfdb6f..6588fe0 100644 --- a/bigame-engine/bigame-core/src/benchmark/mod.rs +++ b/bigame-engine/bigame-core/src/benchmark/mod.rs @@ -123,11 +123,11 @@ pub fn parse_mangohud_csv(content: &str) -> Result { push_col(&mut capture.cpu_temp, &cols, index("cpu_temp")); push_col(&mut capture.gpu_power, &cols, index("gpu_power")); - if let Some(i) = i_elapsed { - if let Some(v) = cols.get(i).and_then(|c| c.parse::().ok()) { - first_elapsed.get_or_insert(v); - last_elapsed = Some(v); - } + if let Some(i) = i_elapsed + && let Some(v) = cols.get(i).and_then(|c| c.parse::().ok()) + { + first_elapsed.get_or_insert(v); + last_elapsed = Some(v); } } diff --git a/bigame-engine/bigame-core/src/benchmark/result.rs b/bigame-engine/bigame-core/src/benchmark/result.rs index 16371ea..2d9cf51 100644 --- a/bigame-engine/bigame-core/src/benchmark/result.rs +++ b/bigame-engine/bigame-core/src/benchmark/result.rs @@ -63,7 +63,7 @@ impl ArmSummary { let mut sorted = runs.clone(); sorted.sort_by(|a, b| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Equal)); - let median = if n % 2 == 0 { + let median = if n.is_multiple_of(2) { f64::midpoint(sorted[n / 2 - 1], sorted[n / 2]) } else { sorted[n / 2] diff --git a/bigame-engine/bigame-core/src/capabilities.rs b/bigame-engine/bigame-core/src/capabilities.rs index af82b88..7dea180 100644 --- a/bigame-engine/bigame-core/src/capabilities.rs +++ b/bigame-engine/bigame-core/src/capabilities.rs @@ -149,12 +149,13 @@ impl GamescopeCaps { let token = token.trim_end_matches(','); let Some(name) = token.strip_prefix("--") else { // Short options: `-F` in " -F, --filter". - if let Some(short) = token.strip_prefix('-') { - if short.len() == 1 && short.chars().all(char::is_alphabetic) { - let s = short.to_owned(); - if !flags.contains(&s) { - flags.push(s); - } + if let Some(short) = token.strip_prefix('-') + && short.len() == 1 + && short.chars().all(char::is_alphabetic) + { + let s = short.to_owned(); + if !flags.contains(&s) { + flags.push(s); } } continue; @@ -352,10 +353,10 @@ pub fn gamescope_cached() -> Option { let mut cache = CACHE .lock() .unwrap_or_else(std::sync::PoisonError::into_inner); - if let Some((k, caps)) = cache.as_ref() { - if *k == key { - return caps.clone(); - } + if let Some((k, caps)) = cache.as_ref() + && *k == key + { + return caps.clone(); } let caps = detect_gamescope(); *cache = Some((key, caps.clone())); diff --git a/bigame-engine/bigame-core/src/diagnostics.rs b/bigame-engine/bigame-core/src/diagnostics.rs index 2f2a08f..2d45a87 100644 --- a/bigame-engine/bigame-core/src/diagnostics.rs +++ b/bigame-engine/bigame-core/src/diagnostics.rs @@ -30,10 +30,11 @@ use crate::hardware::{Chassis, Hardware, PowerSource, Session}; #[must_use] pub fn redact_paths(text: &str) -> String { let mut out = text.to_owned(); - if let Ok(home) = std::env::var("HOME") { - if !home.is_empty() && home != "/" { - out = out.replace(&home, "~"); - } + if let Ok(home) = std::env::var("HOME") + && !home.is_empty() + && home != "/" + { + out = out.replace(&home, "~"); } if let Ok(user) = std::env::var("USER") { // A very short username would match far too much unrelated text. @@ -946,10 +947,10 @@ mod tests { if let Ok(home) = std::env::var("HOME") { assert!(!text.contains(&home), "home directory leaked"); } - if let Ok(user) = std::env::var("USER") { - if user.len() >= 3 { - assert!(!text.contains(&user), "username leaked"); - } + if let Ok(user) = std::env::var("USER") + && user.len() >= 3 + { + assert!(!text.contains(&user), "username leaked"); } // The hostname is never collected, so it must not appear either. if let Ok(host) = std::fs::read_to_string("/etc/hostname") { diff --git a/bigame-engine/bigame-core/src/fg.rs b/bigame-engine/bigame-core/src/fg.rs index 0c82f03..d8e7061 100644 --- a/bigame-engine/bigame-core/src/fg.rs +++ b/bigame-engine/bigame-core/src/fg.rs @@ -420,10 +420,11 @@ fn migrate_to_v2(t: &mut Table) { .get("multiplier") .and_then(Value::as_integer) .is_some_and(|m| m < 2); - if p.contains_key("pacing") && p.contains_key("present_mode") { - if let Some(f) = p.get("flow_scale").and_then(Value::as_float) { - p.insert("flow_scale".into(), Value::Float(round_flow(f))); - } + if p.contains_key("pacing") + && p.contains_key("present_mode") + && let Some(f) = p.get("flow_scale").and_then(Value::as_float) + { + p.insert("flow_scale".into(), Value::Float(round_flow(f))); } p.retain(|k, _| V2_PROFILE.contains(&k)); !off diff --git a/bigame-engine/bigame-core/src/games.rs b/bigame-engine/bigame-core/src/games.rs index 716f9c0..731f325 100644 --- a/bigame-engine/bigame-core/src/games.rs +++ b/bigame-engine/bigame-core/src/games.rs @@ -403,14 +403,13 @@ fn cached_scan( now: std::time::Instant, ) -> (Vec, bool) { let sources_stamp: Vec<_> = sources.watched().iter().map(|p| stamp(p)).collect(); - if let Some(c) = cache.as_ref() { - if c.sources == *sources - && now.saturating_duration_since(c.at) < LIBRARY_MAX_AGE - && c.sources_stamp == sources_stamp - && c.games_stamp == games_stamp(&c.games) - { - return (c.games.clone(), false); - } + if let Some(c) = cache.as_ref() + && c.sources == *sources + && now.saturating_duration_since(c.at) < LIBRARY_MAX_AGE + && c.sources_stamp == sources_stamp + && c.games_stamp == games_stamp(&c.games) + { + return (c.games.clone(), false); } // Stamped before reading: a change during the scan shows on the next // call as a difference, never as a stale result kept for good. @@ -1522,10 +1521,10 @@ fn find_file_named(dir: &Path, filename: &str, depth: u32) -> Option { } for entry in std::fs::read_dir(dir).ok()?.flatten() { let path = entry.path(); - if path.is_dir() { - if let Some(found) = find_file_named(&path, filename, depth - 1) { - return Some(found); - } + if path.is_dir() + && let Some(found) = find_file_named(&path, filename, depth - 1) + { + return Some(found); } } None @@ -1956,10 +1955,9 @@ fn executables_for_file(launch_file: &Path) -> Vec { if let Some(name) = launch_file .file_name() .map(|n| n.to_string_lossy().into_owned()) + && !names.contains(&name) { - if !names.contains(&name) { - names.push(name); - } + names.push(name); } names } @@ -2558,10 +2556,10 @@ pub fn heroic_games(configs: &[PathBuf]) -> Vec { } } for mut entry in entries { - if entry.art.is_empty() { - if let Some(found) = entry.app_name.as_ref().and_then(|a| art.get(a)) { - entry.art.clone_from(found); - } + if entry.art.is_empty() + && let Some(found) = entry.app_name.as_ref().and_then(|a| art.get(a)) + { + entry.art.clone_from(found); } let Some(game) = heroic_game(base, entry) else { continue; diff --git a/bigame-engine/bigame-core/src/gamescope.rs b/bigame-engine/bigame-core/src/gamescope.rs index 1a31ce3..a2799a7 100644 --- a/bigame-engine/bigame-core/src/gamescope.rs +++ b/bigame-engine/bigame-core/src/gamescope.rs @@ -352,10 +352,11 @@ impl Config { } } - if let FrameLimit::NestedRefresh(hz) = self.frame_limit { - if hz > 0 && want("r", N_("frame rate not limited"), &mut unsupported) { - args.extend(["-r".into(), hz.to_string()]); - } + if let FrameLimit::NestedRefresh(hz) = self.frame_limit + && hz > 0 + && want("r", N_("frame rate not limited"), &mut unsupported) + { + args.extend(["-r".into(), hz.to_string()]); } if self.mangoapp && want("mangoapp", N_("overlay not shown"), &mut unsupported) { diff --git a/bigame-engine/bigame-core/src/graphics/backend.rs b/bigame-engine/bigame-core/src/graphics/backend.rs index c449321..ad3ecaa 100644 --- a/bigame-engine/bigame-core/src/graphics/backend.rs +++ b/bigame-engine/bigame-core/src/graphics/backend.rs @@ -260,16 +260,16 @@ pub fn check(backend: Backend, r: &Report) -> Availability { detail: Text::plain(N_("a 64-bit game; this one is 32-bit")), }); } - if let Some(api) = r.api.api { - if !c.apis.contains(&api) { - missing.push(Missing { - what: N_("Graphics API"), - detail: Text::with( - N_("needs %s; this game renders with %s"), - [apis(c.apis), api_name(api).to_owned()], - ), - }); - } + if let Some(api) = r.api.api + && !c.apis.contains(&api) + { + missing.push(Missing { + what: N_("Graphics API"), + detail: Text::with( + N_("needs %s; this game renders with %s"), + [apis(c.apis), api_name(api).to_owned()], + ), + }); } if c.needs_ffx_api && r.native.ffx_api.is_none() { missing.push(Missing { diff --git a/bigame-engine/bigame-core/src/graphics/optiscaler.rs b/bigame-engine/bigame-core/src/graphics/optiscaler.rs index c0ddc9d..2647c29 100644 --- a/bigame-engine/bigame-core/src/graphics/optiscaler.rs +++ b/bigame-engine/bigame-core/src/graphics/optiscaler.rs @@ -621,10 +621,10 @@ pub fn get_ini(text: &str, section: &str, key: &str) -> Option { if !inside || t.starts_with(';') || t.starts_with('#') { continue; } - if let Some((k, v)) = t.split_once('=') { - if k.trim().eq_ignore_ascii_case(key) { - return Some(v.trim().to_owned()); - } + if let Some((k, v)) = t.split_once('=') + && k.trim().eq_ignore_ascii_case(key) + { + return Some(v.trim().to_owned()); } } None @@ -1054,10 +1054,11 @@ impl LogFindings { pub fn read_log(text: &str) -> LogFindings { let mut f = LogFindings::default(); for line in text.lines() { - if let Some(rest) = line.split("OptiScaler v").nth(1) { - if line.contains(" loaded") && f.version.is_none() { - f.version = rest.split_whitespace().next().map(str::to_owned); - } + if let Some(rest) = line.split("OptiScaler v").nth(1) + && line.contains(" loaded") + && f.version.is_none() + { + f.version = rest.split_whitespace().next().map(str::to_owned); } if line.contains("Running on Wine") { f.wine = true; @@ -1068,13 +1069,12 @@ pub fn read_log(text: &str) -> LogFindings { .next() .map(str::to_owned); } - if let Some(rest) = line.split("Creating new ").nth(1) { - if let Some(name) = rest + if let Some(rest) = line.split("Creating new ").nth(1) + && let Some(name) = rest .strip_suffix(" upscaler") .or_else(|| rest.split_once(" upscaler").map(|(n, _)| n)) - { - f.upscalers.push(name.trim().to_owned()); - } + { + f.upscalers.push(name.trim().to_owned()); } if line.contains("Fsr4Update:") { f.fsr4 = line.find("RDNA4:").map(|i| line[i..].trim().to_owned()); diff --git a/bigame-engine/bigame-core/src/graphics/plan.rs b/bigame-engine/bigame-core/src/graphics/plan.rs index 3a30717..774aeec 100644 --- a/bigame-engine/bigame-core/src/graphics/plan.rs +++ b/bigame-engine/bigame-core/src/graphics/plan.rs @@ -215,13 +215,15 @@ pub fn plan(r: &Report, cfg: &AiGraphicsConfig, ctx: &Context) -> Plan { let mut p = plan_for_gpu(r, cfg, ctx); // Two GPUs and the game not running: the plan is for the card games are // expected to use, which is only confirmed once the game has it open. - if cfg.mode != Mode::Off && r.gpus.len() > 1 && !r.gpus.iter().any(|g| g.renders_game) { - if let Some(g) = r.gpu() { - p.steps.push(Step::Note(Text::with( + if cfg.mode != Mode::Off + && r.gpus.len() > 1 + && !r.gpus.iter().any(|g| g.renders_game) + && let Some(g) = r.gpu() + { + p.steps.push(Step::Note(Text::with( N_("this computer has more than one GPU: the plan is for %s, the one DXVK and VKD3D-Proton pick for Windows games; it is confirmed when the game runs"), [g.name.clone()], ))); - } } p } diff --git a/bigame-engine/bigame-core/src/graphics/report.rs b/bigame-engine/bigame-core/src/graphics/report.rs index ef923d4..22bc3b1 100644 --- a/bigame-engine/bigame-core/src/graphics/report.rs +++ b/bigame-engine/bigame-core/src/graphics/report.rs @@ -400,21 +400,20 @@ impl Report { /// running game shows, or its files say, is never replaced. #[must_use] pub fn with_listing(mut self, entry: Option) -> Self { - if let Some(e) = &entry { - if let Some(api) = e.api { - if self.api.confidence > Confidence::Detected { - self.api.api = Some(api); - self.api.confidence = Confidence::Detected; - self.api.evidence.push(match e.origin { - super::gamedb::Origin::Carried => Text::plain(N_( - "Big Game Mode's game list names the API this game renders with by default", - )), - super::gamedb::Origin::User => Text::plain(N_( - "your game list names the API this game renders with", - )), - }); + if let Some(e) = &entry + && let Some(api) = e.api + && self.api.confidence > Confidence::Detected + { + self.api.api = Some(api); + self.api.confidence = Confidence::Detected; + self.api.evidence.push(match e.origin { + super::gamedb::Origin::Carried => Text::plain(N_( + "Big Game Mode's game list names the API this game renders with by default", + )), + super::gamedb::Origin::User => { + Text::plain(N_("your game list names the API this game renders with")) } - } + }); } self.listed = entry; self diff --git a/bigame-engine/bigame-core/src/graphics/scan.rs b/bigame-engine/bigame-core/src/graphics/scan.rs index 5641a83..ccca246 100644 --- a/bigame-engine/bigame-core/src/graphics/scan.rs +++ b/bigame-engine/bigame-core/src/graphics/scan.rs @@ -512,13 +512,13 @@ fn anti_cheat_near(root: &Path, exe: Option<&Path>) -> Vec { let Ok(ft) = entry.file_type() else { continue }; let name = entry.file_name().to_string_lossy().to_ascii_lowercase(); let child = rel.join(entry.file_name()); - if let Some(ac) = anti_cheat_marker(&name, ft.is_dir()) { - if !found.iter().any(|a| a.name == ac) { - found.push(AntiCheat { - name: ac.to_owned(), - evidence: child.clone(), - }); - } + if let Some(ac) = anti_cheat_marker(&name, ft.is_dir()) + && !found.iter().any(|a| a.name == ac) + { + found.push(AntiCheat { + name: ac.to_owned(), + evidence: child.clone(), + }); } if ft.is_dir() { stack.push((child, left - 1)); @@ -598,10 +598,10 @@ fn choose_executable( .filter(|(p, dir)| !dir && has_ext(&lower_name(p), "exe")) .map(|(p, _)| p) .collect(); - if let Some(hint) = hint.map(str::to_ascii_lowercase) { - if let Some(e) = exes.iter().find(|e| lower_name(e) == hint) { - return Some((*e).clone()); - } + if let Some(hint) = hint.map(str::to_ascii_lowercase) + && let Some(e) = exes.iter().find(|e| lower_name(e) == hint) + { + return Some((*e).clone()); } // Unreal's crash reporter is a `-Win64-Shipping.exe` too. if let Some(e) = exes.iter().find(|e| { @@ -792,10 +792,9 @@ pub fn runs_as(root: &Path, process: &str) -> Vec { if let Some(real) = resolve_ci(root, process) .and_then(|exe| follow_bootstrap(root, &exe)) .and_then(|p| p.file_name().map(|n| n.to_string_lossy().into_owned())) + && !real.eq_ignore_ascii_case(process) { - if !real.eq_ignore_ascii_case(process) { - names.push(real); - } + names.push(real); } names } @@ -930,13 +929,13 @@ fn scan_limited(root: &Path, exe_hint: Option<&str>, max_entries: usize) -> Game let mut exe_dir_dlls = Vec::new(); for (rel, is_dir) in &files { let name = lower_name(rel); - if let Some(ac) = anti_cheat_marker(&name, *is_dir) { - if !anti_cheat.iter().any(|a: &AntiCheat| a.name == ac) { - anti_cheat.push(AntiCheat { - name: ac.to_owned(), - evidence: rel.clone(), - }); - } + if let Some(ac) = anti_cheat_marker(&name, *is_dir) + && !anti_cheat.iter().any(|a: &AntiCheat| a.name == ac) + { + anti_cheat.push(AntiCheat { + name: ac.to_owned(), + evidence: rel.clone(), + }); } if *is_dir { continue; @@ -994,13 +993,12 @@ fn scan_limited(root: &Path, exe_hint: Option<&str>, max_entries: usize) -> Game if let Some(ac) = executable .as_ref() .and_then(|e| known_protected_executable(&lower_name(e))) + && !anti_cheat.iter().any(|a| a.name == ac) { - if !anti_cheat.iter().any(|a| a.name == ac) { - anti_cheat.push(AntiCheat { - name: ac.to_owned(), - evidence: executable.clone().unwrap_or_default(), - }); - } + anti_cheat.push(AntiCheat { + name: ac.to_owned(), + evidence: executable.clone().unwrap_or_default(), + }); } components.sort_by(|a, b| a.kind.cmp(&b.kind).then_with(|| a.path.cmp(&b.path))); proxies.sort_by(|a, b| a.slot.cmp(&b.slot)); diff --git a/bigame-engine/bigame-core/src/graphics/support.rs b/bigame-engine/bigame-core/src/graphics/support.rs index 17e4c3d..c83623f 100644 --- a/bigame-engine/bigame-core/src/graphics/support.rs +++ b/bigame-engine/bigame-core/src/graphics/support.rs @@ -175,22 +175,21 @@ fn contents(target: &Target, a: &Analysis, masks: &Masks) -> Result Result> { for dir in touched.iter().filter(|d| d.is_dir()) { sync_dir(dir)?; } - if !kept_now.is_empty() { - if let Err(e) = remember_kept(state_dir, m, &kept_now) { - tracing::warn!(target: "graphics", game = %m.game_key, error = %format!("{e:#}"), + if !kept_now.is_empty() + && let Err(e) = remember_kept(state_dir, m, &kept_now) + { + tracing::warn!(target: "graphics", game = %m.game_key, error = %format!("{e:#}"), "the list of kept copies could not be written"); - } } if m.settings.is_empty() { Manifest::delete(state_dir, &m.game_key)?; @@ -698,11 +698,11 @@ pub fn recover(state_dir: &Path) -> Result> }; for d in dirs.flatten() { let key = d.file_name().to_string_lossy().into_owned(); - if let Ok(Some(m)) = Manifest::load(state_dir, &key) { - if m.state == State::Applying { - tracing::warn!(target: "graphics", game = %key, "interrupted apply found; rolling back"); - done.push((key, rollback(state_dir, &m))); - } + if let Ok(Some(m)) = Manifest::load(state_dir, &key) + && m.state == State::Applying + { + tracing::warn!(target: "graphics", game = %key, "interrupted apply found; rolling back"); + done.push((key, rollback(state_dir, &m))); } } Ok(done) diff --git a/bigame-engine/bigame-core/src/graphics/versions.rs b/bigame-engine/bigame-core/src/graphics/versions.rs index 2ef8cdd..2266316 100644 --- a/bigame-engine/bigame-core/src/graphics/versions.rs +++ b/bigame-engine/bigame-core/src/graphics/versions.rs @@ -206,10 +206,10 @@ pub fn for_installed(cache: &Path, source: &Source) -> Result { .is_none_or(|h| h.eq_ignore_ascii_case(&r.sha256)) }; let recommended = Release::recommended(); - if let Some(c) = optiscaler::cached_version(cache, &source.version) { - if same(&c.release) { - return Ok(c.release); - } + if let Some(c) = optiscaler::cached_version(cache, &source.version) + && same(&c.release) + { + return Ok(c.release); } if same(&recommended) { return Ok(recommended); diff --git a/bigame-engine/bigame-core/src/hardware.rs b/bigame-engine/bigame-core/src/hardware.rs index 4331435..3fd2ed9 100644 --- a/bigame-engine/bigame-core/src/hardware.rs +++ b/bigame-engine/bigame-core/src/hardware.rs @@ -560,16 +560,16 @@ fn detect_gpus_in(drm: &Path, pci: &Path) -> Vec { // virtio-gpu's card hangs off `virtio0`, a child of the PCI device; // without the address that device would be listed again as a second // GPU with no card. - if slot.is_empty() { - if let Some(parent) = display_pci_ancestor(&device_path) { - if pci_id.is_empty() { - pci_id = pci_id_of(&parent).unwrap_or_default(); - } - slot = parent - .file_name() - .map(|n| n.to_string_lossy().into_owned()) - .unwrap_or_default(); + if slot.is_empty() + && let Some(parent) = display_pci_ancestor(&device_path) + { + if pci_id.is_empty() { + pci_id = pci_id_of(&parent).unwrap_or_default(); } + slot = parent + .file_name() + .map(|n| n.to_string_lossy().into_owned()) + .unwrap_or_default(); } let vram_total_bytes = read_trim(device_path.join("mem_info_vram_total")).and_then(|s| s.parse::().ok()); diff --git a/bigame-engine/bigame-core/src/health.rs b/bigame-engine/bigame-core/src/health.rs index cc6b007..4a7c32a 100644 --- a/bigame-engine/bigame-core/src/health.rs +++ b/bigame-engine/bigame-core/src/health.rs @@ -616,13 +616,11 @@ pub fn collect() -> Vec { if backend .as_ref() .is_some_and(crate::systemd::UnitState::is_active) - { - if let Some(c) = crate::systemd::Reader::shared() + && let Some(c) = crate::systemd::Reader::shared() .and_then(|r| r.restarts(crate::turbo::BACKEND_UNIT)) .and_then(restart_check) - { - out.push(c); - } + { + out.push(c); } if status.as_ref().is_some_and(|s| s.dmem_cgroup.is_none()) && caps.falcond_installed { let kernel_can = Path::new("/sys/fs/cgroup/dmem.capacity").exists(); @@ -637,15 +635,16 @@ pub fn collect() -> Vec { None, )); } - if let Some(s) = &status { - if s.profile_mode == "handheld" && !matches!(hw.chassis, Chassis::Handheld) { - out.push(check( + if let Some(s) = &status + && s.profile_mode == "handheld" + && !matches!(hw.chassis, Chassis::Handheld) + { + out.push(check( N_("falcond profile set"), Status::Warning, N_("handheld profiles on a machine that is not a handheld: games run in power-saving mode"), advice(N_("Turn Turbo on — or off and on again if it is already on — to switch falcond to its desktop profiles")), )); - } } // sched-ext diff --git a/bigame-engine/bigame-core/src/heroic_launch.rs b/bigame-engine/bigame-core/src/heroic_launch.rs index eea7bb0..3d93e72 100644 --- a/bigame-engine/bigame-core/src/heroic_launch.rs +++ b/bigame-engine/bigame-core/src/heroic_launch.rs @@ -416,10 +416,10 @@ fn undo(game: &mut Map, previous: &Written) { } } if let Some(gs) = game.get_mut(GAMESCOPE).and_then(Value::as_object_mut) { - if let Some(words) = &previous.options { - if let Some(Value::String(opts)) = gs.get_mut(OPTIONS) { - *opts = without_words(opts, words); - } + if let Some(words) = &previous.options + && let Some(Value::String(opts)) = gs.get_mut(OPTIONS) + { + *opts = without_words(opts, words); } undo_keys(gs, &previous.gamescope); } diff --git a/bigame-engine/bigame-core/src/launcher.rs b/bigame-engine/bigame-core/src/launcher.rs index afb4361..b6ffa7d 100644 --- a/bigame-engine/bigame-core/src/launcher.rs +++ b/bigame-engine/bigame-core/src/launcher.rs @@ -338,10 +338,10 @@ impl LaunchPlan { // it, and DXVK takes the last value. if let (Some(theirs), Some(ours)) = (host.env.get("DXVK_CONFIG"), env.get_mut("DXVK_CONFIG")) + && !is_a_presets(&host.env, "DXVK_CONFIG") + && !theirs.trim().is_empty() { - if !is_a_presets(&host.env, "DXVK_CONFIG") && !theirs.trim().is_empty() { - *ours = format!("{}; {ours}", theirs.trim().trim_end_matches(';')); - } + *ours = format!("{}; {ours}", theirs.trim().trim_end_matches(';')); } } @@ -996,10 +996,11 @@ fn collect_upscaling_env(upscaling: &UpscalingSettings, env: &mut HashMap Vec<(PathBuf, FileFormat)> { home.join(".var/app/com.valvesoftware.Steam/.local/share/Steam"), ] { // ~/.steam/steam is normally a link to ~/.local/share/Steam. - if let Ok(path) = root.join("logs/console_log.txt").canonicalize() { - if seen.insert(path.clone()) { - out.push((path, FileFormat::SteamConsole)); - } + if let Ok(path) = root.join("logs/console_log.txt").canonicalize() + && seen.insert(path.clone()) + { + out.push((path, FileFormat::SteamConsole)); } } let state = crate::graphics::state_dir(); diff --git a/bigame-engine/bigame-core/src/mangohud.rs b/bigame-engine/bigame-core/src/mangohud.rs index 38df45e..67deff6 100644 --- a/bigame-engine/bigame-core/src/mangohud.rs +++ b/bigame-engine/bigame-core/src/mangohud.rs @@ -213,15 +213,17 @@ pub fn apply(process: &str, mode: Mode) -> Result { return Ok(Applied::SteamRunning); } let users = crate::steam::users(&crate::paths::home_dir()); - if !apps.is_empty() && mode != Mode::Off && crate::steam::any_flatpak(&users) { - if let Some(command) = crate::steam::flatpak_mangohud_missing() { - anyhow::bail!(UserError::with( - N_( - "Steam's Flatpak finds MangoHud only in Flathub's MangoHud extension, which is not installed. Nothing was written. Install it and restart Steam: %s" - ), - [command] - )); - } + if !apps.is_empty() + && mode != Mode::Off + && crate::steam::any_flatpak(&users) + && let Some(command) = crate::steam::flatpak_mangohud_missing() + { + anyhow::bail!(UserError::with( + N_( + "Steam's Flatpak finds MangoHud only in Flathub's MangoHud extension, which is not installed. Nothing was written. Install it and restart Steam: %s" + ), + [command] + )); } let mut settings = crate::game_settings::load(process)?; let record = added_path(); diff --git a/bigame-engine/bigame-core/src/optimization.rs b/bigame-engine/bigame-core/src/optimization.rs index 132e5a2..0eab334 100644 --- a/bigame-engine/bigame-core/src/optimization.rs +++ b/bigame-engine/bigame-core/src/optimization.rs @@ -506,16 +506,16 @@ impl GameOptimization { /// game's own values when it has none yet; the table itself goes, so /// there is one place they live. fn take_legacy_gamescope(&mut self) { - if let Some(old) = self.profile.gamescope.take() { - if !self.launch.sets_gamescope() { - let moved = crate::game_launch::GameLaunch::from_legacy(&old); - self.launch = crate::game_launch::GameLaunch { - wine_fsr: self.launch.wine_fsr, - wine_fsr_mode: self.launch.wine_fsr_mode, - vkbasalt: self.launch.vkbasalt, - ..moved - }; - } + if let Some(old) = self.profile.gamescope.take() + && !self.launch.sets_gamescope() + { + let moved = crate::game_launch::GameLaunch::from_legacy(&old); + self.launch = crate::game_launch::GameLaunch { + wine_fsr: self.launch.wine_fsr, + wine_fsr_mode: self.launch.wine_fsr_mode, + vkbasalt: self.launch.vkbasalt, + ..moved + }; } } diff --git a/bigame-engine/bigame-core/src/overview.rs b/bigame-engine/bigame-core/src/overview.rs index 7c73896..ead854f 100644 --- a/bigame-engine/bigame-core/src/overview.rs +++ b/bigame-engine/bigame-core/src/overview.rs @@ -435,10 +435,10 @@ pub fn running_profile(game: &GameIdentity, mode: &str) -> Option Option { static CACHE: std::sync::Mutex)>> = std::sync::Mutex::new(None); let mut cache = CACHE.lock().ok()?; - if let Some((pid, key)) = cache.as_ref() { - if *pid == game.pid { - return key.clone(); - } + if let Some((pid, key)) = cache.as_ref() + && *pid == game.pid + { + return key.clone(); } // The running game's own file, through its Wine prefix, before its name: // two library games can share a name such as `Game.exe`. diff --git a/bigame-engine/bigame-core/src/processes.rs b/bigame-engine/bigame-core/src/processes.rs index 6ca7c53..87be03e 100644 --- a/bigame-engine/bigame-core/src/processes.rs +++ b/bigame-engine/bigame-core/src/processes.rs @@ -1032,10 +1032,10 @@ fn with_paused(f: impl FnOnce(&mut Vec) -> R) -> R { let list = guard.get_or_insert_with(|| load_paused(&path)); let before = list.clone(); let result = f(list); - if *list != before { - if let Err(e) = save_paused(&path, list) { - tracing::warn!(target: "processes", error = %format!("{e:#}"), "could not save the paused list"); - } + if *list != before + && let Err(e) = save_paused(&path, list) + { + tracing::warn!(target: "processes", error = %format!("{e:#}"), "could not save the paused list"); } result } diff --git a/bigame-engine/bigame-core/src/profiles.rs b/bigame-engine/bigame-core/src/profiles.rs index 644b8f0..88cfebc 100644 --- a/bigame-engine/bigame-core/src/profiles.rs +++ b/bigame-engine/bigame-core/src/profiles.rs @@ -182,15 +182,15 @@ pub fn validate(profile: &GameProfile) -> Vec<&'static str> { } } // Script paths: check they look like absolute paths - if let Some(ref s) = profile.start_script { - if !s.starts_with('/') { - warnings.push(N_("Start script should be an absolute path")); - } + if let Some(ref s) = profile.start_script + && !s.starts_with('/') + { + warnings.push(N_("Start script should be an absolute path")); } - if let Some(ref s) = profile.stop_script { - if !s.starts_with('/') { - warnings.push(N_("Stop script should be an absolute path")); - } + if let Some(ref s) = profile.stop_script + && !s.starts_with('/') + { + warnings.push(N_("Stop script should be an absolute path")); } warnings } @@ -210,12 +210,11 @@ pub fn critical_errors(profile: &GameProfile) -> Vec<&'static str> { if profile.name.contains(std::path::MAIN_SEPARATOR) || profile.name.contains("..") { errors.push(N_("Profile name contains invalid path characters")); } - if let Some(ref gs) = profile.gamescope { - if (gs.render_width == 0) != (gs.render_height == 0) - || (gs.output_width == 0) != (gs.output_height == 0) - { - errors.push(N_("Gamescope resolution needs both width and height")); - } + if let Some(ref gs) = profile.gamescope + && ((gs.render_width == 0) != (gs.render_height == 0) + || (gs.output_width == 0) != (gs.output_height == 0)) + { + errors.push(N_("Gamescope resolution needs both width and height")); } errors } @@ -399,15 +398,15 @@ fn serialize_profile_otter_conf(profile: &GameProfile) -> String { let _ = writeln!(out, "vcache_mode = {}", profile.vcache_mode); let _ = writeln!(out, "idle_inhibit = {}", profile.idle_inhibit); // Strings: quoted - if let Some(ref s) = profile.start_script { - if !s.is_empty() { - let _ = writeln!(out, "start_script = \"{s}\""); - } + if let Some(ref s) = profile.start_script + && !s.is_empty() + { + let _ = writeln!(out, "start_script = \"{s}\""); } - if let Some(ref s) = profile.stop_script { - if !s.is_empty() { - let _ = writeln!(out, "stop_script = \"{s}\""); - } + if let Some(ref s) = profile.stop_script + && !s.is_empty() + { + let _ = writeln!(out, "stop_script = \"{s}\""); } // Big Game Mode's own per-game settings (otter_conf skips unknown keys). // `cpu_governor`, `scx_custom_flags` and `enabled` are not written: nothing diff --git a/bigame-engine/bigame-core/src/running.rs b/bigame-engine/bigame-core/src/running.rs index 02940dd..7301dc1 100644 --- a/bigame-engine/bigame-core/src/running.rs +++ b/bigame-engine/bigame-core/src/running.rs @@ -570,14 +570,14 @@ impl Activity { /// The process being played among `pool`: the one drawing, then the /// busiest of late. The GPU is asked only when there is a choice. fn choose<'a>(&self, pool: Vec<&'a Proc>) -> Option<&'a Proc> { - if pool.len() > 1 { - if let Some(renders) = &self.renders { - return pool - .into_iter() - .map(|p| (renders(p.pid), self.recent(p), p)) - .max_by_key(|(drawing, recent, p)| (*drawing, *recent, p.cpu_ticks)) - .map(|(_, _, p)| p); - } + if pool.len() > 1 + && let Some(renders) = &self.renders + { + return pool + .into_iter() + .map(|p| (renders(p.pid), self.recent(p), p)) + .max_by_key(|(drawing, recent, p)| (*drawing, *recent, p.cpu_ticks)) + .map(|(_, _, p)| p); } pool.into_iter() .max_by_key(|p| (self.recent(p), p.cpu_ticks)) @@ -709,10 +709,10 @@ pub fn known_native_games() -> HashMap { let mut cache = CACHE .lock() .unwrap_or_else(std::sync::PoisonError::into_inner); - if let Some((at, games)) = cache.as_ref() { - if at.elapsed() < Duration::from_secs(60) { - return games.clone(); - } + if let Some((at, games)) = cache.as_ref() + && at.elapsed() < Duration::from_secs(60) + { + return games.clone(); } let games = read_native_games(); *cache = Some((Instant::now(), games.clone())); @@ -838,10 +838,10 @@ fn graphics_of(pid: u32, executable: &str) -> Graphics { .lock() .unwrap_or_else(std::sync::PoisonError::into_inner); let seen = seen.get_or_insert_with(HashMap::new); - if let Some((at, graphics)) = seen.get(&key) { - if now.saturating_duration_since(*at) < GRAPHICS_KEPT { - return *graphics; - } + if let Some((at, graphics)) = seen.get(&key) + && now.saturating_duration_since(*at) < GRAPHICS_KEPT + { + return *graphics; } let graphics = std::fs::read_to_string(format!("/proc/{pid}/maps")) .map_or(Graphics::Unknown, |maps| graphics_from_maps(&maps)); @@ -1109,27 +1109,26 @@ fn drop_enumerated_only( fn enrich(mut game: GameIdentity) -> GameIdentity { game.graphics = graphics_of(game.pid, &game.executable); game.render_card = render_card(game.pid); - if let Some(id) = game.steam_app_id.clone() { - if let Some(home) = std::env::var_os("HOME").map(PathBuf::from) { - for library in crate::games::steam_libraries(&home) { - let steamapps = library.join("steamapps"); - let Ok(text) = - std::fs::read_to_string(steamapps.join(format!("appmanifest_{id}.acf"))) - else { - continue; - }; - if let Some(name) = crate::games::acf_value(&text, "name") { - game.display_name = name; - } - if let Some(dir) = crate::games::acf_value(&text, "installdir") { - game.install_path = Some(steamapps.join("common").join(dir)); - } - // The prefix beside the manifest, not the first compatdata/ - // found: Steam leaves stale ones behind when a game moves. - let prefix = steamapps.join("compatdata").join(&id); - game.compatdata_path = prefix.is_dir().then_some(prefix); - break; + if let Some(id) = game.steam_app_id.clone() + && let Some(home) = std::env::var_os("HOME").map(PathBuf::from) + { + for library in crate::games::steam_libraries(&home) { + let steamapps = library.join("steamapps"); + let Ok(text) = std::fs::read_to_string(steamapps.join(format!("appmanifest_{id}.acf"))) + else { + continue; + }; + if let Some(name) = crate::games::acf_value(&text, "name") { + game.display_name = name; + } + if let Some(dir) = crate::games::acf_value(&text, "installdir") { + game.install_path = Some(steamapps.join("common").join(dir)); } + // The prefix beside the manifest, not the first compatdata/ + // found: Steam leaves stale ones behind when a game moves. + let prefix = steamapps.join("compatdata").join(&id); + game.compatdata_path = prefix.is_dir().then_some(prefix); + break; } } game @@ -1548,10 +1547,10 @@ fn matching_profile_in( let Ok(content) = std::fs::read_to_string(&path) else { continue; }; - if let Some(name) = profile_name_field(&content) { - if !name.eq_ignore_ascii_case("proton") { - candidates.push(ProfileMatch { name, path, user }); - } + if let Some(name) = profile_name_field(&content) + && !name.eq_ignore_ascii_case("proton") + { + candidates.push(ProfileMatch { name, path, user }); } } } diff --git a/bigame-engine/bigame-core/src/steam.rs b/bigame-engine/bigame-core/src/steam.rs index fccc8c9..f44c9c4 100644 --- a/bigame-engine/bigame-core/src/steam.rs +++ b/bigame-engine/bigame-core/src/steam.rs @@ -626,12 +626,11 @@ pub fn broken_launch_options(config: &Path) -> Vec { let mut out = Vec::new(); let mut current_app: Option = None; for line in &lines[from..to] { - if depth(line) == app_depth { - if let Some(key) = block_key(line) { - if key.chars().all(|c| c.is_ascii_digit()) { - current_app = Some(key.to_owned()); - } - } + if depth(line) == app_depth + && let Some(key) = block_key(line) + && key.chars().all(|c| c.is_ascii_digit()) + { + current_app = Some(key.to_owned()); } if depth(line) != app_depth + 1 || pair_key(line) != Some("LaunchOptions") { continue; diff --git a/bigame-engine/bigame-core/src/steam_gamescope.rs b/bigame-engine/bigame-core/src/steam_gamescope.rs index a897c0c..965ab6c 100644 --- a/bigame-engine/bigame-core/src/steam_gamescope.rs +++ b/bigame-engine/bigame-core/src/steam_gamescope.rs @@ -229,15 +229,16 @@ pub fn apply(process: &str, wanted: Wanted) -> Result { return Ok(Applied::SteamRunning); } let users = crate::steam::users(&crate::paths::home_dir()); - if wanted.gamescope.is_some() && crate::steam::any_flatpak(&users) { - if let Some(command) = crate::steam::flatpak_gamescope_missing() { - anyhow::bail!(UserError::with( - N_( - "Steam's Flatpak finds Gamescope only in Flathub's Gamescope extension, which is not installed, and this game would not start with it. Nothing was written. Install it and restart Steam: %s" - ), - [command] - )); - } + if wanted.gamescope.is_some() + && crate::steam::any_flatpak(&users) + && let Some(command) = crate::steam::flatpak_gamescope_missing() + { + anyhow::bail!(UserError::with( + N_( + "Steam's Flatpak finds Gamescope only in Flathub's Gamescope extension, which is not installed, and this game would not start with it. Nothing was written. Install it and restart Steam: %s" + ), + [command] + )); } let mut changes = Vec::new(); let (mut segment_written, mut theirs) = (false, false); diff --git a/bigame-engine/bigame-core/src/turbo.rs b/bigame-engine/bigame-core/src/turbo.rs index 1ef6015..1e36a4b 100644 --- a/bigame-engine/bigame-core/src/turbo.rs +++ b/bigame-engine/bigame-core/src/turbo.rs @@ -643,38 +643,37 @@ async fn enable_backend( ) -> bool { // Profile set first, so falcond starts with the right one rather than // loading the wrong set and reloading. - if let Ok(mut config) = crate::config::read() { - if let Some(fixed) = corrected_profile_mode(hardware.chassis, &config.profile_mode) { - progress(Step::ConfiguringProfiles); - let before = config.profile_mode.clone(); - config.profile_mode = fixed.to_owned(); - match crate::config::write(&config).await { - Ok(()) if crate::config::read().is_ok_and(|c| c.profile_mode == fixed) => report - .push( - Kind::ProfileSet, - Section::Verified, - "Big Game Mode", - Text::with( - N_( - "%s → %s: the handheld profiles run games in power-saving mode, \ + if let Ok(mut config) = crate::config::read() + && let Some(fixed) = corrected_profile_mode(hardware.chassis, &config.profile_mode) + { + progress(Step::ConfiguringProfiles); + let before = config.profile_mode.clone(); + config.profile_mode = fixed.to_owned(); + match crate::config::write(&config).await { + Ok(()) if crate::config::read().is_ok_and(|c| c.profile_mode == fixed) => report.push( + Kind::ProfileSet, + Section::Verified, + "Big Game Mode", + Text::with( + N_( + "%s → %s: the handheld profiles run games in power-saving mode, \ and this machine is not a handheld", - ), - [Arg::Raw(before), Arg::Text(desktop_set())], - ), ), - Ok(()) => report.push( - Kind::ProfileSet, - Section::Failed, - "Big Game Mode", - Text::plain(N_("the configuration was written but reads back unchanged")), + [Arg::Raw(before), Arg::Text(desktop_set())], ), - Err(e) => report.push( - Kind::ProfileSet, - Section::Failed, - "Big Game Mode", - crate::error::describe(&e), - ), - } + ), + Ok(()) => report.push( + Kind::ProfileSet, + Section::Failed, + "Big Game Mode", + Text::plain(N_("the configuration was written but reads back unchanged")), + ), + Err(e) => report.push( + Kind::ProfileSet, + Section::Failed, + "Big Game Mode", + crate::error::describe(&e), + ), } } @@ -908,10 +907,8 @@ async fn wait_for_fresh_status( let fresh = std::fs::metadata(crate::status::status_path()) .and_then(|m| m.modified()) .is_ok_and(|m| m >= since); - if fresh { - if let Some(s) = crate::status::read() { - return Some(s); - } + if fresh && let Some(s) = crate::status::read() { + return Some(s); } tokio::time::sleep(std::time::Duration::from_millis(100)).await; } @@ -1223,10 +1220,10 @@ async fn note_scheduler_left(report: &mut Report) { ); } let path = scheduler_record(); - if let Err(e) = std::fs::remove_file(&path) { - if e.kind() != std::io::ErrorKind::NotFound { - tracing::warn!(target: "turbo", file = %path.display(), error = %e, "could not remove the scheduler note"); - } + if let Err(e) = std::fs::remove_file(&path) + && e.kind() != std::io::ErrorKind::NotFound + { + tracing::warn!(target: "turbo", file = %path.display(), error = %e, "could not remove the scheduler note"); } } @@ -1277,10 +1274,10 @@ pub fn tidy_up_blocking() -> Result<()> { } let preset = crate::turbo_preset::resync(false); let booster = reconcile_blocking(); - if let Ok(n) = &booster { - if *n > 0 { - tracing::info!(target: "turbo", restored = n, "Booster changes put back after falcond stopped"); - } + if let Ok(n) = &booster + && *n > 0 + { + tracing::info!(target: "turbo", restored = n, "Booster changes put back after falcond stopped"); } preset.context("take the Turbo preset away")?; booster.context("put the Booster's changes back")?; diff --git a/bigame-engine/bigame-core/src/turbo_preset.rs b/bigame-engine/bigame-core/src/turbo_preset.rs index 6457e23..a3405de 100644 --- a/bigame-engine/bigame-core/src/turbo_preset.rs +++ b/bigame-engine/bigame-core/src/turbo_preset.rs @@ -375,10 +375,10 @@ fn write_atomic(path: &Path, text: &str) -> Result<()> { std::fs::rename(&tmp, path) })(); if let Err(e) = written { - if let Err(cleanup) = std::fs::remove_file(&tmp) { - if cleanup.kind() != std::io::ErrorKind::NotFound { - tracing::warn!(file = %tmp.display(), error = %cleanup, "could not remove a temporary file"); - } + if let Err(cleanup) = std::fs::remove_file(&tmp) + && cleanup.kind() != std::io::ErrorKind::NotFound + { + tracing::warn!(file = %tmp.display(), error = %cleanup, "could not remove a temporary file"); } return Err(e).with_context(|| format!("write {}", path.display())); } diff --git a/bigame-engine/bigame-core/src/watch.rs b/bigame-engine/bigame-core/src/watch.rs index 5a4b5d3..5c5c2c9 100644 --- a/bigame-engine/bigame-core/src/watch.rs +++ b/bigame-engine/bigame-core/src/watch.rs @@ -130,13 +130,13 @@ pub fn watch_file(path: &Path) -> Option> { // A zero-byte status file is never meaningful anyway: the next // event carries the actual data. let current = read_capped(&path).filter(|c| !c.is_empty()); - if let Some(content) = current { - if last.as_ref() != Some(&content) { - if tx.send(content.clone()).is_err() { - return; // receiver dropped - } - last = Some(content); + if let Some(content) = current + && last.as_ref() != Some(&content) + { + if tx.send(content.clone()).is_err() { + return; // receiver dropped } + last = Some(content); } if !watch.wait() { return; diff --git a/bigame-engine/bigame-ui/src/game_watch.rs b/bigame-engine/bigame-ui/src/game_watch.rs index c02b1e2..10cbaa6 100644 --- a/bigame-engine/bigame-ui/src/game_watch.rs +++ b/bigame-engine/bigame-ui/src/game_watch.rs @@ -113,10 +113,11 @@ fn merge( current: Option<&GameIdentity>, mut found: Option, ) -> (Option, bool) { - if let (Some(cur), Some(new)) = (current, found.as_mut()) { - if cur.pid == new.pid && new.render_card.is_none() { - new.render_card.clone_from(&cur.render_card); - } + if let (Some(cur), Some(new)) = (current, found.as_mut()) + && cur.pid == new.pid + && new.render_card.is_none() + { + new.render_card.clone_from(&cur.render_card); } let key = |g: Option<&GameIdentity>| g.map(|g| (g.pid, g.graphics, g.render_card.clone())); let changed = key(current) != key(found.as_ref()); diff --git a/bigame-engine/bigame-ui/src/profile_offer.rs b/bigame-engine/bigame-ui/src/profile_offer.rs index 99600c5..6e883bd 100644 --- a/bigame-engine/bigame-ui/src/profile_offer.rs +++ b/bigame-engine/bigame-ui/src/profile_offer.rs @@ -163,22 +163,22 @@ pub fn install(app: &adw::Application) { fn game_changed(app: &adw::Application, game: Option<&GameIdentity>) { let Some(game) = game.cloned() else { app.withdraw_notification(NOTIFICATION_ID); - if let Some(name) = LAST_GAME.with(|g| g.borrow_mut().take()) { - if crate::settings::load().notifications_enabled { - // Only Turbo changes anything for a game: with it off there - // is nothing that was put back to announce. - let app = app.clone(); - glib::spawn_future_local(async move { - if !gio::spawn_blocking(turbo_is_on).await.unwrap_or(false) { - return; - } - let n = gio::Notification::new(&i18n("%s closed").replace("%s", &name)); - n.set_body(Some(&i18n( - "Everything the game's profile changed has been put back.", - ))); - app.send_notification(Some("game-exit"), &n); - }); - } + if let Some(name) = LAST_GAME.with(|g| g.borrow_mut().take()) + && crate::settings::load().notifications_enabled + { + // Only Turbo changes anything for a game: with it off there + // is nothing that was put back to announce. + let app = app.clone(); + glib::spawn_future_local(async move { + if !gio::spawn_blocking(turbo_is_on).await.unwrap_or(false) { + return; + } + let n = gio::Notification::new(&i18n("%s closed").replace("%s", &name)); + n.set_body(Some(&i18n( + "Everything the game's profile changed has been put back.", + ))); + app.send_notification(Some("game-exit"), &n); + }); } return; }; @@ -504,16 +504,15 @@ fn present_review( let app = app.clone(); let anchor = window.clone(); dialog.connect_response(None, move |_, response| { - if never.is_active() { - if let Err(e) = decline_forever(&process) { - if let Some(w) = &anchor { - crate::widgets::toast::error( - w, - &i18n("Could not save: %s").replace("%s", &e.to_string()), - "", - ); - } - } + if never.is_active() + && let Err(e) = decline_forever(&process) + && let Some(w) = &anchor + { + crate::widgets::toast::error( + w, + &i18n("Could not save: %s").replace("%s", &e.to_string()), + "", + ); } if response == "create" { create_for(&app, &process); diff --git a/bigame-engine/bigame-ui/src/views/ai_graphics.rs b/bigame-engine/bigame-ui/src/views/ai_graphics.rs index 70e1575..a2eedf2 100644 --- a/bigame-engine/bigame-ui/src/views/ai_graphics.rs +++ b/bigame-engine/bigame-ui/src/views/ai_graphics.rs @@ -2723,14 +2723,13 @@ fn open_with( // Turbo preset, the options themselves). One owner // writes it, and writing it again changes nothing; with // Steam open nothing is written, and the page offers it. - if target.app_id.is_some() { - if let Err(e) = + if target.app_id.is_some() + && let Err(e) = bigame_core::steam_gamescope::set_wine_fsr_off(&target.process, true) { tracing::warn!(target: "graphics", game = %target.process, error = %format!("{e:#}"), "Wine FSR could not be turned off for the game"); } - } anyhow::Ok((done, lsfg_removed)) }) .await; diff --git a/bigame-engine/bigame-ui/src/views/details/extras.rs b/bigame-engine/bigame-ui/src/views/details/extras.rs index 38d90ee..ce2bfb6 100644 --- a/bigame-engine/bigame-ui/src/views/details/extras.rs +++ b/bigame-engine/bigame-ui/src/views/details/extras.rs @@ -491,10 +491,10 @@ fn scan_broken_launch_options() -> Vec { fn steam_app_name(home: &std::path::Path, app_id: &str) -> String { for root in bigame_core::games::steam_libraries(home) { let manifest = root.join(format!("steamapps/appmanifest_{app_id}.acf")); - if let Ok(content) = std::fs::read_to_string(&manifest) { - if let Some(name) = bigame_core::games::acf_value(&content, "name") { - return name; - } + if let Ok(content) = std::fs::read_to_string(&manifest) + && let Some(name) = bigame_core::games::acf_value(&content, "name") + { + return name; } } i18n("Steam app %s").replace("%s", app_id) diff --git a/bigame-engine/bigame-ui/src/views/home.rs b/bigame-engine/bigame-ui/src/views/home.rs index f9a9424..c58d41c 100644 --- a/bigame-engine/bigame-ui/src/views/home.rs +++ b/bigame-engine/bigame-ui/src/views/home.rs @@ -260,10 +260,11 @@ pub fn build( else { return; }; - if let Some(presets) = presets.upgrade() { - if presets.is_open() && presets.shown() != preset { - presets.select(preset); - } + if let Some(presets) = presets.upgrade() + && presets.is_open() + && presets.shown() != preset + { + presets.select(preset); } }); } @@ -416,10 +417,8 @@ pub fn build( crate::game_watch::check(); // Open the report on its own only when something // went wrong; a clean run is summarised on Home. - if failed { - if let Some(r) = last.borrow().as_ref() { - show(r); - } + if failed && let Some(r) = last.borrow().as_ref() { + show(r); } return glib::ControlFlow::Break; } @@ -467,10 +466,10 @@ pub fn build( turbo_action.connect_change_state(move |_, value| { // A request, not the result: the state follows once Turbo has // really switched. - if let Some(wanted) = value.and_then(bool::from_variant) { - if wanted != button.state().is_on() { - toggle(); - } + if let Some(wanted) = value.and_then(bool::from_variant) + && wanted != button.state().is_on() + { + toggle(); } }); } @@ -689,7 +688,7 @@ impl Refresh { let n = self.tick.get().wrapping_add(1); self.tick.set(n); let playing = crate::game_watch::current().is_some(); - if !playing || n % IN_GAME_EVERY == 0 { + if !playing || n.is_multiple_of(IN_GAME_EVERY) { (self.update)(n); } glib::ControlFlow::Continue diff --git a/bigame-engine/bigame-ui/src/views/profiles.rs b/bigame-engine/bigame-ui/src/views/profiles.rs index 86877f6..998841b 100644 --- a/bigame-engine/bigame-ui/src/views/profiles.rs +++ b/bigame-engine/bigame-ui/src/views/profiles.rs @@ -452,30 +452,30 @@ fn build_list_page(nav_view: &adw::NavigationView) -> adw::NavigationPage { let view = Rc::clone(&view); let win = btn.root().and_downcast::(); dialog.open(win.as_ref(), gio::Cancellable::NONE, move |result| { - if let Ok(file) = result { - if let Some(path) = file.path() { - gtk4::glib::spawn_future_local(async move { - // Saving goes through the helper and may wait on a - // Polkit prompt: off the main thread. - let result = - gio::spawn_blocking(move || bigame_core::profiles::import(&path)) - .await - .unwrap_or_else(|_| Err(anyhow::anyhow!("import panicked"))); - match result { - Ok(name) => { - toast::show(&btn_ref, &i18n("Profile imported")); - refresh_library(&view); - view.nav.push(&build_detail_page(&name, None)); - } - Err(e) => { - toast::show( - &btn_ref, - &i18n("Import failed: %s").replace("%s", &error_text(&e)), - ); - } + if let Ok(file) = result + && let Some(path) = file.path() + { + gtk4::glib::spawn_future_local(async move { + // Saving goes through the helper and may wait on a + // Polkit prompt: off the main thread. + let result = + gio::spawn_blocking(move || bigame_core::profiles::import(&path)) + .await + .unwrap_or_else(|_| Err(anyhow::anyhow!("import panicked"))); + match result { + Ok(name) => { + toast::show(&btn_ref, &i18n("Profile imported")); + refresh_library(&view); + view.nav.push(&build_detail_page(&name, None)); } - }); - } + Err(e) => { + toast::show( + &btn_ref, + &i18n("Import failed: %s").replace("%s", &error_text(&e)), + ); + } + } + }); } }); }); @@ -977,10 +977,11 @@ fn with_turbo(anchor: >k4::Widget, entry: game_card::Entry) { } // The request did not start a switch (it was refused): start anyway. glib::idle_add_local_once(move || { - if let Some(app) = gio::Application::default() { - if app.is_action_enabled("turbo") && pending.borrow().is_some() { - settle(&app); - } + if let Some(app) = gio::Application::default() + && app.is_action_enabled("turbo") + && pending.borrow().is_some() + { + settle(&app); } }); } @@ -1321,10 +1322,10 @@ fn card_entry( /// `). `None` when there is neither, rather than guessing a program name /// and running whatever the PATH resolves it to. fn launch_command(game: &bigame_core::games::DetectedGame) -> Option { - if game.source != bigame_core::games::Source::Steam { - if let Some((program, args)) = game.launch_command.as_ref().and_then(|c| c.split_first()) { - return Some(game_card::Launch::Direct(program.clone(), args.to_vec())); - } + if game.source != bigame_core::games::Source::Steam + && let Some((program, args)) = game.launch_command.as_ref().and_then(|c| c.split_first()) + { + return Some(game_card::Launch::Direct(program.clone(), args.to_vec())); } bigame_core::launchers::Start::for_game(game).map(game_card::Launch::Through) } diff --git a/bigame-engine/bigame-ui/src/views/tuning.rs b/bigame-engine/bigame-ui/src/views/tuning.rs index bf6a5e8..87f2c9a 100644 --- a/bigame-engine/bigame-ui/src/views/tuning.rs +++ b/bigame-engine/bigame-ui/src/views/tuning.rs @@ -955,29 +955,28 @@ fn build_image_quality(saver: &VideoSaver, display: &Display) -> adw::Preference return; } let upscales = opt::gamescope_upscales(&video.borrow().upscaling); - if on && upscales { - if let Some(c) = opt::conflict(Feature::WineFsr, Feature::GamescopeUpscaling) { - let (turn_off, row2, quiet2) = - (Rc::clone(&turn_off), row.clone(), Rc::clone(&quiet)); - let (video2, anchor) = (Rc::clone(&video), row.clone()); - notice::ask_conflict(row, &c, move |use_wine| { - if use_wine { - video2.borrow_mut().upscaling.wine_fsr_enabled = true; - turn_off(Feature::GamescopeUpscaling); - crate::widgets::toast::show( - &anchor, - &i18n( - "Wine FSR is on; Gamescope now renders at the game's own size", - ), - ); - } else { - quiet2.set(true); - row2.set_active(false); - quiet2.set(false); - } - }); - return; - } + if on + && upscales + && let Some(c) = opt::conflict(Feature::WineFsr, Feature::GamescopeUpscaling) + { + let (turn_off, row2, quiet2) = + (Rc::clone(&turn_off), row.clone(), Rc::clone(&quiet)); + let (video2, anchor) = (Rc::clone(&video), row.clone()); + notice::ask_conflict(row, &c, move |use_wine| { + if use_wine { + video2.borrow_mut().upscaling.wine_fsr_enabled = true; + turn_off(Feature::GamescopeUpscaling); + crate::widgets::toast::show( + &anchor, + &i18n("Wine FSR is on; Gamescope now renders at the game's own size"), + ); + } else { + quiet2.set(true); + row2.set_active(false); + quiet2.set(false); + } + }); + return; } video.borrow_mut().upscaling.wine_fsr_enabled = on; saver.save(row); @@ -1003,35 +1002,38 @@ fn build_image_quality(saver: &VideoSaver, display: &Display) -> adw::Preference } let was = before.0 && before.1.0 > 0 && before.1.1 > 0; let now = opt::gamescope_upscales(&video.borrow().upscaling); - if !quiet.get() && now && !was && wine.is_active() { - if let Some(c) = opt::conflict(Feature::GamescopeUpscaling, Feature::WineFsr) { - let (turn_off, saver2, quiet2) = - (Rc::clone(&turn_off), Rc::clone(&saver), Rc::clone(&quiet)); - let (switch2, render2) = (switch.clone(), Rc::clone(&render)); - notice::ask_conflict(&switch, &c, move |use_gamescope| { - if use_gamescope { - turn_off(Feature::WineFsr); - crate::widgets::toast::show( - &switch2, - &i18n("Gamescope upscaling is on; Wine FSR was turned off"), - ); - } else { - quiet2.set(true); - switch2.set_active(before.0); - render2.set(before.1); - quiet2.set(false); - { - let mut v = saver2.shared().borrow_mut(); - v.upscaling.gamescope_enabled = before.0; - (v.upscaling.base_width, v.upscaling.base_height) = before.1; - } - saver2.save(&switch2); + if !quiet.get() + && now + && !was + && wine.is_active() + && let Some(c) = opt::conflict(Feature::GamescopeUpscaling, Feature::WineFsr) + { + let (turn_off, saver2, quiet2) = + (Rc::clone(&turn_off), Rc::clone(&saver), Rc::clone(&quiet)); + let (switch2, render2) = (switch.clone(), Rc::clone(&render)); + notice::ask_conflict(&switch, &c, move |use_gamescope| { + if use_gamescope { + turn_off(Feature::WineFsr); + crate::widgets::toast::show( + &switch2, + &i18n("Gamescope upscaling is on; Wine FSR was turned off"), + ); + } else { + quiet2.set(true); + switch2.set_active(before.0); + render2.set(before.1); + quiet2.set(false); + { + let mut v = saver2.shared().borrow_mut(); + v.upscaling.gamescope_enabled = before.0; + (v.upscaling.base_width, v.upscaling.base_height) = before.1; } - }); - // Nothing is saved until one is chosen: the file never - // holds both, even while the question is open. - return; - } + saver2.save(&switch2); + } + }); + // Nothing is saved until one is chosen: the file never + // holds both, even while the question is open. + return; } saver.save(&switch); refresh(); diff --git a/bigame-engine/bigame-ui/src/widgets/error_indicator.rs b/bigame-engine/bigame-ui/src/widgets/error_indicator.rs index a3ed074..aa67a5a 100644 --- a/bigame-engine/bigame-ui/src/widgets/error_indicator.rs +++ b/bigame-engine/bigame-ui/src/widgets/error_indicator.rs @@ -91,12 +91,11 @@ impl ErrorIndicator { if let Some((_, cmd)) = &act { run_action(&anchor, cmd.clone(), done.borrow().clone()); } - } else if response == "copy" { - if let Some((_, text)) = ©_act { - if let Some(display) = gtk4::gdk::Display::default() { - display.clipboard().set_text(text); - } - } + } else if response == "copy" + && let Some((_, text)) = ©_act + && let Some(display) = gtk4::gdk::Display::default() + { + display.clipboard().set_text(text); } }); } From 41901ee06b4ad34cec45b79716f170557c2b50cb Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:06:02 -0300 Subject: [PATCH 08/60] refactor: drop lint allows that suppress nothing, and comments that restate code Each removed allow was checked by turning it into expect: none of them suppresses a lint any more. config::read documented a failure on invalid TOML it does not have (anything else reads as falcond's own format). --- bigame-engine/bigame-core/src/benchmark/lab.rs | 1 - bigame-engine/bigame-core/src/config.rs | 12 +++++------- bigame-engine/bigame-core/src/dbus.rs | 2 -- bigame-engine/bigame-ui/src/views/details/dns.rs | 1 - bigame-engine/bigame-ui/src/views/measure_dialog.rs | 1 - bigame-engine/bigame-ui/src/widgets/launch.rs | 6 +----- 6 files changed, 6 insertions(+), 17 deletions(-) diff --git a/bigame-engine/bigame-core/src/benchmark/lab.rs b/bigame-engine/bigame-core/src/benchmark/lab.rs index 80f4c58..befb15d 100644 --- a/bigame-engine/bigame-core/src/benchmark/lab.rs +++ b/bigame-engine/bigame-core/src/benchmark/lab.rs @@ -234,7 +234,6 @@ impl Session { /// The report a person reads. #[must_use] - #[allow(clippy::too_many_lines)] pub fn to_markdown(&self, comparisons: &[Comparison]) -> String { let mut out = String::new(); let _ = writeln!(out, "# {} — {}\n", self.workload, self.date); diff --git a/bigame-engine/bigame-core/src/config.rs b/bigame-engine/bigame-core/src/config.rs index 87a3354..5404387 100644 --- a/bigame-engine/bigame-core/src/config.rs +++ b/bigame-engine/bigame-core/src/config.rs @@ -73,7 +73,7 @@ impl Default for FalcondConfig { /// Read falcond config from disk. /// /// # Errors -/// Returns error if file is unreadable or contains invalid TOML. +/// Returns an error if the file cannot be read. pub fn read() -> Result { read_from(Path::new(CONFIG_PATH)) } @@ -83,15 +83,15 @@ pub fn read() -> Result { /// Supports both `otter_conf` (bare identifiers) and TOML (quoted strings) formats. /// /// # Errors -/// Returns error if file is unreadable or unparseable. +/// Returns an error if the file cannot be read; a file in neither format +/// reads as falcond's defaults, as falcond itself treats it. pub fn read_from(path: &Path) -> Result { let content = std::fs::read_to_string(path) .with_context(|| format!("read falcond config: {}", path.display()))?; - // Try TOML first (backwards compat with old configs) + // A file in quoted TOML still reads; otherwise it is falcond's own format. if let Ok(cfg) = toml::from_str::(&content) { return Ok(cfg); } - // Fall back to otter_conf key=value parsing (bare identifiers) Ok(parse_otter_conf(&content)) } @@ -108,7 +108,6 @@ fn parse_otter_conf(content: &str) -> FalcondConfig { }; let key = key.trim(); let val = val.trim(); - // Strip optional quotes (handle both `"none"` and `none`) let val = val.trim_matches('"'); match key { "enable_performance_mode" => cfg.enable_performance_mode = val == "true", @@ -118,7 +117,6 @@ fn parse_otter_conf(content: &str) -> FalcondConfig { "profile_mode" => cfg.profile_mode = val.to_string(), "poll_interval_ms" => cfg.poll_interval_ms = val.parse().unwrap_or(9000), "system_processes" => { - // Parse ["str1", "str2"] array syntax let inner = val.trim_start_matches('[').trim_end_matches(']'); if !inner.is_empty() { cfg.system_processes = inner @@ -128,7 +126,7 @@ fn parse_otter_conf(content: &str) -> FalcondConfig { .collect(); } } - _ => {} // Ignore unknown fields + _ => {} } } cfg diff --git a/bigame-engine/bigame-core/src/dbus.rs b/bigame-engine/bigame-core/src/dbus.rs index 7f360b6..1046737 100644 --- a/bigame-engine/bigame-core/src/dbus.rs +++ b/bigame-engine/bigame-core/src/dbus.rs @@ -1,7 +1,5 @@ //! D-Bus integration with `PowerProfiles` and falcond status daemons. -#![allow(clippy::missing_errors_doc)] - use std::sync::OnceLock; /// Cached system bus connection (for `PowerProfiles`). diff --git a/bigame-engine/bigame-ui/src/views/details/dns.rs b/bigame-engine/bigame-ui/src/views/details/dns.rs index cfe7dcf..382378d 100644 --- a/bigame-engine/bigame-ui/src/views/details/dns.rs +++ b/bigame-engine/bigame-ui/src/views/details/dns.rs @@ -147,7 +147,6 @@ impl ComputerDns { }); } - #[allow(clippy::type_complexity)] fn show( &self, availability: Availability, diff --git a/bigame-engine/bigame-ui/src/views/measure_dialog.rs b/bigame-engine/bigame-ui/src/views/measure_dialog.rs index b5b8eb6..6d8bc3b 100644 --- a/bigame-engine/bigame-ui/src/views/measure_dialog.rs +++ b/bigame-engine/bigame-ui/src/views/measure_dialog.rs @@ -89,7 +89,6 @@ pub fn present(parent: &impl IsA, title: &str, command: &[String]) fn ask(parent: >k4::Widget, title: &str, command: &[String]) { let runs = RUNS_PER_ARM * 2; let per_run = u64::from(CAPTURE_SECONDS + START_DELAY_SECONDS) + 10; - #[allow(clippy::cast_possible_truncation)] let minutes = (per_run * runs as u64).div_ceil(60); let dialog = adw::AlertDialog::new( diff --git a/bigame-engine/bigame-ui/src/widgets/launch.rs b/bigame-engine/bigame-ui/src/widgets/launch.rs index 711b3ff..38612cf 100644 --- a/bigame-engine/bigame-ui/src/widgets/launch.rs +++ b/bigame-engine/bigame-ui/src/widgets/launch.rs @@ -219,11 +219,7 @@ fn wine_fsr_info(main: Option<(u32, u32)>) -> (String, String, Vec) { .into_iter() .map(|(name, factor, what)| { let size = main.map(|(w, h)| { - #[allow( - clippy::cast_possible_truncation, - clippy::cast_sign_loss, - clippy::cast_precision_loss - )] + #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] let scaled = |n: u32| (f64::from(n) / factor).round() as u32; i18n("On your main screen: about %s.") .replace("%s", &format!("{} × {}", scaled(w), scaled(h))) From b8d00a67c28c2107d67463742f9a92b64c275998 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:08:38 -0300 Subject: [PATCH 09/60] i18n(ui): "label: value" and counts as each language writes them Messages joined a label and a value with a literal ": ", although the catalogues already translate "%s: %s" (French puts a space before the colon, Chinese uses a full-width one); i18n::labelled now does it everywhere outside AI Graphics. The Gamescope options count goes through ngettext. The UI re-exports bigame-core's N_ instead of defining its own. --- bigame-engine/bigame-ui/src/i18n.rs | 13 +++++++---- .../bigame-ui/src/views/details/dns.rs | 4 +++- bigame-engine/bigame-ui/src/views/settings.rs | 22 +++++++++--------- bigame-engine/bigame-ui/src/views/tuning.rs | 23 +++++++++++-------- .../bigame-ui/src/widgets/optimization.rs | 21 ++++++++--------- bigame-engine/bigame-ui/src/widgets/status.rs | 9 +++----- 6 files changed, 47 insertions(+), 45 deletions(-) diff --git a/bigame-engine/bigame-ui/src/i18n.rs b/bigame-engine/bigame-ui/src/i18n.rs index 9680340..4825f97 100644 --- a/bigame-engine/bigame-ui/src/i18n.rs +++ b/bigame-engine/bigame-ui/src/i18n.rs @@ -28,11 +28,7 @@ pub fn init() { /// Mark a string for translation without translating it here: for labels /// kept in constants and passed to [`i18n`] where they are shown. -#[allow(non_snake_case)] -#[must_use] -pub const fn N_(s: &'static str) -> &'static str { - s -} +pub use bigame_core::text::N_; /// Translate a string via gettext. #[must_use] @@ -47,6 +43,13 @@ pub fn ni18n(singular: &str, plural: &str, n: usize) -> String { ngettext(singular, plural, u32::try_from(n).unwrap_or(u32::MAX)).replace("%n", &n.to_string()) } +/// "label: value" as the language writes it: French puts a space before the +/// colon, Chinese uses a full-width one. +#[must_use] +pub fn labelled(label: &str, value: &str) -> String { + bigame_core::text::Text::fill(&i18n("%s: %s"), &[label.to_owned(), value.to_owned()]) +} + /// A sentence from bigame-core, translated: its template and every /// translatable value in it through gettext. #[must_use] diff --git a/bigame-engine/bigame-ui/src/views/details/dns.rs b/bigame-engine/bigame-ui/src/views/details/dns.rs index 382378d..0f379e6 100644 --- a/bigame-engine/bigame-ui/src/views/details/dns.rs +++ b/bigame-engine/bigame-ui/src/views/details/dns.rs @@ -258,7 +258,9 @@ impl ComputerDns { *this.note.borrow_mut() = Some(verified); short } - Ok(Err(e)) => format!("{}: {}", i18n("Could not change the DNS"), error_text(&e)), + Ok(Err(e)) => { + crate::i18n::labelled(&i18n("Could not change the DNS"), &error_text(&e)) + } Err(_) => i18n("Could not change the DNS"), }; toast::show(&feedback, &text); diff --git a/bigame-engine/bigame-ui/src/views/settings.rs b/bigame-engine/bigame-ui/src/views/settings.rs index 802efab..74cad02 100644 --- a/bigame-engine/bigame-ui/src/views/settings.rs +++ b/bigame-engine/bigame-ui/src/views/settings.rs @@ -210,7 +210,7 @@ fn falcond_row() -> adw::ActionRow { ), Ok(Ok((false, _))) => i18n("There was nothing to hand back"), Ok(Err(e)) => { - format!("{}: {}", i18n("Could not hand it back"), error_text(&e)) + crate::i18n::labelled(&i18n("Could not hand it back"), &error_text(&e)) } Err(_) => i18n("Could not hand it back"), }; @@ -227,11 +227,9 @@ fn falcond_row() -> adw::ActionRow { let result = gio::spawn_blocking(bigame_core::turbo::take_back_blocking).await; let text = match result { Ok(Ok(_)) => i18n("Big Game Mode manages falcond again"), - Ok(Err(e)) => format!( - "{}: {}", - i18n("Could not take control back"), - error_text(&e) - ), + Ok(Err(e)) => { + crate::i18n::labelled(&i18n("Could not take control back"), &error_text(&e)) + } Err(_) => i18n("Could not take control back"), }; crate::widgets::toast::show(&b, &text); @@ -312,7 +310,10 @@ fn on_switch(row: &adw::SwitchRow, apply: impl Fn(bool) -> Result<(), String> + return; } if let Err(e) = apply(row.is_active()) { - crate::widgets::toast::show(row, &format!("{}: {e}", i18n("Could not change it"))); + crate::widgets::toast::show( + row, + &crate::i18n::labelled(&i18n("Could not change it"), &e), + ); reverting.set(true); row.set_active(!row.is_active()); reverting.set(false); @@ -465,10 +466,9 @@ pub fn build() -> adw::PreferencesPage { b.set_visible(false); } Ok(Err(e)) => { - migrate.set_subtitle(&format!( - "{}: {}", - i18n("Could not fix them"), - error_text(&e) + migrate.set_subtitle(&crate::i18n::labelled( + &i18n("Could not fix them"), + &error_text(&e), )); b.set_sensitive(true); } diff --git a/bigame-engine/bigame-ui/src/views/tuning.rs b/bigame-engine/bigame-ui/src/views/tuning.rs index 87f2c9a..e3dd5a0 100644 --- a/bigame-engine/bigame-ui/src/views/tuning.rs +++ b/bigame-engine/bigame-ui/src/views/tuning.rs @@ -33,7 +33,7 @@ use bigame_core::optimization::{self as opt, Feature, PROFILE_SETS, VCACHE_MODES use bigame_core::overview::State; use bigame_core::video_config::{self, VideoConfig}; -use crate::i18n::{N_, error_text, i18n, tr}; +use crate::i18n::{N_, error_text, i18n, ni18n, tr}; use crate::widgets::launch::{self, icon}; use crate::widgets::notice::{self, Kind, Notice}; use crate::widgets::optimization::{self as ui, Machine, Picker, Scope}; @@ -387,7 +387,7 @@ fn report_heroic( crate::widgets::toast::error( anchor, &i18n("Could not update Heroic's settings for a game"), - &format!("{name}: {}", error_text(e)), + &crate::i18n::labelled(name, &error_text(e)), ); } if !written.is_empty() { @@ -466,7 +466,7 @@ fn report_steam_gamescope( crate::widgets::toast::error( anchor, &i18n("Could not update Gamescope in Steam's launch options"), - &format!("{name}: {}", error_text(e)), + &crate::i18n::labelled(name, &error_text(e)), ); } if !written.is_empty() { @@ -1650,13 +1650,16 @@ fn build_advanced(falcond: &FalcondSaver, m: &Machine) -> adw::PreferencesGroup return; }; gamescope_row.set_subtitle( - &i18n("Version %v — %n options detected from --help") - .replace( - "%v", - &gs.version - .map_or_else(|| i18n("unknown"), |v| v.to_string()), - ) - .replace("%n", &gs.flags.len().to_string()), + &ni18n( + "Version %v — %n option detected from --help", + "Version %v — %n options detected from --help", + gs.flags.len(), + ) + .replace( + "%v", + &gs.version + .map_or_else(|| i18n("unknown"), |v| v.to_string()), + ), ); // The generated command line is the honest "advanced options" // box: the arguments come from capabilities. diff --git a/bigame-engine/bigame-ui/src/widgets/optimization.rs b/bigame-engine/bigame-ui/src/widgets/optimization.rs index 7b26adb..e79d8df 100644 --- a/bigame-engine/bigame-ui/src/widgets/optimization.rs +++ b/bigame-engine/bigame-ui/src/widgets/optimization.rs @@ -657,10 +657,9 @@ pub fn report_save(anchor: &impl IsA, report: &opt::SaveReport) { problems.push(format!("lsfg-vk: {}", crate::i18n::error_text(e))); } if let Some(e) = &report.launch { - problems.push(format!( - "{}: {}", - i18n("Launch settings"), - crate::i18n::error_text(e) + problems.push(crate::i18n::labelled( + &i18n("Launch settings"), + &crate::i18n::error_text(e), )); } let mut note = None; @@ -681,10 +680,9 @@ pub fn report_save(anchor: &impl IsA, report: &opt::SaveReport) { ); } Ok(_) => {} - Err(e) => problems.push(format!( - "{}: {}", - i18n("Launch options"), - crate::i18n::error_text(e) + Err(e) => problems.push(crate::i18n::labelled( + &i18n("Launch options"), + &crate::i18n::error_text(e), )), } } @@ -763,10 +761,9 @@ fn heroic_outcome( return Some(*launcher); } Ok(_) => {} - Err(e) => problems.push(format!( - "{}: {}", - i18n("Heroic's settings"), - crate::i18n::error_text(e) + Err(e) => problems.push(crate::i18n::labelled( + &i18n("Heroic's settings"), + &crate::i18n::error_text(e), )), } None diff --git a/bigame-engine/bigame-ui/src/widgets/status.rs b/bigame-engine/bigame-ui/src/widgets/status.rs index efa8d3d..0340957 100644 --- a/bigame-engine/bigame-ui/src/widgets/status.rs +++ b/bigame-engine/bigame-ui/src/widgets/status.rs @@ -10,8 +10,6 @@ use adw::prelude::*; use bigame_core::overview::State; use libadwaita as adw; -use bigame_core::text::Text; - use crate::i18n::i18n; /// The label people read. @@ -114,10 +112,9 @@ impl Chip { // A short text ("Turbo", "vkBasalt") says what, not how it stands: // the state is read with it, not left to the colour and the icon. self.text - .update_property(&[gtk4::accessible::Property::Label(&text.map_or_else( - || label(state), - |t| Text::fill(&i18n("%s: %s"), &[t.to_owned(), label(state)]), - ))]); + .update_property(&[gtk4::accessible::Property::Label( + &text.map_or_else(|| label(state), |t| crate::i18n::labelled(t, &label(state))), + )]); } } From 1c311d8a660e6bf2008411ae837c18310eab679d Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:08:59 -0300 Subject: [PATCH 10/60] docs: remove screenshots nothing shows details-gamer-light, home-default-light, home-game and welcome are not referenced by the README, the AppStream file or any page. --- docs/screenshots/details-gamer-light.png | Bin 95636 -> 0 bytes docs/screenshots/home-default-light.png | Bin 116065 -> 0 bytes docs/screenshots/home-game.png | Bin 162217 -> 0 bytes docs/screenshots/welcome.png | Bin 160565 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/screenshots/details-gamer-light.png delete mode 100644 docs/screenshots/home-default-light.png delete mode 100644 docs/screenshots/home-game.png delete mode 100644 docs/screenshots/welcome.png diff --git a/docs/screenshots/details-gamer-light.png b/docs/screenshots/details-gamer-light.png deleted file mode 100644 index a5db6232e4df96114adc18d22e55ff340d42e2b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95636 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 z 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
0c3G#Ga2g@hs_0?N`S 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�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

    x)07B*)h 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⪆si_(y>*4$cbbhX1nr~pbiOED2PEm(r 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

    |iD0UoO5;PyXsd>E9^Z*a^ z-!%5Z3QS6cf2X-$Ph<0pB9jqZ82_8Lq1cJ7`WflP$1@-NjAkfO}bL@CB0Aj{UjeaMK_ktk!>;Jm7GSlczNCQg7Jh|_YU%JNy&bChEB+-xC<9VfJ3Uw^=#g`2 zccCluExhw+bFz-AMJi?oc5>J1B{E?RxRV|}R~B81G!?W%-vd!Pu=_>&b(Dpp?fpp zHJ0BYC^=ElFLehcR246J1@$E1lCTrfO|^--9p; zoX(&4#3Yph4sec)3|3fLijMwP{KkwE=~g=W9FwTnVPR+X&wSx3n=#I zf*@1x!w2OCr)YOuT`3p_zgs57c$h@rT?rzgvDixa3J#WcUP7Jm1H1VEr0oZ`r-Z7> z(m`Mg+`4`H3uq)^mQtIkop4=?_PkpWweNz}tjCn(+Q`6_CMFGM@fD zV9WY3Lo_udfChy!!l6g6SO;jPouYG20Q^_%S(FMh5dzh;rGAr;F*f#4fc_1D4-xU0 z5(5&RiA_G9-sz(&_RA>XRZai%g&EJzV`~ znv~QnhceVP5e{FzCX`zZQG0AnZNq&LM$}KjqD*?ftabe6ex;!?_%ohcugc{H1alSy z9D)V*!*9HkjA9vcS^rDceA?pab+iN(a>R1h-|<{Q31EZ1eQQ(fi_Nz#GTeL9w9~Yh z_Z{fGzA`o*tfJ?31^4LqVy$z!OdVHVMZ2b5y6=+=JQZ;L-L*-B5lfkxdU~@b{wRaG zpSHuZ+4y)XDM^ptSakvYhf6hCJRY1Pp^;BlKlRC&9jfN${6_HVslN8kj353}X8bp_ z0c`wyb1G!N+-2oA0$>T_wWfUB(d^%?hGq<5USyyUa}!mQKT`|9A;w1u9P-#*qX!Ro zKCWF`XxuGNzZPXW8ZmUQ^aqGPH{Q6ltI3|!C=kBVH0&P)cus>;1{zJgeb%d6mz1$A z+e4ZpWXqo^fJustr3Ln%y7@isl5d^6NGa^>D&9s-9=^G$;1LYW8US~t{MK*V>hO`` zb#^Q|`=xyM_b_V4I($+WAQioKwAR(&2vdy7Xwoa&B{@50X({;H*KJhs0pxKm7vES; zF_6qXYvVBBDFIjtb|6rT&opZZc=QQipFpNx5>uDvnJiYA5TEWB9+%Sz5IEnLnbMCu zJQxTTI*r<+w;=n#8p5k=B^dac!zmaCv{Kt58>{w7;aX!+G!C zM^BVr5QsV%c=bBcJ*T@=1mu<6-Ngui0{rs$A1?f00WCOAQQm%gW-Kp^j!RL*eNuI- z)ZjPBBk*~Fh}FPS$6k(nqAjGl2_!RkO9TQBaF+TOLcq9<0*9suHFY{D_9WOHM3&OM z{Ur!(oqw+&_=!yPGIQ)%q``; zFA2=%xxB}v{uFy;C!*9~API!6020lAnZco;FtmXNTmGTOVjQU zy(6Y?O=LyTX_!_Xb9kxuMPHKBz|;ELDf2%_U$t7xs~}rn98HAecIrO?cFYAl<3UiU z>2RSZJ8)yJ{n&O5U~N68oN2nE+2`WbXY#==z$eYX;sM9;194j7qgprDX#j-i=m8D^ zq|g$&KPm%HF#yi7aK&JQ-EDPTW?SSzAo)>UxkHc=3<4wgMN4G0z&&1G6R?b_60*Vi zj)A}H{_)4Wr)SV|DZ*lL#mHgAc^ob^7(f_wy4vnZMnz`PGoX?z?#Ixlfa}<~Xcp*t z6INU6l`vKL1@I?(tr*Anq}c9x7Ds0piKEU;`?~wcjE^4$4ryuW$Uc7i_824{If_wt zWH~>B+NZd5`-WL2F&j!ios@$PEx@QNtEtT`_AGp2mC2s*s&{*iN4~2aCOSeWR=VrI z^gQ>m7YmzisE*IbPy|g70GAC4rBjB7UlH&d_0Ep}X$LqBD38f#Z0zgczFkWNbL~n5 zPHP3^E@?8Jp`SmSRr{S@1{}}kggwSxO#T*KnHUNP`*UBud-&@}Sj?#Dc41&Ux zV#5;GIafdo;_=@%Z*Bl~XYyr&(ef`4;0TD9a&yZ>KKV&{?_PJls}(Y;iIj%z#k+U+ zKv;s0POPmNmDSY`Fby=U;%OktPLp*0R8)lD9b5i!GXD%y85G495gCD>XokoT>?IPC zw{lT8#X2#9}9 zc8&w*>c@(Wo~hdLUYsEY9W5;eyHIM1&=~a}KuY`xEuZ`RZFNWCNUNDmeUu0Y-|IKo@hB-*3 z6@ZKm)bYbz_(au064G;9$GD`I}D|9&^cKla|34ybisB&cqHI-yv zoVE8oy?pAnk)Vq5zqrrKI}7A}jS1qEM}rws1K(9{00S^mJeF5;`ruwS z_XFt^({?4Z;-7QC_JGLw^!0IDTbtKmm%@Tlj9d@il2r@9oW@94Wxej*%Fedas|lU| z#)-%De;>M$AWyVrmXX>Z76#xpC6nYw;0oRv^)BM^gCT;Vyssc2t#RH&!NOQ&nt?!^ zmR|9gV&5xs_`6l##s8O{lUS47v`*VV6wiYYl#xGe0R)r)J)H-B6tPg$-ts62Fg}0= zi2!4kChMKXWjVl(+(}iYXuBQJp_|c`p9#c{A=Xsw$3C4Ppk)$!&->?3dQ0%?%XCTTwp~!WuC{i42zNBZ zFNn8#?`U&0wI@CwgyA>Z1+UP=IEjnxh5R-XmB#T2`PJ;{>eNM{el_wk45?F9GHoBQ zuwGYtlc)Jjc#{iM{zk00+I^!D8sD1{0wZFtrI z9_{JV`mf1gx7M)aDE&i!ExuRxk9wDT{GoKCN9Y0%#fTwZdax*g^GrdHQZ~?_m0g;J zM3 zjCXe5{(qUY0ho0P2y!G(Za6H7*V7ZII5zYZ`#h-iC`gN@s*^xK|07zx}#j0suplWWA18f79F&_sVeO-XjmNuPT{q@Uv$^$cf zt*+n7&5fI~eHIfVyKFo&sDlwjxi=kk@~EbZ2Ys(WsR4);zj8K{;ZcK`8_pex!iz(q zE-o%p%Qg4AOx0IjmGtG-*ONpx`JPswPL3ouq+_mMzYYY6eWpAb{|Ur~@yqBbJ~J$c zT(fS(&7^kx{_P4Mr~%mc)tUDP+Q8kcuDcAe1dP|#zGu`h@!{lpn4dIGlFBRQMu%$f zgfJLGxp)$wo!Nh{0p}Cw=!d}UQcYa~op^&~wi^?H${;QKM}s@5b#v7Os{4pk|G@m5He7-vjlZf;W2c&#*dp~kh>Iz)n}_12$Qpj4np zh5SvTFz6aRpB=_tEOHT=+WkK)iX=b;)y}p-hz}B6Gs9&$00Du(rDi7%kmNOn+jrKY zz$&t-(liEKTvNlu{_oDb7}(%%HA7$7H*b=wPmbMVA+akSren0wzL(Ca99niWMzMmJ{N1A>e=)xSO9gfn;mph-Ys^f3FC55Tm$Mj z`+=NSV}b%)v@R{ReQD|@U{;4V>kg#+&WJ%9cHkJztMt8()nSE*#cR9LD0eXXA0JN!dUo$#Cnm|dMeKA4!l?zz>$hP)M!PO($0esKAw|n08gyyKQ)6JAgWZq+ zD}8IAfMEY%AB;rylQ8;g*PcE$v#PNS8JIo>t`CUAm`+wEyKNJI zfjkuNNkK$m-Wkn(>sB0|m7<^!q`ai^iZ;($Q%6S;B#GhS;l+%Gr~0AHsi6XmtYN7> z)JsGDDAd9x$Z~--#d855!#g`%>)NHuIhW4dw=$qU1Zn1c79eJ>(*Db03~BtA#d!Gs zJu^T%*|hQo7VGcBLCgBL?PsGmWoJ*HE(8B;IoKF7<Mv(x5pG37dLsXeWE(ca*B97SE-m$x>WLySgUvdtEzI z#A@cqcO_d1Xm*<-2JPK8#->kC>bPF6L|L~XNZ>FKoqkm`4TvTGe65P)qP1h!4mdp-$*@>>XX2Q6UB-u4vZnNE8o zqXP=W7V*B#o91`bQrZBz2|CB!-O$V%3QRenXrKZBqaffCzvaki02>J^`Tgp{zH!XMxK!QvLW?%wpq{>XmChH<)1_oVJwp@WX>H6SfG-0h_t}l z)P}9(ydFF@_aP+m6m+tc6Rn4cRZrWO54`X%4Lc8td_Rh@0-BVOr~EX4Ea$4%hr$z0 z&1{7l>343nFb`JS(HbT(A)(xT<1W4&2DrD85q^CBDP%h)yNy|wAnXR1H-No-Q+Db@ zY1n@ky*ao-{Y&mA`oMx+#ZDrY&E(S?AW+K<2mobDY37+hK1^6kyEmm0<=Q$cf2B-+2HE;RjK zf^_k8W67&wj{|8rwkNnnY7~yUg!Csz9`}>HERs6`hZ}kX*e8FNLiCHCagQiI^<3|` zfZ(8wnB$GXJSP{6X}=-FJs!T%c&BH%YBvDB4GJKZPhc4L_)r=OiUkmA3`Pto+yOPV z1*bE*8@@HVTKNNSr_i>iNC-A7#QFN!e|e9z8nfM-k$-J!g$uGn?i21E=3vmRTGMwg zoj$z&itIHKB6gfOx@1v*zM(8{h*}sKcrFHj{KW_!{s(4TDc5 zYJf5yKg>E=45$6?xF;AXGia%Oh5a~oNwJuQ&RR?UY?f-p2XdmeWbq8pp+&|g)y<9# z`YR1N%IY#t-cQ~rjwwXzzslv(B)G?_39eT?WLyzVAr9E*Xc6-^T4~VZ>^ZiQ;(@&Q?}+To#z+E>BfbrCXgt*q{&zN=HEPB(FCdAquHy@aiw1s9 z+1$ttlZWsRT$f$#O_&4q!$JeCiJ$1*q%(Cs{K)<&h7i)u+qXRb`}$3(({II&?H!_O zm?i=>t4LG$hGC?#7QRgEpQ~YVx72^v%5=U(X%%%u!mFq^-AWJw)!h=+H)Um}Gg=ke zwLM(-VNABpbe&zzY%QxldROqgOgU2HzpG(n&ilua6%8R3<$LZylaZ{hD^$_8N3-3D z)_*ao@ON5snHz#)t)^~k4PU%_TqS*1PYnAf?Fy;hIWpKWSL+8BP~E$#_wQ^-SBBbL zya7)0XHaIYV`2yaIc^duS~4pw+CI-Dj=f)>S8RsL&fkn7uPzYJQl|Lzj_yBG;r8_S z%rBHM^tbWG&<9gJ!7>veUS8${nh@x{bK9QNh@HAvYXtUEWYg4*(C;t3i>UIR<*xlZ zk#6^*Et_k_PQ^B}Bf-6&I2@Qx9It*;!asdlbh2C8&5cHlsr7IJ8)Zsdm-wV6UmcNP zM7Nju-|2~?ZvW2zwNDOflX^aBV``+ZEM>+;`agFUA>|}J2(<3X>l#qRPEJBYRj$1I zn|_OKFZ_S*Z~YOaCOfk;^x+Y$7Afvi@akMZ8_Yu@O1zw!WnF>SRMK4OoHB@`hIaU< zRkW&!hxpoF7#k7i2>IuQ&JhVy1|v?TKldvcvmXiRm5tj}$WR+apD1n#4WG{ZkZTm1 z8hBx$cI)z2#%^Be?(oeh!`em&1q8o&oG4T%yKcO@NP#xd=a1y~5j~uPG^8rBya}7h zqeIvd_DrPqbWf6pUQBR=UWdD_0p&0I8BY0E1ouWhoVjQG{#XL}?ux!=)uOw?grLmZ zdS#`6zVYzKozUFwIJd}~J>w21vDz-NM%JayyskMqpcWo^?Z#u&NJqkegUW@f+={4i-=}W_?S9 z1p8slFXOI|@9UN>dowe!;-oQ~BFpr|s>$OUca3rsf4%L7Pf4yb>I2ix$;ql`k6t;; zsWfdsr8JSuR$bsChi4^2pj-CL_HS9wM5sh$qv@Vt``(C*9v8rO5rTiO=ylKlbmXeZ z+^t{ztcR+R#884f>)$pyA`aCdw-Cf|zko;i#7L`WiMJLid&1=a5%W64l-Qh!A@uId z!}F@9Q;sE#7d#Y|pYg*iP1)X#3O#7HVX6`%z_=R~?UpvF4OD5Jq_A5WKqG0+cX9gBi$iMV4abR_$pGkHfbNaR=jrw8#mQ)eaNO z8N$?=!sTI09tN%?2aTLs`%RI?>I1^!+hA|UQFk1e)7u0o2r^A$SoA&#s$Y6=-k_iV zM{&$lD_?{DX6GyxH9Nirl}Rm1&Es1ICX%4%f?BfpDeZEk!e(s*T}AB$+KKjU|5LW>W%1Ll2t?o$=eit{gi5Nx<8*+GY+#f z70j{H|55U@L$p|R(>+rsi9O?dEe4}i4fWVyCHW0o5c>O`1 z0A7H{l|ns@hFFMc@}jz4uFA&gup)nM0+DS6IWbL`x(xMZErCp)TYIr8&Osio@WjGb zk+wfY&RoA33}1Tq^!z)RT7vrD(Ntb=2;A*2w$KEt+m>XTI&-r6|4SU(GnMf`Q-Ld!Av3`3bK7)jJo?edl>1~4dzlX?onbcH^^omCfMI@&3 zeX!p2@Ee_j)ZFe`VwSIHpM17-k@tkDx98`y5ecNF<;GSr|vC?+PPIyyUv z7Y!87+QYn0rfHtbx#g-AqqdNq?zO^OJD$f?I10uQuhXv*Rd5jfSi6TJWvuKUwsS}q zVXjj}AMXU8O0<4-E}Q2vsOjL3ouV%n=HOy&Yn#h!Fj>9#F*0nP6K%#3`ODsqEc@y z5lmsOBgI~Ff&M7JQCaG;Ga9iv! z$a|e==czXgo}Lb82Z6(R&~i`2T@MGykgWjhp_!R1=xs#O9!kB;h`XQ%8)PvRQX{4{ zQ*M2SVtHt84TX(pY7qZ*ICkf74IT+?+GVV^GydH?or?dYk$iQ56;W9#EkyqfE$@@9 z#EB}uOES%dee4-nF;mlw#3K=?SA;Iaf9CY0h7HZ!m)O+REC(sGzF0Yjk;1mmH@9UH z_vd^{ollHvewj`SA8$`~K#ku=Z%@akUwmQ}i2z*_!Y_QP%lx;jd>1xO#A`P%lGPnA zqHl=<(Dz^5Y3Qo#z2R@mTQ3%*>nnlx<>CNULO~RXc_8OlF z`iU>TZBI~pWki*2ngQ#=`CPFa2pN8*+(2OTIV+3cn{;bTW28!}S z+j6%>sc>+UwzZjz*?H}+RPSgS+EEbhl*%nF%Ai85;j@R<;}xW#G-2#=dfpQ#n7jlKT1-Aiq}zmdoaN z9ce&n0`KzfoVj6b?DE(S7YfG@7)%O<(>0vae8>IfW+j&jL$ZP!N=2n9tu4mox#nTgObYhh4V}tmJIZlU5QhI_JUhM z(VgkRa`E}TZne)~6M6`?zsiMLAXPYj9@PH#YkGVi40j;iaI%@Bo@v~8KH|EGgvLtD z_#!s;C4G)%VdtZcQXc2GYi3-yVsL0uyQ$ic1@4zb)v>O}{noPQ5QV$K!k?|MyVp=q zH1d4W3il+DKm8Oz0W}5vHf8tQGX+iCBr~vErOGM|-6>TpDPoyXN67CgR>r<_rFK)5 zA(^-nt&Xm)J#bD!#n6s728*_m{~E;2h9QKZmmGocV&>eSjKdPQ`gtr>YV}{9O9VJH zlAR1}TBWJ4ns^FiQTY_0{Wlg?k7`j+-*CWik$|W@%s_ zw&mt}P~$e0O}kc-WsKXWcU99b%lSO%HBOR4>HOM+)0iBsRGa!^ul1*p_9+Cu^WjQ7 zSeb42%r59PrYjz7^i&C@%gHLD%wDrOXi8+L8V12J&(F`&K!d?CtXmeEx=cbu<UM<2@9s%%x0Jif*iBes_)X__V_*+){``Eu1B1QB8?Vn`2zq&H zzll9nQ=yG6n{+$08lyHFV+pq*j_?BYCASG4^9m8(OeISi^dazgab+qghraA`KvFQN z`@Xki%`D25B>zkYI!G0_P#lIpcoRkJ?IVeo$As{Hw`)|g{iRTLVAl53BW z;C;JREU}l0!p2n|Myl31aBAhNf`jJnX);za8_rYoC3*EJ5#%SBc2;TMFA(hH1tEQD z(_Zw!MIzEu*nf(tw7pi^7kw{`hW#=JH+Q1ziokGwjpL(jpna0Qqj2FSgte=s%wZ8elyGS`6W2J1*ltM0 zUYz}MO-dI|kf;f6A!# zmP`^j?NBpGQo2;kwY@P=*b8^U=$Z}-8qgbrl{uZ9N}J2Da&a|PBg1p5t=}5C+#p#U zYdUrfh_rsCNvZLNHjw~X)AIL*pewbZ2-#Rkuy$V{^U3Ls1J3B;T*?4VTD?odF(Dsi zer)|(yKMp<8%rSfevBl*q;P=LY3~~!fvkTUgYWXvL|en~D}cFO4kR$DZ-J{f45`=^ z@i`GoLYu3PGY*dXNcvOA5CUbR+Z5#pu`AToO@>WJ{9nE}{odhuC)Sv#O}F=wFiSbr zqJG*@z{Fh4e&NWoU&eF$mH;eZgK=7dp`bBgsO3WTcwy(DgFa?=2-?)fQ!4JSUK{i?Y#Q6VoZ>8tZn-$z zK_zlTh9o612@4Ceu;!H@9UGF7i8HF2npUdt+xLG`$ariX*WU!Sfv2TA7YdexN#GF3 z%RzTgreLfkB3FD|R8juzvkB&gHn;;63(M5hNu@s`|3leg1sn6ZvM%;@CEj0%`GGC=4O2yy^Te+zf$p9+60LshFEW9Z>3G>m=6)F7GC%k zwjJGU#!3!lhN&yKLz=AyCv6DFSZ9Q$TZ4e`sa+K@?)2*7Vw*a9Ar($F@zk1P4r1?_ z6S!YE>Cf3bA_u%uR>WPSWU~Xe{H3=#BbO}d!vRDOdr+Ae#){>cZWIdY;(-qL17Ax?{_4WOwK7!lap0WWkhlcY zX%`gGf2;IBuXsUCVzy@d;mectTb|yXdOQBrPz4gMAaDdvuDW1(gE4+cDT^s z@f0l4Tf@V0N|sm$T)LDHT{K%*6UMGIr^~MDGOMTR4Z#*2E?PUan4E7}j_gR(eNq$5 z%kIIS?AX(KY6G70idsW%rUHO7yv3(*S-I9?{)r*o%Z_mp03Pswm;P%)}UmU z|57{7G_obu3pUHoU-~^m0w(hvw#qNJ6*V;(V-{i}B5up_egbA1knVye4;4VYv50M?a|udXXP zbFm{_>->;AM%c7XFO>R5M{&&*)9?|%x;X>QQ>s={bve&n4>QeZ&Pk{$MoDCS%BvI8 zc#$xboxtxWZHsF&`G1B_ob>jRw|+K8I)?7Zk>ie%E*h=BZ`G_JcLE{jBy4E@DQktL zzTN_y+z3B7l2e_(gVlFhV5B;_+W&A>lRBYCzEy2| z_IHD0`SyV`rBE^y7FtajaE{Wd9vXrKXyw~yDje~6?dR{VD70k}#(uTmu-as*T~kEQ zLB-Bwd|7^+l7?0(viwvg00<;mKw5ba@UIu)cAa$2&F8SB))~M1Y#8sg@4DXDQ|JLoU4C%iVn@jIT(9|Jn%!mn@D08IZxCke zm7vCwa8L-5?@=&DOBhr;kj}0t$oADb=e+r~>Blgbx!`10&+tjOA2usFly!cmyz`6raWtKZudmCPQs)dV=(s z<2zX@$^}O>snhwrFAPW<@9&!>=}PooE7!Z5iE}#Jv$A(%tn3EdF498_Ke?gdI~*58 zlq}X8$9q0y^IAy3eDz72&8Sp@CQM7~H7|_&5FCwxn5=jhz$YB0?dFUvL+#mcy9UY= zq<&|BD;__)EPLXaat$jL>b>o)S2L(X?=oLC+`zawX@ta8Ktr}I~V`23`UT%jf>B0!P1OvJ~1?%0hfvR6k|2Gm!Ghe`1-Nx{l zlG1)(n8)5mA_J)%HNZ(M9B|MvhkK!ZIYNfw9G5cXYvkVacU0&Usiq z`*asg#=7{8ZqkB)7g>|of?u#AegXIr1pa+CHOl@a9&98?zKp3eq^s2rsOA{{05(MT z)y@b6MT*>DmE(0i~dY*Gz*Exuj;Q5wRk|zsjLhZcH&dPD#nD z$J25|}?5d$W~6slfS$0-kx} zbh&Q5*vgi-p>UU5Sl(HV%HD)B%1sxISZ-4YU|~dV6YA-ZaI07KixQnqv#jIJL)6Pg z4+~K_Yks_(W{gG8IIc2Txr&eQY`dPh)!*V+5TU$8(MoL4CK$x&y;2vM;r^+&biRcA#cv0sMjEDYH0_4mY3VhtJ$^Eq$E`4s&ZP80%_WEK{BQ8-^{#=Q~6ub^q1ZTs! zWS=Iq`1&0%AR}|Ns9OU!ek4^R>WakJ&g|Y%4#GzjF{LNTZ7>}QoN879xv+py(;WN5 zvEO2Y!s}Ox20FtS;z)q*gmOT!!rnbsQn@E)=pO{1299r=M4Gla{W7R8NP$9-3xh24H1jD0It|`H}YZ zH0g^Jkz*0H#FWCkzF`L%0y5qwL#MGGpxCR@Ak^7{jUHmG-LewKZqnHT8I}-#H4w-L z)(>)<>>U}`?Ry{OHh9LXs+qvfV9Gm?as-v999+TOWyFtp=YoktTx1=u_fcatL-41r zaxaMxwqv2H@Z*?@`(-^7Dm-h6z7<__Q|d2SR%eC<$#K^JI>anx&9ij}Uet6c>kXy_ z-eS0Ze=a`y2?)R`CVcl34Obh(>5O16Rs#N#bm*`Mc0Z22!xV3$T0sJ@{2)glnl=y` z1Qv47eVN|vN`zEGodyqnbaLB&h5517BL~^k3^?AUBl%z zf*gM3!4T-0vSN>rwzOBaKa5qNr zn6Cx>=`e6&4!s;nM?`Fzq=Q^bB{cb7p7-&*SCs!c>-^h6OMb(d(osMpb8<#kw^Y~M zbr=W`Dq>Pv;lTsuZHue>Ta;htx~pDp`mY^H_f&bO}SB~_o~RpfpB zYQ&w9orQMV;=oTx)re?;D~&69R|I5Rw)VSL?|)n%(Bsc?ssH7Xx6-z@dP1%&*QyOuFy*+PXr@eXAid`!m?!0o1Ii);I%j+8U6b|KBDdbb-`XQT1 zAC`HC$0yZbRu?lv_YzTDrH|9#XpV?h&8iipS%Qwx-3MdlIcc7)k{O4u- zqT^)!l!N^eXqsYDJH3> z0%a9H7kN?MQ(qezpATu*s3;XDaI=rt{;_3MT)bwLqE>RWQUIPI?E3PRmiaeQZ)GLG ziA{>NXBi)Dr!e!Zh)@f9_Z#Uy#6Nx{aN@~zdP-H*_7=h7YUU52rjE>ZAFNyd5W`zq zS{8@vbS2%e+HD`qnZ_>|>N}$D2!E4lZT(|HY|3Ij9q-!pnk6;o>_S5PQyZ*WjEaEb zZfF%rMR`*1NaW(u_KNRh*K3{Y((H>GHQ|otYW|n#&ZQ2w#Xqo;&a~PT@2%-;=E?zg z%K8#iaOCsbE$~G8tLQ1;zOG$QlZ9VxZg2A{#ItPUO(=P)sX+_$EsbosE28&Gdso1V z&7K#|*21#n9=bJqx|JsWU@8c5*Z%r>5{K|`qgw5kR!^z+^tA3YK<3sQ--p$Xo*n#M zln|VQfCpUE$1DsCv400mw|QPm-@F_!vPW&0_xza!S(v(`nHO$tQ>OX_#Xsj?rO)1! zhfM~Ag7@J2`)fQ$0dD+cScAPxe9`r3kmN$!Yi{ zi=D|KqsI?@z+%YPs8KCe2%EdecU|naeDEN03$8U0AN`Cl%S{=auFAb>(E5q&gy%n% z1;v$I7vflmHWjy;>?wDgLzk@ zR58m|a$FNwy75N`r)E1m;0&KcMdQz+-qGj4?a+rpNW%*XY@#!ahtk4ngnuBO%2EDf zsXBVTi)YP!BHmKJQhhm~nvF6sC7>Fn#{3@QGgE@jmHR@A!3{`Tbl%vkYxF#}tv|OI z`+4J|2&Ela(0jGplJ~xFkBL)sx{Y0N%kWwlsSrVnq&4~YN`5q~TDs&!hB2(K6C?F-bKGPLELphH zXl=gzwht@uqo82_lvy*k3BOQuEG(|yS4tG}=;pi|)fmG1lifBOzfeBb{SVGttG?^dzm+HXK_QV_Ac)bnwoXau0u{`Ng zSHkH{f{02butlE$@e;G8G1zWXgYk;5<%1hi+*SW6mzk;!4q!4#;-@)svbQ&%%)}b7 zP>(H3M~8h-#@xStgc?m?To-K@_PauHNuciF;j+4K?8;1COmFXlL`|NNJz$?ba_2Av z;(sY?0eByoNPRGom;XliBCN4|Q|Lj#i>iD7EVrqoDs=*JXK_ODjkKr*O_AY=(c{2O z&#i>QoY%F@LK}YbLbpZLV*H5p!7^6K!^IAX<1!-OC~eZ3qbGAF`4dykZ>(pgy;9~umR5VFz)z{{08I@habEg6{2(7%e zrc44M${^$l_7nX|^IJsV$&VjD+<3l5(G*ra*op^LRm7n9TCeIzeQ_~;DI)}Sm-n{j zf3`|48$wCigu?x%K#jjD4epJc$0$^H1A2tWSLrEZ44K@Y!#?jDJ8!U>EA8o#=~@@S zsXns^5jUW_M)0BmzB?oqb@AD}Dg_kEA53(joP;*6oS@J?pJizN&i_+%^D|$(*E!PH zu>E07tI71O!}@wiN#W>0eJQFY%=FSdFzVZ|KVyrY6L~0bcrp;^>Af!=pR!epD-28_ zh#Z%C-0~G7+rIQcl&yB{&DiF7V#Yt*JLi1dM$SX#Xm`qK(@H~MnDfA@0GvSM; zl(T6*!$0OrSuSG-ix|!yq3e6vcjK=uC%kj&xwnN76uKfWTpnFJbui?bd~NL`_(++* z=PQxguV1^&nLQ}=-KRAVo#`&xgIG)^$xJ}asKV5t+1!`^nL$zIxXj9;vRLKNlgvS| z;mN4UEx=SK>!xEB0W0Xi^P{B1^rTf?S?Wyc31-N2 zGxqnC;1MRRt~TZ%Ijp;1?)Oq#^||ybV1*z1{NQ*6lhx7I*3j1e9hk!-(>c{H$xyxyw>{&gtp%IiPPkI3$m!+ZLrT93bY zdYMmfy?&iA&SU@Dr;h({Ze1hMd4v!=gSrQyA5d~rjELvK14$>hJ3qU0&3`d5h5q($ z*>(FX$RZhQ%}Q)3x30`LKmPMZC|ygY{L`netrTBBxZ{K{&KS!ctt7geSC#E=RGO|@ zq|;RhWKJd{ic4Q_=lX&2oUL=>R=dN8f4`WAT2Hn;{Ne2O=UcNGH@!4dq~x(@sHv!5 z*ImwU6o!25g_|1%9mW?cdphulwH2-R2H(D{ets-X9?1~sws}cCi<(#3=41EQx9gvk zpAyxw(^+GlDc(6QXgqUizFBpq@1bvREz7B!VMFkORIyz}h;o-*&@`u&|*41z6jd9D*a&y3ovM!ojL+7qUcmU7hQvL2p8*zn{o{NsNvmPDduYI;EQ4 zhH}gO>C=+_486#QeTK|U+rk8efC?w_oW9<@p^*OkIVOiWU_^sj%vhaTA3Jl}tZ+x~ zX>L#Aqdc&thgZdb7=l}Wq-_Jh#eYW@Zyzle8&-*;jzVEw~k1=a+ zHHZ7uh#rwF{7Fz?k}^)S_?|XfK~n)M92t6g8YUN?AI2#Mcafl3X)E{2JTna&-9@a- z*kfpjm|RVV|I}$+cvAVYRy46Xzq~8=iP8Pz?**B z7;IyRbZ=dy1|0W#a+vujeN(+>T;t8GDwGe{gBz{_sGEJDB^M43V$Iuk4kdNoC&pa5 zGc^fS^CynFue|3+!dZ%oFh*au%5>`k6eK|&ph=6*tmYwKMcFdfD~%D2bQkKMOrbQ_Q%=8Ra6giWC8H9hYkj_T;E9sXnI#56RCR@zvpfnE{ zQUTb>eA@m_SnL8dhS2I}#ZbRO9y;Fy5CpX@TCcQ7%GbD+tUGVBQ;>u-5Fo`8WYS@a zL<~bb9bB?9)m5o??sLrip~a=tenrj@V(#lF`E1x84}JM=(<>r0kuJRg1|JC{)gJNo z57vM!;db$O^L_Q-E!~#CE+WZG%b8REi82RZCrQfJ58n?7WyeNZ@~c@Oj?t_mr4pj_ zEQM7;KmF}5N@jZec)7i;T<1jXNl(cMJn7gQaDYp7Xq#jW6vC#>%drisD&8 z_!hC|zM@J$6O`4CrinJvO36$@=?#K4b*ANtg8J5sLh(#Oi9H5pkIC72&?+zbF%4#s zSzXv1XLPmwKULz^U0rL;9s4~utxNBfd*i_UJ!tr3p}fD7I-g%Ms^n1^qQ6JKJ@P*L zp=1)_rWM>nTTfo$LhgULJrW$IEOe7ev?|JjFgdC*ioy{#g@@ty{-0*v$zTXii7l%55h>IklR(g{Dm1tHR0#C;N9KaTn(1>=jB&mZb}1I%WV0L#jjdN(vp6nOsc4$*I;@y+Q0Ui-KDPapPo#JJR8aXAjkh==MjEH z!UCIoMo-h$;ODTYj@RNj`1-=LQz4atkqx-;gWEg*Duh_Qd38#ja>|dTX)?aI=kZ`= zzg252>{)5(F$q^u7Xr0b9VZF5cmMQQ@K5UH9s7f7#F!pE<;O_v&JyqBGy}4(iI~oy z{T*EnahMc5nG~!6FMEChZ7wPtb;9eD?n?y6Tay5O``bjkcWWUiF&}LmukAZSBxZ_Z z#iCvIW>vG|!`)&^S)EleWu=#(xSq+Yh3YB4$jFi(d*!`R3 zx0CP0t*S7OfSR&^7jE2lIN!skb`1--2~GmpMHMn134IVLD4XNhmIMU`Gk62~QORl% z+L?DJ$>C{iaO*eG1-ar|fL*$a$nr#_+B>F_)+rIy4uBXrfi@G_QQxzT)YJoU*Rsei zdyX(%Q}I(Rrb?S-7x{_3ab0cZk$j6zNpnArnJ9a`W~X6G7nXvfIX1b`x$9mBNih z1~b)Zi8+YLzVNBRVQ$NzxZ3QyOpAVczg~v=a3SI-eWEQl8U^TQT8ezvQoih1;$( z!WKnQphHu%GQp{=**Kg7Cj@vL{Jnem2E)w1L$(2_iPkwto07kWtvAC<<@+7)iAE_ Date: Sat, 10 Oct 2026 14:21:43 -0300 Subject: [PATCH 11/60] fix(booster): read the governor and EPP on every CPU The governor and the energy preference are written on every online CPU, but were read on cpu0 alone. A write that failed on cpu0 and took on the others read back as the baseline, so turning Booster off called the knob already correct, wrote nothing and cleared the journal: the other CPUs stayed at performance until the next boot. Both knobs are now read on every CPU that has the attribute, as the helper writes them. CPUs that disagree are no single value: never a baseline to capture (one write cannot put them back), never "already restored", so restoring writes the baseline; verifying reports the values found. The journal's format is unchanged. --- bigame-engine/bigame-core/src/booster/knob.rs | 160 +++++++++++++++++- 1 file changed, 155 insertions(+), 5 deletions(-) diff --git a/bigame-engine/bigame-core/src/booster/knob.rs b/bigame-engine/bigame-core/src/booster/knob.rs index bf3e9fe..50b9d3d 100644 --- a/bigame-engine/bigame-core/src/booster/knob.rs +++ b/bigame-engine/bigame-core/src/booster/knob.rs @@ -11,7 +11,7 @@ //! job. use std::fmt; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use anyhow::{Context, Result}; use serde::{Deserialize, Serialize}; @@ -88,8 +88,7 @@ impl Knob { pub fn read(&self) -> Option { match self { Self::PowerProfile => crate::dbus::power_profile_get(), - Self::CpuGovernor => read_sysfs(&cpu_attr_path(0, "scaling_governor")), - Self::CpuEpp => read_sysfs(&cpu_attr_path(0, "energy_performance_preference")), + Self::CpuGovernor | Self::CpuEpp => self.read_cpus().uniform(), Self::GpuDpmLevel { card } => read_sysfs(&PathBuf::from(format!( "/sys/class/drm/{card}/device/power_dpm_force_performance_level" ))), @@ -97,6 +96,24 @@ impl Knob { } } + /// The sysfs attribute of a knob set on every online CPU. + fn per_cpu_attr(&self) -> Option<&'static str> { + match self { + Self::CpuGovernor => Some("scaling_governor"), + Self::CpuEpp => Some("energy_performance_preference"), + _ => None, + } + } + + /// A per-CPU knob as every online CPU holds it. cpu0 alone is not the + /// knob: a write that failed on some CPUs leaves the others changed, + /// and reading cpu0 back at its baseline would call that restored. + fn read_cpus(&self) -> CpuValues { + self.per_cpu_attr().map_or(CpuValues::Unreadable, |attr| { + read_cpus(Path::new(CPU_ROOT), attr) + }) + } + /// Values this knob will accept on this machine. /// /// Empty means "this knob does not exist here", which the planner treats as @@ -226,7 +243,16 @@ impl Knob { /// changed", and it is mandatory for every applied change. #[must_use] pub fn verify(&self, expected: &str) -> Verification { - match self.read() { + let read = if self.per_cpu_attr().is_some() { + match self.read_cpus() { + CpuValues::Uniform(v) => Some(v), + CpuValues::Mixed(actual) => return Verification::Mismatch { actual }, + CpuValues::Unreadable => None, + } + } else { + self.read() + }; + match read { Some(actual) if actual == expected => Verification::Confirmed, Some(actual) => Verification::Mismatch { actual }, None => Verification::Unreadable, @@ -281,8 +307,64 @@ impl Verification { // ── sysfs helpers ──────────────────────────────────────────────────────────── +const CPU_ROOT: &str = "/sys/devices/system/cpu"; + fn cpu_attr_path(cpu: u32, attr: &str) -> PathBuf { - PathBuf::from(format!("/sys/devices/system/cpu/cpu{cpu}/cpufreq/{attr}")) + PathBuf::from(format!("{CPU_ROOT}/cpu{cpu}/cpufreq/{attr}")) +} + +/// What the online CPUs hold for one cpufreq attribute. +#[derive(Debug, Clone, PartialEq, Eq)] +enum CpuValues { + /// Every CPU that has the attribute holds this value. + Uniform(String), + /// They disagree: each distinct value, in CPU order, for the report. + Mixed(String), + /// No CPU has it, or one that has it could not be read. + Unreadable, +} + +impl CpuValues { + /// The one value, if there is one. Mixed values are no baseline (one + /// write cannot put them back) and never "already restored". + fn uniform(self) -> Option { + match self { + Self::Uniform(v) => Some(v), + Self::Mixed(_) | Self::Unreadable => None, + } + } +} + +/// `attr` on every CPU under `root` that has it, as the daemon writes it: +/// a CPU without the attribute is offline or not driven by cpufreq. +fn read_cpus(root: &Path, attr: &str) -> CpuValues { + let Ok(entries) = std::fs::read_dir(root) else { + return CpuValues::Unreadable; + }; + let mut cpus: Vec<(u32, PathBuf)> = entries + .flatten() + .filter_map(|e| { + let name = e.file_name(); + let index = name.to_str()?.strip_prefix("cpu")?.parse().ok()?; + let path = e.path().join("cpufreq").join(attr); + path.exists().then_some((index, path)) + }) + .collect(); + cpus.sort_by_key(|(index, _)| *index); + let mut values: Vec = Vec::new(); + for (_, path) in &cpus { + let Some(value) = read_sysfs(path) else { + return CpuValues::Unreadable; + }; + if !values.contains(&value) { + values.push(value); + } + } + match values.len() { + 0 => CpuValues::Unreadable, + 1 => CpuValues::Uniform(values.remove(0)), + _ => CpuValues::Mixed(values.join(", ")), + } } fn read_sysfs(path: &PathBuf) -> Option { @@ -411,6 +493,74 @@ mod tests { ); } + /// A sysfs CPU tree in a private folder: `cpus` as (directory, value of + /// `scaling_governor`, `None` for a CPU without cpufreq). + fn cpu_tree(tag: &str, cpus: &[(&str, Option<&str>)]) -> PathBuf { + let root = std::env::temp_dir().join(format!( + "bigame_knob_{tag}_{}_{:?}", + std::process::id(), + std::thread::current().id() + )); + let _ = std::fs::remove_dir_all(&root); + std::fs::create_dir_all(root.join("cpufreq")).unwrap(); + std::fs::create_dir_all(root.join("cpuidle")).unwrap(); + for (cpu, value) in cpus { + let dir = root.join(cpu); + std::fs::create_dir_all(&dir).unwrap(); + if let Some(v) = value { + std::fs::create_dir_all(dir.join("cpufreq")).unwrap(); + std::fs::write(dir.join("cpufreq/scaling_governor"), format!("{v}\n")).unwrap(); + } + } + root + } + + #[test] + fn a_per_cpu_knob_is_read_on_every_cpu() { + let root = cpu_tree( + "uniform", + &[ + ("cpu0", Some("powersave")), + ("cpu1", Some("powersave")), + ("cpu10", Some("powersave")), + // Offline: no cpufreq, as the daemon skips it too. + ("cpu2", None), + ], + ); + assert_eq!( + read_cpus(&root, "scaling_governor"), + CpuValues::Uniform("powersave".into()) + ); + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn a_write_that_failed_on_some_cpus_is_not_a_baseline() { + // cpu0 refused the write, the others took it: cpu0 alone reads as + // restored while the rest stay at performance. + let root = cpu_tree( + "mixed", + &[ + ("cpu0", Some("powersave")), + ("cpu1", Some("performance")), + ("cpu2", Some("performance")), + ], + ); + let values = read_cpus(&root, "scaling_governor"); + assert_eq!(values, CpuValues::Mixed("powersave, performance".into())); + // Never captured, and never "already correct": restore writes it. + assert_eq!(values.uniform(), None); + assert_eq!( + read_cpus(&root, "energy_performance_preference"), + CpuValues::Unreadable + ); + assert_eq!( + read_cpus(&root.join("absent"), "scaling_governor"), + CpuValues::Unreadable + ); + let _ = std::fs::remove_dir_all(&root); + } + #[test] fn titles_are_translatable_and_carry_the_card() { let gpu = Knob::GpuDpmLevel { From 090c1c9a5e365961031104f10f19c0e2c931fc5f Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:21:48 -0300 Subject: [PATCH 12/60] fix(fg): record lsfg-vk entries before writing lsfg-vk's file Setting Big Game Mode's entries aside wrote lsfg-vk's file first and the state after: a failed state write lost the entries for good. Saving a game's frame generation did the same the other way: an entry written to lsfg-vk's file but missing from the state is one the general switch never sets aside again. The state is written first in both. If lsfg-vk's file then fails, the entries are still in force there, which putting them back already passes over, and an entry set aside twice by a retry replaces the first. --- bigame-engine/bigame-core/src/fg.rs | 156 +++++++++++++++++++++++++--- 1 file changed, 140 insertions(+), 16 deletions(-) diff --git a/bigame-engine/bigame-core/src/fg.rs b/bigame-engine/bigame-core/src/fg.rs index d8e7061..348414d 100644 --- a/bigame-engine/bigame-core/src/fg.rs +++ b/bigame-engine/bigame-core/src/fg.rs @@ -261,7 +261,11 @@ fn write_table(path: &Path, table: &Table) -> Result<()> { /// lsfg-vk's file in `format`, with anything in another layout converted. fn read_config_as(format: Format) -> Result { - let mut t = read_table(&config_path())?; + read_config_at(&config_path(), format) +} + +fn read_config_at(path: &Path, format: Format) -> Result
    { + let mut t = read_table(path)?; migrate(format, &mut t); Ok(t) } @@ -271,7 +275,11 @@ fn read_config() -> Result
    { } fn write_config(format: Format, t: &Table) -> Result<()> { - write_table(&config_path(), &finished(format, t.clone())) + write_config_at(&config_path(), format, t) +} + +fn write_config_at(path: &Path, format: Format, t: &Table) -> Result<()> { + write_table(path, &finished(format, t.clone())) } /// `t` as the file lsfg-vk reads: its version, and for 2.x the `[global]` @@ -515,7 +523,11 @@ struct State { } fn read_state() -> State { - let t = read_table(&state_path()).unwrap_or_default(); + read_state_at(&state_path()) +} + +fn read_state_at(path: &Path) -> State { + let t = read_table(path).unwrap_or_default(); State { managed: t .get("managed") @@ -536,13 +548,17 @@ fn read_state() -> State { } fn write_state(s: &State) -> Result<()> { + write_state_at(&state_path(), s) +} + +fn write_state_at(path: &Path, s: &State) -> Result<()> { let mut t = Table::new(); t.insert( "managed".into(), Value::Array(s.managed.iter().map(|m| Value::String(m.clone())).collect()), ); t.insert("paused".into(), Value::Array(s.paused.clone())); - write_table(&state_path(), &t) + write_table(path, &t) } fn paused_exe(g: &Value) -> Option<&str> { @@ -751,10 +767,10 @@ pub fn write_profile( (25..=100).contains(&flow_scale_pct), UserError::plain(N_("flow_scale_pct must be 25–100")) ); - let mut t = read_config_as(format)?; - upsert( + put_in_force( format, - &mut t, + &config_path(), + &state_path(), name, Values { multiplier: multiplier.clamp(2, 20), @@ -763,14 +779,30 @@ pub fn write_profile( hdr, present: present_mode, }, - )?; - write_config(format, &t)?; - let mut s = read_state(); + ) +} + +/// Write `name`'s entry into lsfg-vk's file at `config`, managed by +/// Big Game Mode in the state at `state`. The state is written first: an +/// entry in lsfg-vk's file that the state does not list is one the general +/// switch would never set aside, while a name listed without an entry is +/// passed over. +fn put_in_force( + format: Format, + config: &Path, + state: &Path, + name: &str, + values: Values, +) -> Result<()> { + let mut t = read_config_at(config, format)?; + upsert(format, &mut t, name, values)?; + let mut s = read_state_at(state); if !s.managed.iter().any(|m| m == name) { s.managed.push(name.to_owned()); } s.paused.retain(|g| paused_exe(g) != Some(name)); - write_state(&s) + write_state_at(state, &s)?; + write_config_at(config, format, &t) } /// Write `name`'s entry where it belongs: in lsfg-vk's file when the general @@ -1195,9 +1227,14 @@ pub fn is_active_for_game(name: &str) -> bool { /// # Errors /// Returns error if the files cannot be read or written. pub fn disable_all_profiles() -> Result { - let format = read_format(); - let mut t = read_config_as(format)?; - let mut s = read_state(); + disable_all_at(read_format(), &config_path(), &state_path()) +} + +/// [`disable_all_profiles`] on lsfg-vk's file at `config` and the state at +/// `state`. +fn disable_all_at(format: Format, config: &Path, state: &Path) -> Result { + let mut t = read_config_at(config, format)?; + let mut s = read_state_at(state); let mut changed = false; for name in s.managed.clone() { if let Some(g) = take(format, &mut t, &name) { @@ -1206,13 +1243,20 @@ pub fn disable_all_profiles() -> Result { Format::V1 => g, Format::V2 => entry_table(Format::V1, &name, values_of(Format::V2, &g)), }; + // Set aside by an earlier try whose write of lsfg-vk's file + // failed: replaced, not kept twice. + s.paused.retain(|p| paused_exe(p) != Some(name.as_str())); s.paused.push(Value::Table(kept)); changed = true; } } if changed { - write_config(format, &t)?; - write_state(&s)?; + // The entries are kept before they leave lsfg-vk's file: written the + // other way round, a failed state write lost them. Left in the file + // after a failed write, they are still in force, and putting them + // back passes over an entry that is already there. + write_state_at(state, &s)?; + write_config_at(config, format, &t)?; } Ok(changed) } @@ -1608,4 +1652,84 @@ multiplier = 4 } std::fs::remove_dir_all(&dir).unwrap(); } + + /// A private folder per test, with the paths of lsfg-vk's file and of + /// Big Game Mode's state in folders of their own. + fn fg_files(tag: &str) -> (PathBuf, PathBuf, PathBuf) { + let dir = std::env::temp_dir().join(format!( + "bgm-fg-{tag}-{}-{:?}", + std::process::id(), + std::thread::current().id() + )); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(dir.join("lsfg-vk")).unwrap(); + std::fs::create_dir_all(dir.join("bigame-mode")).unwrap(); + let config = dir.join("lsfg-vk").join("conf.toml"); + let state = dir.join("bigame-mode").join("lsfg-vk.toml"); + (dir, config, state) + } + + /// `path`'s folder read-only (`true`) or writable again. + fn read_only(path: &Path, on: bool) { + use std::os::unix::fs::PermissionsExt as _; + let mode = if on { 0o555 } else { 0o755 }; + std::fs::set_permissions( + path.parent().unwrap(), + std::fs::Permissions::from_mode(mode), + ) + .unwrap(); + } + + fn in_file(config: &Path, exe: &str) -> bool { + find( + Format::V1, + &read_config_at(config, Format::V1).unwrap(), + exe, + ) + .is_some() + } + + #[test] + fn an_entry_is_listed_before_it_is_in_force() { + let (dir, config, state) = fg_files("in-force"); + put_in_force(Format::V1, &config, &state, "SOTTR.exe", values(2, 70, 0)).unwrap(); + assert!(in_file(&config, "SOTTR.exe")); + assert_eq!(read_state_at(&state).managed, ["SOTTR.exe"]); + // The state cannot be written: lsfg-vk's file does not get an entry + // the general switch would never set aside. + read_only(&state, true); + let failed = put_in_force(Format::V1, &config, &state, "Hades.exe", values(2, 70, 0)); + read_only(&state, false); + assert!(failed.is_err()); + assert!(!in_file(&config, "Hades.exe")); + std::fs::remove_dir_all(&dir).unwrap(); + } + + #[test] + fn entries_are_kept_before_they_leave_lsfg_vks_file() { + let (dir, config, state) = fg_files("set-aside"); + put_in_force(Format::V1, &config, &state, "SOTTR.exe", values(2, 70, 0)).unwrap(); + // The state cannot be written: the entry stays in force, not lost. + read_only(&state, true); + let failed = disable_all_at(Format::V1, &config, &state); + read_only(&state, false); + assert!(failed.is_err()); + assert!(in_file(&config, "SOTTR.exe")); + assert!(read_state_at(&state).paused.is_empty()); + // lsfg-vk's file cannot be written: the entry is kept in the state + // and still in force there. + read_only(&config, true); + let failed = disable_all_at(Format::V1, &config, &state); + read_only(&config, false); + assert!(failed.is_err()); + assert!(in_file(&config, "SOTTR.exe")); + assert_eq!(read_state_at(&state).paused.len(), 1); + // Tried again: set aside once, not twice, and out of lsfg-vk's file. + assert!(disable_all_at(Format::V1, &config, &state).unwrap()); + assert!(!in_file(&config, "SOTTR.exe")); + let s = read_state_at(&state); + assert_eq!(s.paused.len(), 1); + assert_eq!(paused_exe(&s.paused[0]), Some("SOTTR.exe")); + std::fs::remove_dir_all(&dir).unwrap(); + } } From 75fa4a8157ef1b72d5ed3738f2f2100ca70165ea Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:23:14 -0300 Subject: [PATCH 13/60] fix(turbo): bring Steam and Heroic along a preset change once they close A preset's vkBasalt switch reaches Steam's launch options (the Gamescope segment that keeps vkBasalt in the game) and Heroic's game settings. Turbo on and off refreshed Steam only, and while Steam is open, which is when Turbo is usually toggled, nothing is written to it: the refresh returned SteamRunning, which was taken as done. The Enhanced preset's vkBasalt then stayed in the launch options after Turbo off, for good; Heroic's settings were never refreshed at all. Both launchers are refreshed now. A game an open launcher (or an error) kept from following leaves a mark in the state folder, with a warning in the log; Big Game Mode's start, Turbo's resync, the next preset change and the next Turbo on or off try again, and the mark goes once every game follows. --- bigame-engine/bigame-core/src/turbo.rs | 2 + bigame-engine/bigame-core/src/turbo_preset.rs | 289 +++++++++++++++--- 2 files changed, 248 insertions(+), 43 deletions(-) diff --git a/bigame-engine/bigame-core/src/turbo.rs b/bigame-engine/bigame-core/src/turbo.rs index 1e36a4b..74023a2 100644 --- a/bigame-engine/bigame-core/src/turbo.rs +++ b/bigame-engine/bigame-core/src/turbo.rs @@ -786,6 +786,8 @@ async fn apply_preset(preset: crate::turbo_preset::Preset, report: &mut Report) async fn remove_preset(report: &mut Report) { let preset = crate::turbo_preset::active(); if preset == crate::turbo_preset::Preset::Standard { + // A launcher open when the last preset went may be closed now. + let _ = tokio::task::spawn_blocking(crate::turbo_preset::follow_owed).await; return; } let title = Text::plain(N_("Turbo preset")); diff --git a/bigame-engine/bigame-core/src/turbo_preset.rs b/bigame-engine/bigame-core/src/turbo_preset.rs index a3405de..c9d08f4 100644 --- a/bigame-engine/bigame-core/src/turbo_preset.rs +++ b/bigame-engine/bigame-core/src/turbo_preset.rs @@ -642,19 +642,76 @@ pub fn activate(preset: Preset) -> Result> { }; write(&path, &Stored { preset, before })?; let set = crate::video_config::sync_session_env(&crate::video_config::load())?; - follow_in_steam(); + follow_in_launchers(); Ok(set) } -/// Steam's launch options carry a game's vkBasalt switch, which follows the -/// preset in force: they are brought in line with it. A game whose options -/// cannot be written keeps the old ones, which is said in the log. -fn follow_in_steam() { - for (game, result) in crate::optimization::refresh_steam_gamescope() { - if let Err(e) = result { - tracing::warn!(%game, error = %format!("{e:#}"), "Steam's launch options do not follow the Turbo preset"); +/// The mark that the launchers still owe the preset's change: an open +/// launcher would write its own copy back over it, so it was not written. +fn launchers_owed_path() -> PathBuf { + crate::paths::state_home() + .join("bigame-mode") + .join("turbo-preset-launchers-owed") +} + +/// Steam's launch options and Heroic's settings carry a game's vkBasalt +/// switch, which follows the preset in force: they are brought in line with +/// it. While a launcher is open nothing is written to it (it would write its +/// own copy back), so a Turbo off would leave the preset's vkBasalt in its +/// games for good; the mark [`launchers_owed_path`] keeps that owed, and +/// [`resync`] and the next Turbo switch try again until it is written. +fn follow_in_launchers() { + follow_in_launchers_at( + &launchers_owed_path(), + crate::optimization::refresh_steam_gamescope, + crate::optimization::refresh_heroic, + ); +} + +/// [`follow_in_launchers`] with the mark at `owed` and the launchers +/// refreshed by `steam` and `heroic`. Returns whether every game follows. +/// A game whose settings cannot be written stays owed too: what failed may +/// be fixed by the next try, and the mark goes only once nothing is left. +fn follow_in_launchers_at( + owed: &Path, + steam: impl FnOnce() -> Vec<(String, Result)>, + heroic: impl FnOnce() -> Vec<(String, Result)>, +) -> bool { + let mut waiting: Vec = Vec::new(); + let mut failed = false; + for (game, result) in steam() { + match result { + Ok(crate::steam_gamescope::Applied::SteamRunning) => waiting.push(game), + Ok(_) => {} + Err(e) => { + failed = true; + tracing::warn!(%game, error = %format!("{e:#}"), "Steam's launch options do not follow the Turbo preset"); + } + } + } + for (game, result) in heroic() { + match result { + Ok(crate::heroic_launch::Applied::HeroicRunning { .. }) => waiting.push(game), + Ok(_) => {} + Err(e) => { + failed = true; + tracing::warn!(%game, error = %format!("{e:#}"), "Heroic's settings do not follow the Turbo preset"); + } } } + if !waiting.is_empty() { + tracing::warn!(games = %waiting.join(", "), "a launcher is open: these games follow the Turbo preset once it is closed"); + } + let done = waiting.is_empty() && !failed; + let marked = if done { + remove_if_any(owed) + } else { + write_atomic(owed, "") + }; + if let Err(e) = marked { + tracing::warn!(error = %format!("{e:#}"), "could not record whether the launchers follow the Turbo preset"); + } + done } /// Take the preset away: the session goes back to Tuning's variables and @@ -666,41 +723,51 @@ fn follow_in_steam() { /// Returns an error when the session's environment cannot be set or the /// record cannot be removed. pub fn deactivate() -> Result> { - let path = active_path(); - let Some(record) = read_stored(&path) else { - let unreadable = path.exists(); - if unreadable { - // Unreadable: the user's values are lost with it, but a preset's - // variables must still go. - tracing::warn!(file = %path.display(), "the Turbo preset's record cannot be read; clearing its variables"); + deactivate_in( + &active_path(), + &launchers_owed_path(), + |layer| crate::video_config::sync_session_env_with(&crate::video_config::load(), layer), + follow_in_launchers, + ) +} + +/// [`deactivate`] with the record at `record` and the launchers' mark at +/// `owed`; `sync` brings the session to a layer, `follow` brings the +/// launchers along. +fn deactivate_in( + record: &Path, + owed: &Path, + sync: impl FnOnce(&Layer) -> Result>, + follow: impl FnOnce(), +) -> Result> { + let layer = if let Some(stored) = read_stored(record) { + Layer { + levers: Levers::default(), + before: stored.before, + owns_preset_keys: true, } - let set = crate::video_config::sync_session_env_with( - &crate::video_config::load(), - &Layer { - owns_preset_keys: unreadable, - ..Layer::default() - }, - )?; - remove_record(&path)?; + } else { + let unreadable = record.exists(); if unreadable { - follow_in_steam(); + // Unreadable: the user's values are lost with it, but a + // preset's variables must still go. + tracing::warn!(file = %record.display(), "the Turbo preset's record cannot be read; clearing its variables"); + } + Layer { + owns_preset_keys: unreadable, + ..Layer::default() } - return Ok(set); }; - let set = crate::video_config::sync_session_env_with( - &crate::video_config::load(), - &Layer { - levers: Levers::default(), - before: record.before, - owns_preset_keys: true, - }, - )?; - remove_record(&path)?; - follow_in_steam(); + let had_record = layer.owns_preset_keys; + let set = sync(&layer)?; + remove_if_any(record)?; + if had_record || owed.exists() { + follow(); + } Ok(set) } -fn remove_record(path: &Path) -> Result<()> { +fn remove_if_any(path: &Path) -> Result<()> { match std::fs::remove_file(path) { Ok(()) => Ok(()), Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(()), @@ -730,22 +797,34 @@ pub fn switch(preset: Preset) -> Result> { /// found switched off from outside: the preset's variables live only in the /// running session, so after a login they are set again while Turbo is on, /// and a preset left behind by a Turbo switched off elsewhere (or a Turbo -/// off whose undo failed) is taken away. +/// off whose undo failed) is taken away. Launchers that were open when the +/// preset last changed are brought along now ([`follow_owed`]). /// /// # Errors /// Returns an error when the session's environment cannot be set. pub fn resync(turbo_on: bool) -> Result<()> { - if !active_path().exists() { - return Ok(()); - } - if turbo_on { + if active_path().exists() { + if !turbo_on { + // Brings the launchers along itself. + deactivate()?; + return Ok(()); + } crate::video_config::sync_session_env(&crate::video_config::load())?; - } else { - deactivate()?; } + follow_owed(); Ok(()) } +/// Bring along the launchers that were open when the preset last changed, +/// if any: one may be closed by now. Steam's launch options and Heroic's +/// settings carry a game's vkBasalt switch, which follows the preset in +/// force, and an open launcher was left out then rather than written over. +pub fn follow_owed() { + if launchers_owed_path().exists() { + follow_in_launchers(); + } +} + /// Whether the session's environment `session` holds `layer`: every /// variable the preset sets at its value, and every switch it turns off off. #[must_use] @@ -981,6 +1060,130 @@ multiplier = 1 assert_eq!(names, ["vkbasalt-cas.conf"]); } + #[test] + fn an_open_launcher_leaves_the_preset_owed_until_it_follows() { + use crate::heroic_launch::Applied as Heroic; + use crate::steam_gamescope::Applied as Steam; + let dir = Scratch::new("owed"); + let owed = dir + .0 + .join("bigame-mode") + .join("turbo-preset-launchers-owed"); + // Steam open: nothing written there, so the change stays owed. + let followed = follow_in_launchers_at( + &owed, + || vec![("SOTTR.exe".to_owned(), Ok(Steam::SteamRunning))], + Vec::new, + ); + assert!(!followed); + assert!(owed.exists()); + // Heroic open: owed as well, even with Steam's games written. + let followed = follow_in_launchers_at( + &owed, + || vec![("SOTTR.exe".to_owned(), Ok(Steam::Written(String::new())))], + || { + vec![( + "Hades.exe".to_owned(), + Ok(Heroic::HeroicRunning { + launcher: crate::launchers::Launcher::Heroic { flatpak: false }, + game_running: false, + }), + )] + }, + ); + assert!(!followed); + assert!(owed.exists()); + // A game that could not be written is tried again too. + let followed = follow_in_launchers_at( + &owed, + || vec![("SOTTR.exe".to_owned(), Err(anyhow::anyhow!("read-only")))], + Vec::new, + ); + assert!(!followed); + assert!(owed.exists()); + // Everything in line: the mark goes. + let followed = follow_in_launchers_at( + &owed, + || vec![("SOTTR.exe".to_owned(), Ok(Steam::Unchanged))], + || vec![("Hades.exe".to_owned(), Ok(Heroic::Written))], + ); + assert!(followed); + assert!(!owed.exists()); + } + + /// The files [`deactivate_in`] works on, in a scratch folder. + struct Files { + record: PathBuf, + owed: PathBuf, + } + + impl Files { + fn in_(dir: &Scratch) -> Self { + Self { + record: dir.0.join("turbo-preset-active.toml"), + owed: dir.0.join("turbo-preset-launchers-owed"), + } + } + } + + #[test] + fn taking_a_preset_away_brings_the_launchers_along() { + let dir = Scratch::new("deactivate"); + let f = Files::in_(&dir); + write( + &f.record, + &Stored { + preset: Preset::Enhanced, + before: BTreeMap::from([("PROTON_FSR4_UPGRADE".to_owned(), "1".to_owned())]), + }, + ) + .unwrap(); + let mut seen = None; + let mut followed = false; + deactivate_in( + &f.record, + &f.owed, + |layer| { + seen = Some(layer.clone()); + Ok(Vec::new()) + }, + || followed = true, + ) + .unwrap(); + let layer = seen.unwrap(); + assert_eq!(layer.levers, Levers::default()); + assert_eq!(layer.before["PROTON_FSR4_UPGRADE"], "1"); + assert!(layer.owns_preset_keys); + assert!(!f.record.exists()); + // After the record: the launchers then read no preset in force. + assert!(followed); + // No record and nothing owed: the launchers are left alone. + let mut followed = false; + deactivate_in(&f.record, &f.owed, |_| Ok(Vec::new()), || followed = true).unwrap(); + assert!(!followed); + // Still owed from an earlier Turbo off: tried again. + std::fs::write(&f.owed, "").unwrap(); + deactivate_in(&f.record, &f.owed, |_| Ok(Vec::new()), || followed = true).unwrap(); + assert!(followed); + } + + #[test] + fn a_session_that_does_not_change_keeps_the_record() { + let dir = Scratch::new("deactivate_fails"); + let f = Files::in_(&dir); + write(&f.record, &Stored::default()).unwrap(); + let mut followed = false; + let result = deactivate_in( + &f.record, + &f.owed, + |_| anyhow::bail!("the session environment did not change"), + || followed = true, + ); + assert!(result.is_err()); + assert!(f.record.exists(), "kept to retry from"); + assert!(!followed); + } + #[test] fn a_cap_is_merged_into_the_users_dxvk_config() { assert_eq!( From 9784488c5997c644ff55ffd65983dedc38bd7ac3 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:23:52 -0300 Subject: [PATCH 14/60] fix(turbo): take away a preset whose record cannot be read A preset's record that does not parse reads as Standard. Turbo off asked for the preset in force, found Standard and returned before deactivate(), whose branch for an unreadable record (clear the preset's variables anyway) could not be reached from there; Turbo's "something left" check said nothing was left either. has_record() tells whether a record is there, readable or not, and both use it. A record that could not be read has no preset to name, so its removal goes to the log rather than the report. --- bigame-engine/bigame-core/src/turbo.rs | 10 ++++-- bigame-engine/bigame-core/src/turbo_preset.rs | 34 ++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/bigame-engine/bigame-core/src/turbo.rs b/bigame-engine/bigame-core/src/turbo.rs index 74023a2..f79163b 100644 --- a/bigame-engine/bigame-core/src/turbo.rs +++ b/bigame-engine/bigame-core/src/turbo.rs @@ -784,17 +784,21 @@ async fn apply_preset(preset: crate::turbo_preset::Preset, report: &mut Report) /// Take the Turbo preset away and say so in the report (on the blocking /// pool, as [`apply_preset`]). async fn remove_preset(report: &mut Report) { - let preset = crate::turbo_preset::active(); - if preset == crate::turbo_preset::Preset::Standard { + // A record that cannot be read reads as Standard, yet its variables may + // still be in the session. + if !crate::turbo_preset::has_record() { // A launcher open when the last preset went may be closed now. let _ = tokio::task::spawn_blocking(crate::turbo_preset::follow_owed).await; return; } + let preset = crate::turbo_preset::active(); let title = Text::plain(N_("Turbo preset")); let removed = tokio::task::spawn_blocking(crate::turbo_preset::deactivate) .await .unwrap_or_else(|e| Err(anyhow::anyhow!("{e}"))); match removed { + // Unreadable, so no preset to name: the log says what was cleared. + Ok(_) if preset == crate::turbo_preset::Preset::Standard => {} Ok(_) => report.push_knob( title, Section::Restored, @@ -1252,7 +1256,7 @@ pub fn something_left_blocking() -> bool { let unit = crate::systemd::Reader::shared().and_then(|r| r.unit_state(BACKEND_UNIT)); something_left( unit.as_ref(), - crate::turbo_preset::active() != crate::turbo_preset::Preset::Standard, + crate::turbo_preset::has_record(), BoosterEngine::is_active(), ) } diff --git a/bigame-engine/bigame-core/src/turbo_preset.rs b/bigame-engine/bigame-core/src/turbo_preset.rs index c9d08f4..8e4dbeb 100644 --- a/bigame-engine/bigame-core/src/turbo_preset.rs +++ b/bigame-engine/bigame-core/src/turbo_preset.rs @@ -646,6 +646,14 @@ pub fn activate(preset: Preset) -> Result> { Ok(set) } +/// Whether a preset's record is there, readable or not. [`active`] reads an +/// unreadable one as Standard, yet its variables may still be in the +/// session and [`deactivate`] must still run to take them away. +#[must_use] +pub fn has_record() -> bool { + active_path().exists() +} + /// The mark that the launchers still owe the preset's change: an open /// launcher would write its own copy back over it, so it was not written. fn launchers_owed_path() -> PathBuf { @@ -803,7 +811,7 @@ pub fn switch(preset: Preset) -> Result> { /// # Errors /// Returns an error when the session's environment cannot be set. pub fn resync(turbo_on: bool) -> Result<()> { - if active_path().exists() { + if has_record() { if !turbo_on { // Brings the launchers along itself. deactivate()?; @@ -1167,6 +1175,30 @@ multiplier = 1 assert!(followed); } + #[test] + fn an_unreadable_record_is_still_taken_away() { + let dir = Scratch::new("deactivate_unreadable"); + let f = Files::in_(&dir); + std::fs::write(&f.record, "preset = [not toml").unwrap(); + assert!(read_stored(&f.record).is_none()); + let mut owned = false; + let mut followed = false; + deactivate_in( + &f.record, + &f.owed, + |layer| { + owned = layer.owns_preset_keys; + Ok(Vec::new()) + }, + || followed = true, + ) + .unwrap(); + // Its variables are Big Game Mode's to unset, and the launchers follow. + assert!(owned); + assert!(followed); + assert!(!f.record.exists()); + } + #[test] fn a_session_that_does_not_change_keeps_the_record() { let dir = Scratch::new("deactivate_fails"); From cf26eb334933512dca4e14332965ea848877a7af Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:24:27 -0300 Subject: [PATCH 15/60] fix(turbo): remove the preset's vkBasalt file when the preset goes The Enhanced preset writes its own CAS-only vkBasalt file in ~/.config/bigame-mode, which nothing ever removed: Turbo off left it behind. It goes once the session reads back without the preset, the only thing that names it; a failure to remove it is logged, since the preset is gone either way. --- bigame-engine/bigame-core/src/turbo_preset.rs | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/bigame-engine/bigame-core/src/turbo_preset.rs b/bigame-engine/bigame-core/src/turbo_preset.rs index 8e4dbeb..c9d196a 100644 --- a/bigame-engine/bigame-core/src/turbo_preset.rs +++ b/bigame-engine/bigame-core/src/turbo_preset.rs @@ -733,17 +733,19 @@ fn follow_in_launchers_at( pub fn deactivate() -> Result> { deactivate_in( &active_path(), + &cas_config_path(), &launchers_owed_path(), |layer| crate::video_config::sync_session_env_with(&crate::video_config::load(), layer), follow_in_launchers, ) } -/// [`deactivate`] with the record at `record` and the launchers' mark at -/// `owed`; `sync` brings the session to a layer, `follow` brings the -/// launchers along. +/// [`deactivate`] with the record at `record`, vkBasalt's CAS file at `cas` +/// and the launchers' mark at `owed`; `sync` brings the session to a layer, +/// `follow` brings the launchers along. fn deactivate_in( record: &Path, + cas: &Path, owed: &Path, sync: impl FnOnce(&Layer) -> Result>, follow: impl FnOnce(), @@ -769,6 +771,11 @@ fn deactivate_in( let had_record = layer.owns_preset_keys; let set = sync(&layer)?; remove_if_any(record)?; + // The session no longer names it, and nothing of Tuning's does: a + // preset leaves nothing behind once it is gone. + if let Err(e) = remove_if_any(cas) { + tracing::warn!(error = %format!("{e:#}"), "could not remove the Turbo preset's vkBasalt file"); + } if had_record || owed.exists() { follow(); } @@ -1122,6 +1129,7 @@ multiplier = 1 /// The files [`deactivate_in`] works on, in a scratch folder. struct Files { record: PathBuf, + cas: PathBuf, owed: PathBuf, } @@ -1129,6 +1137,7 @@ multiplier = 1 fn in_(dir: &Scratch) -> Self { Self { record: dir.0.join("turbo-preset-active.toml"), + cas: dir.0.join("vkbasalt-cas.conf"), owed: dir.0.join("turbo-preset-launchers-owed"), } } @@ -1146,10 +1155,12 @@ multiplier = 1 }, ) .unwrap(); + write_cas_config(&f.cas).unwrap(); let mut seen = None; let mut followed = false; deactivate_in( &f.record, + &f.cas, &f.owed, |layer| { seen = Some(layer.clone()); @@ -1163,15 +1174,31 @@ multiplier = 1 assert_eq!(layer.before["PROTON_FSR4_UPGRADE"], "1"); assert!(layer.owns_preset_keys); assert!(!f.record.exists()); + // vkBasalt's CAS file was the preset's alone. + assert!(!f.cas.exists()); // After the record: the launchers then read no preset in force. assert!(followed); // No record and nothing owed: the launchers are left alone. let mut followed = false; - deactivate_in(&f.record, &f.owed, |_| Ok(Vec::new()), || followed = true).unwrap(); + deactivate_in( + &f.record, + &f.cas, + &f.owed, + |_| Ok(Vec::new()), + || followed = true, + ) + .unwrap(); assert!(!followed); // Still owed from an earlier Turbo off: tried again. std::fs::write(&f.owed, "").unwrap(); - deactivate_in(&f.record, &f.owed, |_| Ok(Vec::new()), || followed = true).unwrap(); + deactivate_in( + &f.record, + &f.cas, + &f.owed, + |_| Ok(Vec::new()), + || followed = true, + ) + .unwrap(); assert!(followed); } @@ -1185,6 +1212,7 @@ multiplier = 1 let mut followed = false; deactivate_in( &f.record, + &f.cas, &f.owed, |layer| { owned = layer.owns_preset_keys; @@ -1204,15 +1232,19 @@ multiplier = 1 let dir = Scratch::new("deactivate_fails"); let f = Files::in_(&dir); write(&f.record, &Stored::default()).unwrap(); + write_cas_config(&f.cas).unwrap(); let mut followed = false; let result = deactivate_in( &f.record, + &f.cas, &f.owed, |_| anyhow::bail!("the session environment did not change"), || followed = true, ); assert!(result.is_err()); assert!(f.record.exists(), "kept to retry from"); + // The session may still name it. + assert!(f.cas.exists()); assert!(!followed); } From eaba2b5c1203de28d5ddb80a044b89ff04a369d5 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:25:11 -0300 Subject: [PATCH 16/60] fix(config): write video.toml and environment.d in one rename Tuning's video.toml and the session's environment.d file were written in place. A crash or a full disk mid-write left a file cut short: a video.toml that does not parse loads as every default, and the login reads half an environment.d file. Both go through the preset's atomic writer now (a temporary beside the file, synced, then renamed). It follows a dotfile manager's symlink, as lsfg-vk's writer does, so the link stays a link, and each write gets a temporary of its own. --- bigame-engine/bigame-core/src/turbo_preset.rs | 15 ++- bigame-engine/bigame-core/src/video_config.rs | 96 +++++++++++++------ 2 files changed, 79 insertions(+), 32 deletions(-) diff --git a/bigame-engine/bigame-core/src/turbo_preset.rs b/bigame-engine/bigame-core/src/turbo_preset.rs index c9d196a..e375d6b 100644 --- a/bigame-engine/bigame-core/src/turbo_preset.rs +++ b/bigame-engine/bigame-core/src/turbo_preset.rs @@ -358,16 +358,25 @@ fn write_cas_config(path: &Path) -> Result<()> { } /// Replace `path` with `text` in one rename: a reader sees the old file or -/// the new one, never half of one. -fn write_atomic(path: &Path, text: &str) -> Result<()> { +/// the new one, never half of one, and a crash leaves one of them whole. +pub(crate) fn write_atomic(path: &Path, text: &str) -> Result<()> { use std::io::Write as _; + static SEQUENCE: std::sync::atomic::AtomicU32 = std::sync::atomic::AtomicU32::new(0); + // A dotfile manager's symlink stays a symlink: the file it points to is + // the one replaced. + let path = &std::fs::canonicalize(path).unwrap_or_else(|_| path.to_path_buf()); let dir = path.parent().context("path has no parent directory")?; std::fs::create_dir_all(dir).with_context(|| format!("create {}", dir.display()))?; let name = path .file_name() .map(|n| n.to_string_lossy().into_owned()) .unwrap_or_default(); - let tmp = dir.join(format!(".{name}.{}", std::process::id())); + // A name of its own per write, so two writers never share a temporary. + let tmp = dir.join(format!( + ".{name}.{}-{}", + std::process::id(), + SEQUENCE.fetch_add(1, std::sync::atomic::Ordering::Relaxed) + )); let written = (|| { let mut f = std::fs::File::create(&tmp)?; f.write_all(text.as_bytes())?; diff --git a/bigame-engine/bigame-core/src/video_config.rs b/bigame-engine/bigame-core/src/video_config.rs index 5d7275c..a3d637d 100644 --- a/bigame-engine/bigame-core/src/video_config.rs +++ b/bigame-engine/bigame-core/src/video_config.rs @@ -79,14 +79,10 @@ pub fn save(cfg: &VideoConfig) -> Result> { /// # Errors /// Returns an error if directory creation or file write fails. pub fn save_to(cfg: &VideoConfig, path: &Path) -> Result<()> { - if let Some(parent) = path.parent() { - std::fs::create_dir_all(parent) - .with_context(|| format!("create config dir: {}", parent.display()))?; - } let content = toml::to_string_pretty(cfg).context("serialize video config")?; - std::fs::write(path, content) - .with_context(|| format!("write video config: {}", path.display()))?; - Ok(()) + // Written in one rename: a file cut short by a crash or a full disk + // reads as no file, and every setting in it would fall back to default. + crate::turbo_preset::write_atomic(path, &content).context("write video config") } /// The session environment file: `~/.config/environment.d/bigame-mode.conf`. @@ -124,34 +120,34 @@ pub const SESSION_KEYS: &[&str] = &[ /// Returns error if directory creation or file I/O fails, or the running /// session's environment cannot be updated. pub fn write_env_file(cfg: &VideoConfig) -> Result<()> { - let path = env_file_path(); - let env = crate::launcher::build_persistent_env(cfg); + write_env_file_at( + &env_file_path(), + &crate::launcher::build_persistent_env(cfg), + )?; + sync_session_env(cfg).context(UserError::plain(N_( + "could not update the running session's environment", + )))?; + Ok(()) +} +/// The environment.d file at `path` holding `env`, or no file for none. +fn write_env_file_at(path: &Path, env: &HashMap) -> Result<()> { if env.is_empty() { if path.exists() { - std::fs::remove_file(&path) + std::fs::remove_file(path) .with_context(|| format!("remove env file: {}", path.display()))?; } - } else { - if let Some(parent) = path.parent() { - std::fs::create_dir_all(parent) - .with_context(|| format!("create env dir: {}", parent.display()))?; - } - let mut keys: Vec<&String> = env.keys().collect(); - keys.sort(); - let mut content = String::from("# Managed by BiGameMode. Do not edit manually.\n"); - for k in keys { - // environment.d is KEY=VALUE per line, no quoting required for our values. - let _ = writeln!(content, "{}={}", k, env[k]); - } - std::fs::write(&path, content) - .with_context(|| format!("write env file: {}", path.display()))?; + return Ok(()); } - - sync_session_env(cfg).context(UserError::plain(N_( - "could not update the running session's environment", - )))?; - Ok(()) + let mut keys: Vec<&String> = env.keys().collect(); + keys.sort(); + let mut content = String::from("# Managed by BiGameMode. Do not edit manually.\n"); + for k in keys { + // environment.d is KEY=VALUE per line, no quoting required for our values. + let _ = writeln!(content, "{}={}", k, env[k]); + } + // The next login reads it whole or not at all. + crate::turbo_preset::write_atomic(path, &content).context("write env file") } /// Bring the running session to `cfg`'s variables with the Turbo preset in @@ -461,6 +457,48 @@ mod tests { let _ = std::fs::remove_dir_all(path.parent().unwrap()); } + #[test] + fn the_files_are_replaced_whole() { + let path = temp_config("atomic"); + let dir = path.parent().unwrap().to_path_buf(); + let mut cfg = VideoConfig::default(); + save_to(&cfg, &path).unwrap(); + cfg.upscaling.gamescope_sharpness = 9; + save_to(&cfg, &path).unwrap(); + assert_eq!(load_from(&path).upscaling.gamescope_sharpness, 9); + let env_file = dir.join("environment.d").join("bigame-mode.conf"); + let env = HashMap::from([ + ("WINE_FULLSCREEN_FSR".to_owned(), "1".to_owned()), + ("ENABLE_VKBASALT".to_owned(), "1".to_owned()), + ]); + write_env_file_at(&env_file, &env).unwrap(); + assert_eq!( + std::fs::read_to_string(&env_file).unwrap(), + "# Managed by BiGameMode. Do not edit manually.\nENABLE_VKBASALT=1\nWINE_FULLSCREEN_FSR=1\n" + ); + // Each in one rename: no temporary file is left beside them. + for folder in [&dir, &dir.join("environment.d")] { + let left: Vec = std::fs::read_dir(folder) + .unwrap() + .flatten() + .map(|e| e.file_name().to_string_lossy().into_owned()) + .filter(|n| n.starts_with('.')) + .collect(); + assert!(left.is_empty(), "{left:?}"); + } + // A dotfile manager's symlink stays one: its target is replaced. + let kept = dir.join("dotfiles-video.toml"); + std::fs::rename(&path, &kept).unwrap(); + std::os::unix::fs::symlink(&kept, &path).unwrap(); + save_to(&cfg, &path).unwrap(); + assert!(std::fs::symlink_metadata(&path).unwrap().is_symlink()); + assert_eq!(load_from(&kept).upscaling.gamescope_sharpness, 9); + // Nothing to put in the session: no file at all. + write_env_file_at(&env_file, &HashMap::new()).unwrap(); + assert!(!env_file.exists()); + let _ = std::fs::remove_dir_all(&dir); + } + #[test] fn a_missing_or_corrupt_config_falls_back_to_defaults() { let path = temp_config("corrupt"); From a643d71bceb14fefcc7afbeee3e284ff8628db5e Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:26:18 -0300 Subject: [PATCH 17/60] fix(config): one session bus connection for reading the environment Home asks whether the session holds the Turbo preset every ten seconds, and each time opened a new session bus connection (a new handshake with the bus) and read the user manager's Environment through a proxy that caches properties: one GetAll of every Manager property, plus a match rule for their changes, to read one of them. The connection is opened once and shared, as systemd::Reader::shared does for the system bus; a failed connect is not kept, so a later call tries again. The manager's proxy reads the property it is asked for and caches nothing. --- bigame-engine/bigame-core/src/video_config.rs | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/bigame-engine/bigame-core/src/video_config.rs b/bigame-engine/bigame-core/src/video_config.rs index a3d637d..de5954e 100644 --- a/bigame-engine/bigame-core/src/video_config.rs +++ b/bigame-engine/bigame-core/src/video_config.rs @@ -201,8 +201,7 @@ fn session_env_with( /// # Errors /// Returns an error when the session bus or the manager cannot be reached. pub fn session_environment() -> Result> { - let conn = zbus::blocking::Connection::session().context("session bus")?; - let now: Vec = user_manager(&conn)? + let now: Vec = user_manager(session_bus()?)? .get_property("Environment") .context("read the session environment")?; Ok(now @@ -212,14 +211,30 @@ pub fn session_environment() -> Result> { .collect()) } +/// One session bus connection for the whole process, opened on first use: +/// Home reads the session's environment every few seconds, and a new +/// connection each time is a new authentication with the bus. A failed +/// connect is not remembered, so a later call tries again. +fn session_bus() -> Result<&'static zbus::blocking::Connection> { + static SHARED: std::sync::OnceLock = std::sync::OnceLock::new(); + if let Some(conn) = SHARED.get() { + return Ok(conn); + } + let conn = zbus::blocking::Connection::session().context("session bus")?; + Ok(SHARED.get_or_init(|| conn)) +} + +/// The user manager, its properties read when asked: a caching proxy +/// fetches every property of the manager (`GetAll`) to read one, and then +/// follows their changes. fn user_manager(conn: &zbus::blocking::Connection) -> Result> { - zbus::blocking::Proxy::new( - conn, - "org.freedesktop.systemd1", - "/org/freedesktop/systemd1", - "org.freedesktop.systemd1.Manager", - ) - .context("systemd user manager") + zbus::blocking::proxy::Builder::new(conn) + .destination("org.freedesktop.systemd1") + .and_then(|b| b.path("/org/freedesktop/systemd1")) + .and_then(|b| b.interface("org.freedesktop.systemd1.Manager")) + .map(|b| b.cache_properties(zbus::proxy::CacheProperties::No)) + .and_then(zbus::blocking::proxy::Builder::build) + .context("systemd user manager") } /// What of Big Game Mode's variables ([`SESSION_KEYS`]) an environment really @@ -296,8 +311,7 @@ fn session_change( /// One `UnsetAndSetEnvironment` call on the user manager — no `systemctl` /// process — then a read-back of its environment to confirm it holds. fn sync_session(unset: &[String], set: &[String]) -> Result<()> { - let conn = zbus::blocking::Connection::session().context("session bus")?; - let manager = user_manager(&conn)?; + let manager = user_manager(session_bus()?)?; manager .call_method("UnsetAndSetEnvironment", &(unset, set)) .context("UnsetAndSetEnvironment")?; From 8e313ce23122fe9af7ef699a472fa8ed24d8258a Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:20:10 -0300 Subject: [PATCH 18/60] fix(graphics): one change to a game's files at a time Two changes to one game at once - a double click on Apply, the page's Restore beside the Profiles menu's, Restore while the recovery at start still runs - had nothing keeping them apart. Each backed up what the other had just placed as the game's original, and the first removal then put OptiScaler back "as the original": the game's own files were gone. Install, reinstall, update (and go back), restore, repair and switching the game's setting on again now run under a per-game flock in state/.locks/. flock is per opening of the file, so it also keeps two threads of the UI apart, and it goes with a process that dies. The lock files are never deleted (a waiter would lock the unlinked file while the next change locks a new one) and live apart from the game's state folder, which a removal still deletes once empty. The recovery at start takes the same lock and reads the manifest again under it, so it never rolls back an apply of this process that is still running. The names two changes could share are unique now too: - the staging folder was staging-, one per process; - manifest.json.tmp and kept.json.tmp were one name for every writer; - the backup folder was backup/: an apply in the same second as an earlier removal that kept originals (files another program changed since) shared its folder, and its own removal deleted them. The first unused second is taken, which the manifest records as before, so older manifests still find their backups; - edited configs a removal keeps went to edited-, written over by a second removal in the same second. kept.json is one list for every game, so it is written under a lock of its own. --- .../bigame-core/src/graphics/manifest.rs | 43 ++++- bigame-engine/bigame-core/src/graphics/mod.rs | 137 ++++++++++---- .../bigame-core/src/graphics/transaction.rs | 168 +++++++++++++++++- 3 files changed, 302 insertions(+), 46 deletions(-) diff --git a/bigame-engine/bigame-core/src/graphics/manifest.rs b/bigame-engine/bigame-core/src/graphics/manifest.rs index dcf91f4..cdcd16b 100644 --- a/bigame-engine/bigame-core/src/graphics/manifest.rs +++ b/bigame-engine/bigame-core/src/graphics/manifest.rs @@ -281,7 +281,7 @@ impl Manifest { // The game's folder entry must survive a crash too. std::fs::File::open(state_dir)?.sync_all()?; } - let tmp = dir.join("manifest.json.tmp"); + let tmp = dir.join(unique_name("manifest.json.tmp-")); { let mut f = std::fs::File::create(&tmp).with_context(|| format!("create {}", tmp.display()))?; @@ -347,6 +347,17 @@ impl Manifest { } } +/// `prefix` followed by a name no other change running now uses: this +/// process's id and a count. A temporary file or folder two changes at once +/// named alike (two Big Game Mode processes, or two threads of one) would be +/// written, renamed or deleted by each under the other. +#[must_use] +pub(crate) fn unique_name(prefix: &str) -> String { + static NEXT: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0); + let n = NEXT.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + format!("{prefix}{}-{n}", std::process::id()) +} + /// Whether `a` and `b` name the same folder, links resolved. A folder that /// is not there is compared as written. #[must_use] @@ -483,6 +494,36 @@ mod tests { assert!(m.managed); } + #[test] + fn saves_at_once_never_share_a_temporary_file() { + let dir = tempfile::tempdir().unwrap(); + let p = Manifest::path(dir.path(), "steam-1"); + std::fs::create_dir_all(p.parent().unwrap()).unwrap(); + std::fs::write( + &p, + r#"{"schema":1,"game_key":"steam-1","install_root":"/g","source":{"component":"optiscaler","version":"1","url":null,"archive_sha256":null},"started_at":0,"state":"installed","entries":[]}"#, + ) + .unwrap(); + let m = Manifest::load(dir.path(), "steam-1").unwrap().unwrap(); + // One shared temporary name: one thread's rename takes the file the + // other is about to rename, which then fails. + std::thread::scope(|s| { + for _ in 0..4 { + s.spawn(|| { + for _ in 0..25 { + m.save(dir.path()).unwrap(); + } + }); + } + }); + let left: Vec<_> = std::fs::read_dir(p.parent().unwrap()) + .unwrap() + .map(|e| e.unwrap().file_name()) + .collect(); + assert_eq!(left, ["manifest.json"]); + assert_eq!(Manifest::load(dir.path(), "steam-1").unwrap(), Some(m)); + } + #[test] fn game_keys_are_stable_and_safe() { assert_eq!( diff --git a/bigame-engine/bigame-core/src/graphics/mod.rs b/bigame-engine/bigame-core/src/graphics/mod.rs index c8b63bc..f4b7519 100644 --- a/bigame-engine/bigame-core/src/graphics/mod.rs +++ b/bigame-engine/bigame-core/src/graphics/mod.rs @@ -608,9 +608,25 @@ pub fn analyze(target: &Target, cfg: &config::AiGraphicsConfig) -> Analysis { /// Returns an error when the game runs, nothing is installed, or the /// registry cannot be written. pub fn switch_game_setting_on_again(target: &Target) -> anyhow::Result { - ensure_closed(target)?; - let m = installed_manifest(&state_dir(), target)?; - ingame::switch_on_again(&m.settings) + let state = state_dir(); + locked(&state, target, || { + ensure_closed(target)?; + let m = installed_manifest(&state, target)?; + ingame::switch_on_again(&m.settings) + }) +} + +/// Run `change` to `target`'s files or record under the game's lock +/// ([`transaction::lock`]), so a second change to the game — a double click, +/// the page and the Profiles menu at once — waits for the first and then +/// finds what it left, instead of backing up its files as the originals. +fn locked( + state: &Path, + target: &Target, + change: impl FnOnce() -> anyhow::Result, +) -> anyhow::Result { + let _lock = transaction::lock(state, &target.key())?; + change() } fn status_of( @@ -876,9 +892,7 @@ fn apply_release( ) -> anyhow::Result { let key = target.key(); let staging = state.join(&key).join("staging"); - let next = state - .join(&key) - .join(format!("staging-{}", std::process::id())); + let next = state.join(&key).join(manifest::unique_name("staging-")); remove_dir_if_there(&next)?; let applied = optiscaler::payload(cached, o, exe_dir, &next, carry).and_then(|files| { transaction::apply( @@ -952,15 +966,17 @@ pub fn install( version: &config::VersionPolicy, ) -> anyhow::Result { let (state, cache) = (state_dir(), optiscaler::cache_dir()); - let done = install_in( - &state, - &cache, - &gamedb::GameDb::load(), - target, - plan, - version, - &[], - ); + let done = locked(&state, target, || { + install_in( + &state, + &cache, + &gamedb::GameDb::load(), + target, + plan, + version, + &[], + ) + }); tidy_cache(&state, &cache); done } @@ -1135,14 +1151,16 @@ pub fn reinstall( let (state, cache) = (state_dir(), optiscaler::cache_dir()); // Once at the end: between its restore and its install no game names // the release it is about to install again. - let done = reinstall_in( - &state, - &cache, - &gamedb::GameDb::load(), - target, - plan, - version, - ); + let done = locked(&state, target, || { + reinstall_in( + &state, + &cache, + &gamedb::GameDb::load(), + target, + plan, + version, + ) + }); tidy_cache(&state, &cache); done } @@ -1212,7 +1230,9 @@ pub fn update( to: &optiscaler::Release, ) -> anyhow::Result { let (state, cache) = (state_dir(), optiscaler::cache_dir()); - let done = update_in(&state, &cache, &gamedb::GameDb::load(), target, plan, to); + let done = locked(&state, target, || { + update_in(&state, &cache, &gamedb::GameDb::load(), target, plan, to) + }); tidy_cache(&state, &cache); done } @@ -1365,7 +1385,7 @@ pub struct Restoration { /// is not this game's folder's, or a file cannot be restored. pub fn restore(target: &Target) -> anyhow::Result { let state = state_dir(); - let done = restore_in(&state, target); + let done = locked(&state, target, || restore_in(&state, target)); tidy_cache(&state, &optiscaler::cache_dir()); done } @@ -1433,7 +1453,7 @@ fn restore_in(state: &Path, target: &Target) -> anyhow::Result { /// As [`restore`], and when the game's own settings could not be put back. pub fn remove(target: &Target) -> anyhow::Result> { let state = state_dir(); - let done = remove_in(&state, target); + let done = locked(&state, target, || remove_in(&state, target)); tidy_cache(&state, &optiscaler::cache_dir()); done } @@ -1459,12 +1479,15 @@ fn remove_in(state: &Path, target: &Target) -> anyhow::Result anyhow::Result> { - repair_in( - &state_dir(), - &optiscaler::cache_dir(), - &gamedb::GameDb::load(), - target, - ) + let state = state_dir(); + locked(&state, target, || { + repair_in( + &state, + &optiscaler::cache_dir(), + &gamedb::GameDb::load(), + target, + ) + }) } fn repair_in( @@ -1892,6 +1915,44 @@ mod tests { } } + #[test] + fn two_applies_at_once_never_take_ours_for_the_games_original() { + let dir = tempfile::tempdir().unwrap(); + let (state, cache) = (dir.path().join("state"), dir.path().join("cache")); + cached_release(&cache, "1.0.0"); + let game = steam_game(dir.path(), "library/Game"); + std::fs::write(game.install_root.join("dxgi.dll"), b"the game's own").unwrap(); + let db = gamedb::GameDb::from_texts(None); + let plan = optiscaler_plan(); + let version = config::VersionPolicy::Pinned("1.0.0".into()); + // A double click: two Apply runs of one game, side by side. + let done: Vec = std::thread::scope(|s| { + let runs: Vec<_> = (0..2) + .map(|_| { + s.spawn(|| { + locked(&state, &game, || { + install_in(&state, &cache, &db, &game, &plan, &version, &[]) + }) + .is_ok() + }) + }) + .collect(); + runs.into_iter().map(|r| r.join().unwrap()).collect() + }); + // The second waits, finds the first's install and is refused. + assert_eq!(done.iter().filter(|ok| **ok).count(), 1, "{done:?}"); + restore_in(&state, &game).unwrap(); + assert_eq!( + std::fs::read(game.install_root.join("dxgi.dll")).unwrap(), + b"the game's own" + ); + assert!( + manifest::Manifest::load(&state, &game.key()) + .unwrap() + .is_none() + ); + } + #[test] fn a_game_moved_to_another_library_is_restored_where_it_is_now() { let s = installed_game(); @@ -2089,12 +2150,12 @@ mod tests { // Something is installed: the transaction refuses. assert!(apply_release(&s.state, &s.game, &other, &cached, Path::new(""), &[]).is_err()); assert_eq!(std::fs::read_to_string(&staged).unwrap(), before); - assert!( - !s.state - .join(&key) - .join(format!("staging-{}", std::process::id())) - .exists() - ); + let left: Vec<_> = std::fs::read_dir(s.state.join(&key)) + .unwrap() + .map(|e| e.unwrap().file_name().to_string_lossy().into_owned()) + .filter(|n| n.starts_with("staging-")) + .collect(); + assert!(left.is_empty(), "{left:?}"); } #[test] diff --git a/bigame-engine/bigame-core/src/graphics/transaction.rs b/bigame-engine/bigame-core/src/graphics/transaction.rs index 311a93f..e461fc3 100644 --- a/bigame-engine/bigame-core/src/graphics/transaction.rs +++ b/bigame-engine/bigame-core/src/graphics/transaction.rs @@ -95,6 +95,68 @@ pub enum FileState { Edited, } +/// Hold the lock of `game_key`'s changes until the file returned is dropped, +/// waiting while another change holds it. +/// +/// Every change to a game's files runs under it — apply, update, restore, +/// repair, the recovery at start: two at once (a double click, the page and +/// the Profiles menu, Restore while the recovery still runs) would each back +/// up what the other had just placed as the game's original, and the real +/// original would be gone with the first removal. A lock taken by `flock` is +/// one per opening of the file, so it also keeps two threads of one process +/// apart, and it goes with the process that holds it. +/// +/// The lock files are kept apart from the games' folders, which a removal +/// deletes once empty, and are never deleted: a waiter would go on to lock +/// the deleted file while the next change locks a new one. +/// +/// # Errors +/// Returns an error if the lock file cannot be created or locked. +pub fn lock(state_dir: &Path, game_key: &str) -> Result { + use std::os::fd::AsRawFd; + manifest::check_relative(Path::new(game_key))?; + let dir = state_dir.join(".locks"); + std::fs::create_dir_all(&dir).with_context(|| format!("create {}", dir.display()))?; + let path = dir.join(game_key); + let f = std::fs::OpenOptions::new() + .create(true) + .truncate(false) + .write(true) + .open(&path) + .with_context(|| format!("lock {}", path.display()))?; + loop { + // SAFETY: flock on a descriptor this function owns, kept open by the + // file returned. + if unsafe { libc::flock(f.as_raw_fd(), libc::LOCK_EX) } == 0 { + return Ok(f); + } + let e = std::io::Error::last_os_error(); + if e.kind() != std::io::ErrorKind::Interrupted { + return Err(e).with_context(|| format!("lock {}", path.display())); + } + } +} + +/// Create a backup folder for an apply that starts at `now`, named after +/// the second it starts in — which the manifest records to find it again — +/// or the first later second whose folder is not there yet. A folder left +/// from an earlier install in the same second holds originals a removal +/// kept (files another program changed since); sharing it, this install's +/// removal would delete them with its own backups. +fn new_backup_root(state_dir: &Path, game_key: &str, now: u64) -> Result<(u64, PathBuf)> { + let parent = Manifest::backup_dir(state_dir, game_key); + std::fs::create_dir_all(&parent).with_context(|| format!("create {}", parent.display()))?; + for at in now..now.saturating_add(1000) { + let root = parent.join(at.to_string()); + match std::fs::create_dir(&root) { + Ok(()) => return Ok((at, root)), + Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} + Err(e) => return Err(e).with_context(|| format!("create {}", root.display())), + } + } + bail!("no free backup folder in {}", parent.display()) +} + /// Copy `src` over `target` atomically: a temporary file in the target's own /// folder (same filesystem, so the rename is atomic), synced, then renamed. fn place(src: &Path, target: &Path) -> Result<()> { @@ -342,9 +404,6 @@ pub fn apply( if files.is_empty() { bail!(UserError::plain(N_("nothing to install"))); } - let started_at = crate::unix_now(); - let backup_root = Manifest::backup_dir(state_dir, game_key).join(started_at.to_string()); - // 1. Check, and hash what will be placed. A file already there under // another letter case is the one replaced. let mut files = files.to_vec(); @@ -373,6 +432,7 @@ pub fn apply( } // 2. Back up originals, verified, before anything changes. + let (started_at, backup_root) = new_backup_root(state_dir, game_key, crate::unix_now())?; let entries = back_up_originals(files, &targets, &backup_root)?; let created_dirs = dirs_to_create(install_root, files); @@ -473,6 +533,12 @@ pub fn rollback(state_dir: &Path, m: &Manifest) -> Result> { let mut backups_still_needed = false; let mut kept_now = Vec::new(); let mut touched = std::collections::BTreeSet::new(); + // One folder for every edited config this rollback keeps, named apart + // from any other rollback's: two in the same second would otherwise + // write over each other's copies. + let edited_root = Manifest::backup_dir(state_dir, &m.game_key).join(manifest::unique_name( + &format!("edited-{}-", crate::unix_now()), + )); for e in &m.entries { let (target, found) = found_at(&m.install_root, &e.path)?; let original = e.replaced.as_ref(); @@ -521,9 +587,7 @@ pub fn rollback(state_dir: &Path, m: &Manifest) -> Result> { FileOutcome::KeptChanged(e.path.clone()) } FileKind::Config => { - let keep = Manifest::backup_dir(state_dir, &m.game_key) - .join(format!("edited-{}", crate::unix_now())) - .join(&e.path); + let keep = edited_root.join(&e.path); std::fs::create_dir_all(keep.parent().context("no parent")?)?; std::fs::copy(&target, &keep)?; restore_or_remove(&target, original)?; @@ -638,6 +702,10 @@ pub fn kept(state_dir: &Path) -> Vec { } fn remember_kept(state_dir: &Path, m: &Manifest, now: &[(PathBuf, PathBuf)]) -> Result<()> { + // One list for every game, and a game's lock only keeps changes to that + // game apart: two games restored at once would each write the list + // without the other's copies. + let _list = lock(state_dir, ".kept")?; let mut all = kept(state_dir); let at = crate::unix_now(); for (file, copy) in now { @@ -650,7 +718,7 @@ fn remember_kept(state_dir: &Path, m: &Manifest, now: &[(PathBuf, PathBuf)]) -> }); } let path = kept_path(state_dir); - let tmp = path.with_extension("json.tmp"); + let tmp = state_dir.join(manifest::unique_name("kept.json.tmp-")); std::fs::write(&tmp, serde_json::to_string_pretty(&all)?)?; std::fs::rename(&tmp, &path)?; Ok(()) @@ -698,6 +766,16 @@ pub fn recover(state_dir: &Path) -> Result> }; for d in dirs.flatten() { let key = d.file_name().to_string_lossy().into_owned(); + let applying = + |m: &Option| m.as_ref().is_some_and(|m| m.state == State::Applying); + if !Manifest::load(state_dir, &key).is_ok_and(|m| applying(&m)) { + continue; + } + // An apply of this process may be running (the page is open while + // this runs at start): read again once it is done, under the lock. + let Ok(_lock) = lock(state_dir, &key) else { + continue; + }; if let Ok(Some(m)) = Manifest::load(state_dir, &key) && m.state == State::Applying { @@ -1293,6 +1371,82 @@ mod tests { assert!(Manifest::load(&fx.state, "g").unwrap().is_none()); } + #[test] + fn a_backup_folder_from_the_same_second_is_never_shared() { + let fx = fixture(); + // Originals an earlier removal kept, in folders named after the + // seconds this apply may start in. + let now = crate::unix_now(); + let backups = Manifest::backup_dir(&fx.state, "g"); + for at in now..now + 10 { + std::fs::create_dir_all(backups.join(at.to_string())).unwrap(); + std::fs::write(backups.join(at.to_string()).join("dxgi.dll"), b"kept").unwrap(); + } + std::fs::write(fx.game.join("dxgi.dll"), b"original").unwrap(); + let files = [planned(&fx, "dxgi.dll", b"ours", FileKind::Binary)]; + let m = apply(&fx.state, &g(&fx), src(), &files, &[]).unwrap(); + assert!(m.started_at >= now + 10, "{}", m.started_at); + let backup = m.entries[0].replaced.as_ref().unwrap(); + assert!( + backup + .path + .starts_with(backups.join(m.started_at.to_string())) + ); + remove(&fx.state, "g").unwrap(); + assert_eq!(read(&fx.game.join("dxgi.dll")), b"original"); + for at in now..now + 10 { + assert_eq!( + read(&backups.join(at.to_string()).join("dxgi.dll")), + b"kept" + ); + } + assert!(!backups.join(m.started_at.to_string()).exists()); + } + + #[test] + fn edited_configs_two_removals_keep_are_never_written_over() { + let fx = fixture(); + let files = [planned(&fx, "OptiScaler.ini", b"a=1", FileKind::Config)]; + let mut copies = Vec::new(); + for edit in [b"a=2", b"a=3"] { + apply(&fx.state, &g(&fx), src(), &files, &[]).unwrap(); + std::fs::write(fx.game.join("OptiScaler.ini"), edit).unwrap(); + let out = remove(&fx.state, "g").unwrap(); + let [FileOutcome::EditedCopyKept(_, copy)] = out.as_slice() else { + panic!("{out:?}") + }; + copies.push(copy.clone()); + } + assert_ne!(copies[0], copies[1]); + assert_eq!(read(&copies[0]), b"a=2"); + assert_eq!(read(&copies[1]), b"a=3"); + } + + #[test] + fn a_games_lock_keeps_a_second_change_waiting() { + let fx = fixture(); + let first = lock(&fx.state, "g").unwrap(); + let (tx, rx) = std::sync::mpsc::channel(); + let state = fx.state.clone(); + let waiter = std::thread::spawn(move || { + let _second = lock(&state, "g").unwrap(); + tx.send(()).unwrap(); + }); + // Another game is not held up. + drop(lock(&fx.state, "other").unwrap()); + assert!( + rx.recv_timeout(std::time::Duration::from_millis(200)) + .is_err(), + "a second lock of one game was given while the first was held" + ); + drop(first); + rx.recv_timeout(std::time::Duration::from_secs(5)).unwrap(); + waiter.join().unwrap(); + // Not a folder a removal or the recovery takes for a game's. + assert!(Manifest::load(&fx.state, ".locks").unwrap().is_none()); + assert!(lock(&fx.state, "../g").is_err()); + } + #[test] fn what_is_kept_after_a_removal_is_listed() { let fx = fixture(); From 3df7863bd7bdc7c7d9ff7ad6096647aec7ee58d4 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:20:49 -0300 Subject: [PATCH 19/60] fix(graphics): a file behind a linked folder stays recorded When a folder on the way to a placed file became a symlink (a mod manager linking the game's bin folder elsewhere), Restore left the file alone, as it must - the link is not Big Game Mode's to follow - and reported it as kept, but then deleted the manifest. What is behind the link may still be OptiScaler, and the game was left with it and nothing that knew: no Restore offered, no launch protections, a later Apply backing it up as the game's original. Such an entry is told apart from a link at the file's own path (whose file is someone else's, and ends the record as before) and stays in the manifest, with its original's backup and the folders the install created around it, and the staged copies Repair and Apply read. The game still reads as changed, and the next Restore finishes once the folder is a folder again. An interrupted apply keeps its state, for the recovery at the next start to try again. --- .../bigame-core/src/graphics/transaction.rs | 107 +++++++++++++++--- 1 file changed, 94 insertions(+), 13 deletions(-) diff --git a/bigame-engine/bigame-core/src/graphics/transaction.rs b/bigame-engine/bigame-core/src/graphics/transaction.rs index e461fc3..2028ea5 100644 --- a/bigame-engine/bigame-core/src/graphics/transaction.rs +++ b/bigame-engine/bigame-core/src/graphics/transaction.rs @@ -215,10 +215,14 @@ enum Found { Missing, /// A plain file, with its hash. File(String), - /// A symlink, at the path or on the way to it, or something that is not - /// a plain file: a mod manager deploys its files as links, or the user - /// moved a folder elsewhere. Not Big Game Mode's to follow or remove. + /// A symlink at the path, or something that is not a plain file: a mod + /// manager deploys its files as links. Not Big Game Mode's to follow or + /// remove, and nothing of Big Game Mode's is there any more. Foreign, + /// Behind a folder on the way that is a symlink now: what is there may + /// still be the file that was placed, and the link is not Big Game + /// Mode's to follow. + Unreachable, } /// What is at `rel` under `root`, and the path it was looked for at. @@ -229,7 +233,16 @@ enum Found { fn found_at(root: &Path, rel: &Path) -> Result<(PathBuf, Found)> { manifest::check_relative(rel)?; let Ok(target) = resolve_inside(root, rel) else { - return Ok((root.join(rel), Found::Foreign)); + let on_the_way = rel + .parent() + .filter(|p| !p.as_os_str().is_empty()) + .is_some_and(|p| resolve_inside(root, p).is_err()); + let found = if on_the_way { + Found::Unreachable + } else { + Found::Foreign + }; + return Ok((root.join(rel), found)); }; let found = match std::fs::symlink_metadata(&target) { Ok(m) if m.file_type().is_symlink() || !m.is_file() => Found::Foreign, @@ -513,7 +526,8 @@ pub fn apply( /// The game's own settings the manifest records are not undone here /// ([`super::ingame::restore`] is the caller's): while there are any, the /// manifest is not deleted but kept with them alone, so they always have a -/// record. +/// record. So are the entries behind a folder that became a symlink: the +/// file there may still be the one placed. /// /// # Errors /// Returns an error if the game's folder is not there (it was moved, or its @@ -533,6 +547,8 @@ pub fn rollback(state_dir: &Path, m: &Manifest) -> Result> { let mut backups_still_needed = false; let mut kept_now = Vec::new(); let mut touched = std::collections::BTreeSet::new(); + // Entries still recorded after this rollback. + let mut unreachable = Vec::new(); // One folder for every edited config this rollback keeps, named apart // from any other rollback's: two in the same second would otherwise // write over each other's copies. @@ -543,6 +559,19 @@ pub fn rollback(state_dir: &Path, m: &Manifest) -> Result> { let (target, found) = found_at(&m.install_root, &e.path)?; let original = e.replaced.as_ref(); let current = match found { + Found::Unreachable => { + // Deleting the record would leave what may still be + // OptiScaler in the game with nothing that knows it: the + // entry stays recorded with its original's backup, the game + // still reads as changed, and Restore finishes once the + // folder is a folder again. + backups_still_needed |= original.is_some(); + tracing::warn!(target: "graphics", file = %target.display(), + "behind a link now; left in place and still recorded"); + unreachable.push(e.clone()); + outcomes.push(FileOutcome::KeptChanged(e.path.clone())); + continue; + } Found::Foreign => { backups_still_needed |= original.is_some(); if let Some(b) = original { @@ -638,22 +667,39 @@ pub fn rollback(state_dir: &Path, m: &Manifest) -> Result> { tracing::warn!(target: "graphics", game = %m.game_key, error = %format!("{e:#}"), "the list of kept copies could not be written"); } - if m.settings.is_empty() { + let files_left = !unreachable.is_empty(); + if m.settings.is_empty() && !files_left { Manifest::delete(state_dir, &m.game_key)?; } else { - // Files gone, the game's own settings still to put back: the record - // stays, with nothing else in it. + // The game's own settings still to put back, or files behind a + // link still in the game: the record stays, with only them in it — + // and the folders the install created around those files, removed + // with them later. An apply cut short stays one, for the recovery + // at the next start to try again. + let created_dirs = m + .created_dirs + .iter() + .filter(|d| unreachable.iter().any(|e| e.path.starts_with(d))) + .cloned() + .collect(); Manifest { - state: State::Installed, - entries: Vec::new(), - created_dirs: Vec::new(), + state: if files_left { + m.state + } else { + State::Installed + }, + entries: unreachable, + created_dirs, generated: Vec::new(), ..m.clone() } .save(state_dir)?; } - // The configured payload copies are only needed while installed. - let _ = std::fs::remove_dir_all(state_dir.join(&m.game_key).join("staging")); + // The configured payload copies are only needed while installed (Repair + // and Apply read the staged ini). + if !files_left { + let _ = std::fs::remove_dir_all(state_dir.join(&m.game_key).join("staging")); + } if !backups_still_needed { let _ = std::fs::remove_dir_all( Manifest::backup_dir(state_dir, &m.game_key).join(m.started_at.to_string()), @@ -1368,6 +1414,41 @@ mod tests { b"cfg", "not followed" ); + // What is behind the link may still be OptiScaler: the game stays + // recorded as changed, with that file alone. + let left = Manifest::load(&fx.state, "g").unwrap().unwrap(); + assert_eq!(left.state, State::Installed); + assert_eq!( + left.entries + .iter() + .map(|e| e.path.clone()) + .collect::>(), + [PathBuf::from("bin/OptiScaler.ini")] + ); + // The folder is a folder again: the next Restore finishes. + std::fs::remove_file(fx.game.join("bin")).unwrap(); + std::fs::rename(&elsewhere, fx.game.join("bin")).unwrap(); + assert_eq!( + remove(&fx.state, "g").unwrap(), + [FileOutcome::Removed("bin/OptiScaler.ini".into())] + ); + assert!(!fx.game.join("bin/OptiScaler.ini").exists()); + assert!(Manifest::load(&fx.state, "g").unwrap().is_none()); + } + + #[test] + fn a_link_in_place_of_the_file_itself_ends_the_record() { + let fx = fixture(); + let files = [planned(&fx, "dxgi.dll", b"ours", FileKind::Binary)]; + apply(&fx.state, &g(&fx), src(), &files, &[]).unwrap(); + // A mod manager deployed its own dxgi.dll as a link: nothing of + // Big Game Mode's is left there to keep a record of. + std::fs::remove_file(fx.game.join("dxgi.dll")).unwrap(); + std::os::unix::fs::symlink(fx.payload.join("dxgi.dll"), fx.game.join("dxgi.dll")).unwrap(); + assert_eq!( + remove(&fx.state, "g").unwrap(), + [FileOutcome::KeptChanged("dxgi.dll".into())] + ); assert!(Manifest::load(&fx.state, "g").unwrap().is_none()); } From 96e355d2c9f878e10adb457583f9dd9c33b19349 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:23:28 -0300 Subject: [PATCH 20/60] fix(ai-graphics): the buttons go grey in the click that starts a change Apply, Repair, Restore, Update, Go back and "Switch it back on" greyed the page's buttons only after awaiting the running-game check, so a second click before that answer started a second run beside the first. Update and Go back, in the versions group, were never greyed at all, and an analysis started during a change (a choice changed while a release downloads) made every button usable again mid-change. Each of these now claims the page in the click handler itself, before anything is awaited, and a click while a change runs does nothing. The versions group is greyed with the other buttons, and while a change runs only its own end makes the page usable again. The Profiles menu's Restore had no guard either. Its menu and actions are made anew each time the menu opens, so the games whose Restore runs are kept apart from the action, and Restore is grey for them in every menu until it is done. The files are kept safe by the per-game lock in core whatever the UI does; this keeps the second run from starting at all. --- .../bigame-ui/src/views/ai_graphics.rs | 109 ++++++++++++++---- bigame-engine/bigame-ui/src/views/profiles.rs | 18 ++- 2 files changed, 102 insertions(+), 25 deletions(-) diff --git a/bigame-engine/bigame-ui/src/views/ai_graphics.rs b/bigame-engine/bigame-ui/src/views/ai_graphics.rs index a2eedf2..2be6053 100644 --- a/bigame-engine/bigame-ui/src/views/ai_graphics.rs +++ b/bigame-engine/bigame-ui/src/views/ai_graphics.rs @@ -82,6 +82,8 @@ struct Page { status: Chip, /// Set while the page moves a control itself. quiet: Cell, + /// Set while a change to the game runs ([`begin`]). + working: Cell, /// Counts analyses, so only the latest one is shown. generation: Cell, /// The upscaler was changed since the last apply. @@ -1994,18 +1996,21 @@ fn wire_choice(page: &Rc) { let page = Rc::clone(page); c.setting_off .add_action(&i18n("Switch it back on"), true, move |_| { + if !begin(&page, &i18n("Writing the game's settings…")) { + return; + } let page = Rc::clone(&page); glib::spawn_future_local(async move { if refuse_while_running(&page, &page.overlay).await { + end(&page); return; } - busy(&page, Some(&i18n("Writing the game's settings…"))); let target = page.target.clone(); let result = gio::spawn_blocking(move || { graphics::switch_game_setting_on_again(&target) }) .await; - busy(&page, None); + end(&page); let text = match result { Ok(Ok(_)) => i18n("Switched back on in the game's settings"), Ok(Err(e)) => { @@ -2104,7 +2109,17 @@ fn choose_frame_generation(page: &Rc, on: bool) { refresh(page); } +/// Show the page as busy with `text`, or not busy. While a change to the +/// game runs, only [`end`] ends it: an analysis started meanwhile (a choice +/// changed during a download) would make the buttons usable again +/// mid-change. fn busy(page: &Page, text: Option<&str>) { + if !page.working.get() { + show_busy(page, text); + } +} + +fn show_busy(page: &Page, text: Option<&str>) { let on = text.is_some(); page.spinner.set_visible(on); page.spinner.set_spinning(on); @@ -2120,6 +2135,29 @@ fn busy(page: &Page, text: Option<&str>) { ] { b.set_sensitive(!on); } + // Update and Go back change the game's files too. + if let Some(versions) = page.versions.borrow().as_ref() { + versions.set_sensitive(!on); + } +} + +/// Start a change to the game's files, showing `text`. Called in the click +/// itself, before anything is awaited: the buttons are grey before a second +/// click can start a second run beside the first. `false` while another +/// change runs. +fn begin(page: &Page, text: &str) -> bool { + if page.working.get() { + return false; + } + show_busy(page, Some(text)); + page.working.set(true); + true +} + +/// The change [`begin`] started is over. +fn end(page: &Page) { + page.working.set(false); + show_busy(page, None); } /// *Check Again*: read the game's folder, the GPU, the running game and @@ -2270,12 +2308,15 @@ fn render_versions(page: &Rc, offer: &Offer) { /// Update to `to`, or go back to the previous version (`None`). fn change_version(page: &Rc, to: Option) { + if !begin(page, &i18n("Downloading, checking and installing…")) { + return; + } let page = page.clone(); glib::spawn_future_local(async move { if refuse_while_running(&page, &page.overlay).await { + end(&page); return; } - busy(&page, Some(&i18n("Downloading, checking and installing…"))); let target = page.target.clone(); let cfg = page.cfg.borrow().clone(); let result = gio::spawn_blocking(move || { @@ -2286,7 +2327,7 @@ fn change_version(page: &Rc, to: Option format!( "{} {} — {}", @@ -2635,6 +2676,7 @@ fn open_with( hint, status, quiet: Cell::new(false), + working: Cell::new(false), generation: Cell::new(0), upscaler_touched: Cell::new(false), }); @@ -2664,29 +2706,38 @@ fn open_with( let page = page.clone(); let overlay = overlay.clone(); apply.connect_clicked(move |_| { + let native_only = page + .analysis + .borrow() + .as_ref() + .is_some_and(|a| a.plan.optiscaler.is_none() && a.plan.native_action.is_some()); + let doing = if native_only { + i18n("Writing the launch option…") + } else { + i18n("Downloading, checking and installing…") + }; + if !begin(&page, &doing) { + return; + } let page = page.clone(); let overlay = overlay.clone(); glib::spawn_future_local(async move { if refuse_while_running(&page, &overlay).await { + end(&page); return; } - let native_only = page - .analysis - .borrow() - .as_ref() - .is_some_and(|a| a.plan.optiscaler.is_none() && a.plan.native_action.is_some()); if native_only { // The Native backend's one action: a Steam launch option, // written with Steam closed and read back, or the // variables in a Heroic game's settings, written with // Heroic closed. No game file. if page.target.app_id.is_some() && bigame_core::steam::is_running() { + end(&page); overlay.add_toast(adw::Toast::new(&i18n( "Close Steam first: it keeps its configuration in memory and would discard the launch option", ))); return; } - busy(&page, Some(&i18n("Writing the launch option…"))); save_settings(&page); let app = page.target.app_id.clone(); let process = page.target.process.clone(); @@ -2694,12 +2745,11 @@ fn open_with( bigame_core::graphics::fsr4_upgrade::apply(&process, app.as_deref(), true) }) .await; - busy(&page, None); + end(&page); report_fsr4_upgrade(&overlay, &page.target.process, true, result); refresh(&page); return; } - busy(&page, Some(&i18n("Downloading, checking and installing…"))); save_settings(&page); let target = page.target.clone(); let cfg = page.cfg.borrow().clone(); @@ -2733,7 +2783,7 @@ fn open_with( anyhow::Ok((done, lsfg_removed)) }) .await; - busy(&page, None); + end(&page); let text = match result { Ok(Ok((done, lsfg_removed))) => { use bigame_core::graphics::ingame::Applied; @@ -2782,16 +2832,19 @@ fn open_with( let page = page.clone(); let overlay = overlay.clone(); repair.connect_clicked(move |_| { + if !begin(&page, &i18n("Checking files…")) { + return; + } let page = page.clone(); let overlay = overlay.clone(); glib::spawn_future_local(async move { if refuse_while_running(&page, &overlay).await { + end(&page); return; } - busy(&page, Some(&i18n("Checking files…"))); let target = page.target.clone(); let result = gio::spawn_blocking(move || graphics::repair(&target)).await; - busy(&page, None); + end(&page); let text = match result { Ok(Ok(v)) if v.is_empty() => i18n("Every file is as it was installed"), Ok(Ok(v)) => format!("{} ({})", i18n("Missing files put back"), v.len()), @@ -2807,37 +2860,45 @@ fn open_with( let page = page.clone(); let overlay = overlay.clone(); remove.connect_clicked(move |_| { + let installed = page + .analysis + .borrow() + .as_ref() + .is_some_and(|a| a.report.installed.is_some()); + let doing = if installed { + i18n("Restoring the game's own files…") + } else { + i18n("Removing the launch option…") + }; + if !begin(&page, &doing) { + return; + } let page = page.clone(); let overlay = overlay.clone(); glib::spawn_future_local(async move { if refuse_while_running(&page, &overlay).await { + end(&page); return; } - let installed = page - .analysis - .borrow() - .as_ref() - .is_some_and(|a| a.report.installed.is_some()); if !installed { if page.target.app_id.is_some() && bigame_core::steam::is_running() { + end(&page); overlay.add_toast(adw::Toast::new(&i18n( "Close Steam first: it keeps its configuration in memory and would discard the change", ))); return; } - busy(&page, Some(&i18n("Removing the launch option…"))); let app = page.target.app_id.clone(); let process = page.target.process.clone(); let result = gio::spawn_blocking(move || { bigame_core::graphics::fsr4_upgrade::apply(&process, app.as_deref(), false) }) .await; - busy(&page, None); + end(&page); report_fsr4_upgrade(&overlay, &page.target.process, false, result); refresh(&page); return; } - busy(&page, Some(&i18n("Restoring the game's own files…"))); let target = page.target.clone(); let result = gio::spawn_blocking(move || { let out = graphics::restore(&target)?; @@ -2852,7 +2913,7 @@ fn open_with( anyhow::Ok(out) }) .await; - busy(&page, None); + end(&page); let text = match result { Ok(Ok(done)) => { use bigame_core::graphics::transaction::FileOutcome; diff --git a/bigame-engine/bigame-ui/src/views/profiles.rs b/bigame-engine/bigame-ui/src/views/profiles.rs index 998841b..f23e765 100644 --- a/bigame-engine/bigame-ui/src/views/profiles.rs +++ b/bigame-engine/bigame-ui/src/views/profiles.rs @@ -1563,16 +1563,32 @@ fn show_card_menu( } if let Some(target) = entry.target.clone().filter(|_| entry.ai_installed) { + thread_local! { + /// Games whose Restore runs now. The menu and its actions are + /// made anew each time it opens, so an action's own state would + /// not keep a second Restore from starting beside the first. + static RESTORING: RefCell> = RefCell::new(HashSet::new()); + } + let key = target.key(); let restore = gio::SimpleAction::new("restore", None); + restore.set_enabled(!RESTORING.with_borrow(|r| r.contains(&key))); let anchor = anchor.clone(); let rescan = rescan.clone(); - restore.connect_activate(move |_, _| { + restore.connect_activate(move |action, _| { + if !RESTORING.with_borrow_mut(|r| r.insert(key.clone())) { + return; + } + action.set_enabled(false); + let action = action.clone(); + let key = key.clone(); let anchor = anchor.clone(); let target = target.clone(); let rescan = rescan.clone(); glib::spawn_future_local(async move { let t = target.clone(); let result = gio::spawn_blocking(move || bigame_core::graphics::remove(&t)).await; + RESTORING.with_borrow_mut(|r| r.remove(&key)); + action.set_enabled(true); toast::show( &anchor, &match result { From 1c3cdf711cc2f5de7c82cd8431e8fa59a2d4ca54 Mon Sep 17 00:00:00 2001 From: ruscher Date: Sat, 10 Oct 2026 14:24:13 -0300 Subject: [PATCH 21/60] fix(graphics): the Profiles menu's Restore is the page's Restore The two Restores did not do the same. The AI Graphics page took Big Game Mode's WINE_FULLSCREEN_FSR=0 back out of the game's Steam launch options after putting the files back; the Profiles menu left it there, so Wine FSR stayed off for a game that no longer had OptiScaler. And the menu said "The game's files are as they were before" even when files another program changed since were left alone, or the user's edited OptiScaler settings were kept as a copy somewhere. graphics::restore now takes the Wine FSR switch out itself when it went in with Apply (Steam closed; otherwise it stays, harmless, as before), and both Restores call it. Both report the outcome with one function, the page's existing wording and msgids: what was left alone, where the edited settings went, and a game setting not put back yet. --- bigame-engine/bigame-core/src/graphics/mod.rs | 12 ++ .../bigame-ui/src/views/ai_graphics.rs | 119 +++++++++--------- bigame-engine/bigame-ui/src/views/profiles.rs | 10 +- 3 files changed, 78 insertions(+), 63 deletions(-) diff --git a/bigame-engine/bigame-core/src/graphics/mod.rs b/bigame-engine/bigame-core/src/graphics/mod.rs index f4b7519..e6b4dfe 100644 --- a/bigame-engine/bigame-core/src/graphics/mod.rs +++ b/bigame-engine/bigame-core/src/graphics/mod.rs @@ -1380,6 +1380,11 @@ pub struct Restoration { /// settings stay recorded for the next Restore. A prefix that is gone has no /// settings to put back. /// +/// Big Game Mode's `WINE_FULLSCREEN_FSR=0` in the game's Steam launch options +/// went in with `OptiScaler` (Apply), and goes with it — whichever Restore +/// runs, the page's or the Profiles menu's. With Steam open nothing is +/// written: the switch stays, harmless, until the next Restore. +/// /// # Errors /// Returns an error if the game is running, nothing is installed, the record /// is not this game's folder's, or a file cannot be restored. @@ -1387,6 +1392,13 @@ pub fn restore(target: &Target) -> anyhow::Result { let state = state_dir(); let done = locked(&state, target, || restore_in(&state, target)); tidy_cache(&state, &optiscaler::cache_dir()); + if done.is_ok() + && crate::game_settings::load(&target.process).is_ok_and(|s| s.steam_wine_fsr_off) + && let Err(e) = crate::steam_gamescope::set_wine_fsr_off(&target.process, false) + { + tracing::warn!(target: "graphics", game = %target.process, error = %format!("{e:#}"), + "Big Game Mode's Wine FSR switch could not be taken out of the launch options"); + } done } diff --git a/bigame-engine/bigame-ui/src/views/ai_graphics.rs b/bigame-engine/bigame-ui/src/views/ai_graphics.rs index 2be6053..b99cc68 100644 --- a/bigame-engine/bigame-ui/src/views/ai_graphics.rs +++ b/bigame-engine/bigame-ui/src/views/ai_graphics.rs @@ -28,6 +28,7 @@ use bigame_core::graphics::versions::Offer; use bigame_core::graphics::{self, Analysis, ChoiceState, Target, backend, diagnose, external}; use bigame_core::optimization::Feature; use bigame_core::overview::State; +use bigame_core::text::Text; use crate::i18n::{error_text, i18n, ni18n, tr}; use crate::widgets::info::{self, Entry}; @@ -2343,6 +2344,65 @@ fn change_version(page: &Rc, to: Option

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 t6~v+~*Zoy1S2B;_tI diff --git a/docs/screenshots/home-game.png b/docs/screenshots/home-game.png deleted file mode 100644 index e75093a647bdaa7b0138584c13109d80e0b85e0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162217 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%0AhIlq0 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