From 965200181369a917de5a37fbf88e895c49a34804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 8 Nov 2026 02:30:20 +0100 Subject: [PATCH] FerroUI d2da3a615: theme unit trimming of binding types, release without unwinding The FerroUI submodule moves to main d2da3a615, with the workspace blocks written by sync-workspace.py and the lock file to match. It brings the size work since the last update: trimmed theme units take the classes of their binding paths with them (#612 root D), release builds abort on panic as dist does with release-unwind for programs that catch panics (#567), the theme crates are optimised for size in dist (#581), and typed Frame navigation (#612 B3). --- Cargo.toml | 31 ++++++++++++++++++++++++++++++- FerroUI | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b371baf..9ada95f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -284,17 +284,28 @@ getrandom = { version = "0.4" } # >>> FerroUI profiles (written by FerroUI/scripts/apps/sync-workspace.py from FerroUI/Cargo.toml; do not edit) # The default release build is the one that is built most often, so it is set up for build time: # thin LTO over the default sixteen code generation units, which generates code on all cores. +# It aborts on panic, as `dist` does (#567, docs/binary-size.md, section 4.7): no framework path +# relies on catching a panic, and unwinding tables and landing pads are a fifth of an executable. [profile.release] lto = "thin" +panic = "abort" + +# `release` with unwinding, for a program that catches panics to carry on (a plug-in host, a tool +# that isolates the code it runs). Tests and benchmarks unwind in every profile. +[profile.release-unwind] +inherits = "release" +panic = "unwind" # Optimised code for running an application locally (`cargo run --profile fast-release -p `): # the optimisation level of release, without link-time optimisation across crates. The last step # of an executable then links the optimised crates instead of optimising the whole program again, # which took most of a release build of a large application. Not for measurements or shipping: -# the benchmarks are measured with release, and what is shipped is built with dist. +# the benchmarks are measured with release, and what is shipped is built with dist. It unwinds: +# the Designer and the previewer, run this way, isolate the code of the previewed application. [profile.fast-release] inherits = "release" lto = false +panic = "unwind" # The build that is shipped and measured (`cargo build --profile dist`, `scripts/perf-report.py # --profile dist`): whole-program optimisation in one code generation unit. The executables are @@ -330,6 +341,24 @@ panic = "abort" inherits = "dist" panic = "unwind" +# Compiled theme markup runs once, when a theme is constructed, and is a large share of an +# executable: the theme crates are optimised for size in the shipped build (#581). Their start-up +# cost is within noise (docs/binary-size.md, section 4.14). +[profile.dist.package.ferroui-themes-winui] +opt-level = "z" + +[profile.dist.package.ferroui-themes-fluent] +opt-level = "z" + +[profile.dist.package.ferroui-themes-simple] +opt-level = "z" + +[profile.dist.package.ferroui-themes-macos] +opt-level = "z" + +[profile.dist.package.ferroui-themes-material] +opt-level = "z" + # The WebAssembly module of the browser (scripts/build-browser.sh): optimised for size, because the # module is downloaded and compiled by every visitor (docs/porting/browser-platform.md, section 18). # The crates of the run-time XAML loader stay optimised for speed: at "z" the start-up of a themed diff --git a/FerroUI b/FerroUI index 0c0ea2a..d2da3a6 160000 --- a/FerroUI +++ b/FerroUI @@ -1 +1 @@ -Subproject commit 0c0ea2a72f1a3fce5693991efb79631dae5e6603 +Subproject commit d2da3a6151140e2356b13612995d1f51ab6d4c06