Retain request dependencies only when discovery supplies the answer

This commit is contained in:
iris-ai committed 2026-09-20 17:31:53 -04:00
1 parent 8780b40bb7
commit 0e838e9dd1
7 files changed
+183 -50

No files matched your search

+37 -4
View File
@@ -13,11 +13,12 @@
//!
//! `IRIS_PHASE` is `cold`, `repaint`, `many`, `size`, `scroll`, `resize`, or
//! `all`. `IRIS_SEED`, `IRIS_DEPTH`, and `IRIS_FRAMES` select the load, and
//! `IRIS_DIRTY` how many widgets `many` marks at once.
//! `IRIS_DIRTY` how many widgets `many` marks at once. `IRIS_UNBOUNDED=1`
//! removes intrinsic bounds while preserving the rest of the generated tree.
use iris::harness::Harness;
use iris::prelude::*;
use iris::random::{Edits, Tree, grow};
use iris::random::{Edits, Tree, build, plan};
use std::time::Instant;
const OUTPUT: (f32, f32) = (1920.0, 1200.0);
@@ -125,9 +126,25 @@ fn rig_edits() -> Edits {
}
}
fn fixture(harness: &mut Harness, seed: u64, depth: usize) -> (StrongWidget, Tree) {
let mut plan = plan(seed, depth, &rig_edits());
if env("IRIS_UNBOUNDED", 0_u8) != 0 {
plan.walk_mut(&mut |node| {
if let Some(rules) = &mut node.size {
for axis in Axis::BOTH {
if rules[axis].bound() != Bound::ANY {
rules[axis] = SizeRule::Free;
}
}
}
});
}
build(&mut harness.rsc, &plan)
}
fn warm(seed: u64, depth: usize) -> (Harness, Tree) {
let mut harness = Harness::new(OUTPUT);
let (root, tree) = grow(&mut harness.rsc, seed, depth, &rig_edits());
let (root, tree) = fixture(&mut harness, seed, depth);
harness.state.root = Some(root);
harness.frame();
println!(
@@ -209,7 +226,7 @@ fn layout_cost() {
if selected("cold") {
let mut harness = Harness::new(OUTPUT);
let (root, tree) = grow(&mut harness.rsc, seed, depth, &rig_edits());
let (root, tree) = fixture(&mut harness, seed, depth);
harness.state.root = Some(root);
println!(
"fixture: seed {seed}, depth {depth}, {} widgets",
@@ -276,3 +293,19 @@ fn layout_cost() {
});
}
}
#[cfg(feature = "layout-diagnostics")]
#[test]
fn repainting_measured_text_does_not_invalidate_its_span() {
use iris::core::layout_diagnostics as diag;
let mut h = Harness::new((400, 200));
let text = wtext("a paragraph that fits").wrap(true).add(&mut h.rsc);
h.set_root((text, wtext("another paragraph")).span(Dir::DOWN));
let _ = diag::take();
h.rsc.widgets_mut().mark_for_redraw(text);
h.frame();
let report = diag::take();
assert_eq!(report.distinct_widgets(), 1);
assert_eq!(report.hot_widgets()[0].id, text.id());
}