Skip to content

hdrgen hangs during merge on Windows (WebView2); every other host passes #245

Description

@adulbrich

Symptom

The desktop pipeline reaches the merge stage and stops. On a GitHub windows-latest runner, with a ten-minute budget:

19:20:50  Processing set 1 of 1: ...\e2e-tests\test\inputs\JPEG
19:21:23  Merging exposures
19:21:28  Filtering images: kept 13 of 18
          (nothing further for 600 s)

No crash, no exception, no out-of-memory, no error toast, and nothing waiting on a dialog. The webview reports tauri=true workers=true. It simply never returns.

Filtering is reported from inside the merge stage, so what has hung is hdrgen itself, on 13 JPEG frames.

What is not the cause

Each of these was checked rather than assumed:

  • Not slowness. The budget was raised from 180 s to 600 s and the stall point did not move. The same bracket takes ~24 s on macOS and passes comfortably on Ubuntu.
  • Not a blocked dialog. The run-confirmation is answered, and the failure report explicitly looks for a dialog offering a decision. None is present.
  • Not the Web Worker. workers=true, and the worker got far enough to report filtering results back to the page.
  • Not a Tauri IPC failure. tauri=true, and the earlier stages read their input files successfully.

Where it does work

Host Engine Result
macOS desktop WKWebView passes, ~1m42s for the whole suite
Ubuntu desktop WebKitGTK passes in CI
Browser (WebKit) WebKit passes in CI
Browser (Chromium) Chromium passes in CI
Windows desktop WebView2 hangs

Windows is the only failing host, and WebView2 is the only engine not otherwise represented. That is the odd part: WebView2 is Chromium, and Chromium passes in the browser suite. So it is not simply "Chromium cannot run this".

Why this was not noticed sooner

The e2e-tests job carried continue-on-error: true, so the workflow reported success with two failing jobs. This case has never passed on Windows; the recent CI rework removed the flag, which is what made it visible.

The open question, and it matters

Is this specific to a two-core CI runner, or does it affect real Windows users?

Nothing here distinguishes them. The desktop app ships a Windows installer, so "hdrgen hangs" would be severe rather than cosmetic. This needs someone to run a JPEG bracket through the app on a real Windows machine before the next release.

Suggested next steps

  1. Run the reference JPEG bracket on real Windows hardware. If it completes, this is a runner artefact and the CI case can be scoped accordingly.
  2. If it reproduces, instrument hdrgen's wasm entry: log around callMain, and record the heap size at the point of the stall. The wasm32 ceiling and its ~1.6 GB floor at ~70 bytes/pixel are documented in Epic: port the pipeline to WebAssembly for a zero-dependency desktop app and a fully client-side web app #227.
  3. Worth ruling out Windows Defender scanning the wasm heap growth, which is pathological on GitHub runners.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions