`BenchReport`'s frame histograms only ever recorded a window's draw and present timings, so a slow foreground task that never dirtied or drew a window was invisible to `gpui::bench` consumers even though GPUI's foreground journal already timed it. Delta hit this concretely: a foreground task stalled for 76-130ms with no window draw in progress, and the only way to see it in a benchmark was to manually queue a marker task and time it by hand, outside the normal report. GPUI already has the data needed to close this gap. The foreground journal (`crate::profiler::journal`, merged separately in #62779) times every foreground task poll, action handler, and input dispatch on the main thread, independent of whether a window ever gets involved. This PR wires that journal into `BenchAppContext`/`BenchReport` so the existing benchmark harness reports it directly, instead of asking benchmark authors to build their own timing side channel. `TraceScope`, the type that already scopes frame-timing collection to a measurement, now also owns a `ForegroundJournalCollector` created at the same point it starts. Since a collector only observes journal entries recorded after its own creation, per-iteration setup work (which runs before the trace scope starts) is excluded from the measurement by construction, the same way it already was for draw/present timings. Drained task poll, action, and input events are recorded into a new `foreground_work` duration histogram on `BenchReport` (draws and presents are skipped there since the existing frame-timing histograms already cover them), exposed through `BenchReport::foreground_work()` as `count`/`total`/`max`/percentiles plus frame-budget overruns at the report's configured FPS, and printed alongside the existing histograms. Because this rides on the same per-task-poll instrumentation that already powers GPUI's hang detection, it works for `bench_task`, `bench_batched_task`, and `bench_renderer` without requiring a window at all, and it aggregates every foreground event recorded during a measurement (not just the first). The `#[cfg(test)]`-only `install_test_foreground_journal` helper is widened from `pub(super)` to `pub(crate)` so `bench_context`'s own tests can install an isolated per-thread journal instead of sharing (and being interfered by) whatever the shared production journal on that thread happens to hold. ## Testing - `cargo test -p gpui --features bench --lib bench_context` - two new focused unit tests drive the foreground journal directly: one proves a 60ms synchronous task poll with no window is reported as foreground work with no frame events recorded; the other proves an 80ms task poll before the trace scope starts is excluded from the measured summary. A third test exercises the real public API end to end, running `BenchAppContext::bench_task` through an actual `criterion::Bencher` (via `criterion::Criterion::bench_function`) and asserting the ~20ms task shows up in `BenchReport::foreground_work()`. - `cargo nextest run -p gpui --features bench --lib profiler` - the existing foreground journal, hang detection, and frame-timing test suites still pass unchanged. - `cargo check -p benchmarks --benches` - the existing `#[gpui::bench]` consumers (`bench_iter`, `bench_renderer`) still compile against the updated `TraceScope`/`BenchReport` internals. - `cargo fmt --package gpui -- --check` and `./script/clippy -p gpui --features bench` are clean. Release Notes: - N/A
Zed
Welcome to Zed, a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
Installation
On macOS, Linux, and Windows you can download Zed directly or install Zed via your local package manager (macOS/Linux/Windows).
Other platforms are not yet available:
- Web (tracking discussion)
Developing Zed
Contributing
See CONTRIBUTING.md for ways you can contribute to Zed.
Also... we're hiring! Check out our jobs page for open roles.
Licensing
Zed source code is licensed primarily under GPL-3.0-or-later, with Apache-2.0 components where marked.
License information for third party dependencies must be correctly provided for CI to pass.
We use cargo-about to automatically comply with open source licenses. If CI is failing, check the following:
- Is it showing a
no license specifiederror for a crate you've created? If so, addpublish = falseunder[package]in your crate's Cargo.toml. - Is the error
failed to satisfy license requirementsfor a dependency? If so, first determine what license the project has and whether this system is sufficient to comply with this license's requirements. If you're unsure, ask a lawyer. Once you've verified that this system is acceptable add the license's SPDX identifier to theacceptedarray inscript/licenses/zed-licenses.toml. - Is
cargo-aboutunable to find the license for a dependency? If so, add a clarification field at the end ofscript/licenses/zed-licenses.toml, as specified in the cargo-about book.
Sponsorship
Zed is developed by Zed Industries, Inc., a for-profit company.
If you’d like to financially support the project, you can do so via GitHub Sponsors. Sponsorships go directly to Zed Industries and are used as general company revenue. There are no perks or entitlements associated with sponsorship.