perf+fix: DMABUF default on Linux, popout ACL fixes, plugin version sync, JFK bench fixture
Bundled work from a low-end laptop (Ryzen 5 4650U / Vega 6 / Linux Mint
22.2 / X11) profiling pass.
perf: WEBKIT_DISABLE_DMABUF_RENDERER=1 default on all Linux
Previously only set on Wayland sessions. Empirically it's a
significant idle-cost win on integrated GPUs in either session type:
env-var matrix (release binary, 75s settle, 10s jiffies CPU sample)
showed magnotia idle CPU 12.30% → 2.80% of one core and idle GPU
17% → 10% on this hardware. Users can opt back in by exporting
WEBKIT_DISABLE_DMABUF_RENDERER=0. The Wayland-only XWayland
fallback (GDK_BACKEND=x11, WINIT_UNIX_BACKEND=x11) is unchanged.
fix: secondary-windows ACL — allow set-always-on-top
The float window's pin toggle calls setAlwaysOnTop() but the
secondary-windows capability didn't permit it, so the popout was
stuck always-on-top regardless of the pin state. Adds the
core:window:allow-set-always-on-top permission. Narrow scope.
fix: guard registerGlobalHotkey against non-main webviews
Cross-window settings sync via localStorage can re-fire the
$effect(() => settings.globalHotkey) callback inside popout webviews
where the main layout's registerGlobalHotkey is reachable. Adds an
early-return when the current window label is not "main", so the
popout doesn't trigger an ACL-denied register/unregister and the
user no longer sees a spurious "Hotkey not registered" toast when
popouts are open. Keeps the global-shortcut perm scoped to main.
build: pin @tauri-apps/api 2.10.1 + @tauri-apps/plugin-dialog 2.7.1
Match the Rust crate versions tauri-cli's version-mismatch check
enforces during release builds. Without this, `npm run tauri build`
exits 0 silently while emitting an Error and never producing
binaries.
test: add crates/transcription/tests/jfk_bench.rs
Reproducible RTF regression fixture. Env-gated on
MAGNOTIA_WHISPER_TEST_MODEL + MAGNOTIA_WHISPER_TEST_AUDIO so it
never runs in CI without setup. Loads the JFK WAV inline (no hound
dep), times model load + cold + warm transcribe, prints SUMMARY.
Baselines on this hardware:
--release --features whisper: cold RTF 0.054, warm 0.050, RSS 125 MB
--release --features whisper,whisper-vulkan: cold RTF 0.029, warm 0.028, RSS 125 MB
Vulkan on RADV/Vega 6 nearly halves transcription latency for
Whisper Tiny — useful baseline for Phase 10 hardware-recommendation
scoring.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -105,6 +105,21 @@
|
||||
if (!tauriRuntimeAvailable) return;
|
||||
if (hotkeyBackend === "unknown") return; // not yet initialised
|
||||
|
||||
// Only the main window owns the global shortcut. Secondary windows
|
||||
// (tasks-float, transcript-viewer, transcription-preview) inherit the
|
||||
// root layout via SvelteKit's `+layout@.svelte` break — they don't
|
||||
// mount this code, but cross-window settings sync via localStorage
|
||||
// can still re-fire `$effect(() => settings.globalHotkey)` callbacks
|
||||
// in webviews where this function happens to be in scope. Guard so
|
||||
// we don't trigger an ACL-denied register from a popout's webview.
|
||||
try {
|
||||
const label = (await import("@tauri-apps/api/window")).getCurrentWindow().label;
|
||||
if (label !== "main") return;
|
||||
} catch {
|
||||
// If the window-label probe fails, fall through — main is the
|
||||
// expected default and the ACL will catch a misuse.
|
||||
}
|
||||
|
||||
try {
|
||||
if (hotkeyBackend === "evdev") {
|
||||
// evdev backend: start or update the Rust-side listener
|
||||
|
||||
Reference in New Issue
Block a user