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