Retain request dependencies only when discovery supplies the answer
This commit is contained in:
1 parent
8780b40bb7
commit
0e838e9dd1
7 files changed
+183
-50
No files matched your search
@@ -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());
|
||||
}
|
||||
Reference in new issue
Block a user