forked from 1b-agent/opencadstudio-upstream
chore(perf): profile frame pipeline CPU side
Adds ui_selection_overlay bench (benches/performance_benchmarks.rs + README metric 31): builds a representative selection overlay element (snap, crosshair, UCS tripod, 128 grips quick / 4096 capped full) and times widget-tree construction. Measured 0.4us typical, 2.4us at the cap (threshold 50us). Adds ribbon/statusbar section marks to the chrome bucket in view_main (src/app/view/mod.rs) so live PERF=1 view-detail traces attribute those two costs separately. Gated on the existing perf switch; no-op otherwise. Adds pub re-exports of CursorType/IsoPlane (src/app/mod.rs) for the bench fixture (same pattern as the existing grip re-exports). Ranked result over all ui_* benches: ribbon view construction ~556us (largest; follow-up already tracked), everything else under 50us or synthetic-fixture shapes. No new follow-up filed. GPU and canvas-draw costs are unmeasurable in headless runs (view() never executes there).
This commit is contained in:
1 parent
0f02a74eb1
commit
133bfddba9
4 files changed
+128
-5
No files matched your search
@@ -50,6 +50,10 @@ pub use style_ops::StyleKind;
|
||||
/// private / `pub(crate)`; only these two names are reachable externally.
|
||||
pub use properties::apply_grip_budget;
|
||||
pub use settings::MAX_SELECTED_GRIPS;
|
||||
/// Re-exported for the `cargo bench` harness (`ui_selection_overlay`
|
||||
/// constructs `CrosshairOptions`, which names these types). Modules stay
|
||||
/// as they are; only these two names are reachable externally.
|
||||
pub use settings::{CursorType, IsoPlane};
|
||||
|
||||
use document::DocumentTab;
|
||||
|
||||
|
||||
@@ -2121,6 +2121,10 @@ bg={bg_ms:.1}ms n={view_count}"
|
||||
self.show_block_palette,
|
||||
));
|
||||
}
|
||||
// Split the `chrome` bucket so live `view-detail` traces show
|
||||
// ribbon vs status-bar construction separately (both gated on
|
||||
// PERF; zero cost otherwise).
|
||||
mark("ribbon");
|
||||
if self.show_file_tabs {
|
||||
col = col.push(doc_tab_bar(
|
||||
&self.tabs,
|
||||
@@ -2262,6 +2266,7 @@ bg={bg_ms:.1}ms n={view_count}"
|
||||
})
|
||||
.width(Fill)
|
||||
.height(Fill);
|
||||
mark("statusbar");
|
||||
|
||||
// History labels are built only when their dropdown is actually open;
|
||||
// otherwise an empty slice short-circuits the overlay gate
|
||||
|
||||
Reference in new issue
Block a user