Keep the re-place load as a rig, so the next attempt is compared not argued
This commit is contained in:
1 parent
d8c497fcd7
commit
78a53b6bf6
1 file changed
+43
@@ -0,0 +1,43 @@
|
||||
//! What re-placing a subtree costs per frame, as a load for a counter rather
|
||||
//! than a check. A span of 200 fixed-height rows, five primitives each, with
|
||||
//! the row above them changing height every frame, so every row below is
|
||||
//! offered a box the same shape somewhere else.
|
||||
//!
|
||||
//! cargo test --release --test replace_cost -- --ignored
|
||||
//! perf stat -e instructions:u target/release/.../replace_cost-* --ignored
|
||||
//!
|
||||
//! Wall time is the wrong number here; see `draw_cost.rs`. Measured on
|
||||
//! 2026-09-14 at 1.98M instructions per frame, against 2.38M for rewriting
|
||||
//! each row's regions instead and 7.13M for redrawing them.
|
||||
|
||||
use iris::harness::Harness;
|
||||
use iris::prelude::*;
|
||||
|
||||
const ROWS: usize = 200;
|
||||
const FRAMES: usize = 200;
|
||||
|
||||
#[test]
|
||||
#[ignore = "measurement, not a check"]
|
||||
fn replacing_rows_every_frame() {
|
||||
let mut h = Harness::new((1920, 1200));
|
||||
let first = rect(Color::RED).height(40).add(&mut h.rsc);
|
||||
let mut span = Span::empty(Dir::DOWN);
|
||||
span.push(first.add_strong(&mut h.rsc));
|
||||
for i in 0..ROWS {
|
||||
let row = (
|
||||
rect(Color::BLUE.darker(i as f32 / (ROWS * 2) as f32)),
|
||||
rect(Color::GREEN).pad(2),
|
||||
wtext("row").size(16).pad(2),
|
||||
)
|
||||
.span(Dir::RIGHT)
|
||||
.pad(4)
|
||||
.height(40)
|
||||
.add(&mut h.rsc);
|
||||
span.push(row.add_strong(&mut h.rsc));
|
||||
}
|
||||
h.set_root(span);
|
||||
for i in 0..FRAMES {
|
||||
h.rsc[first].y = Some(Len::abs(40.0 + (i % 2) as f32));
|
||||
h.frame();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user