mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-25 10:17:02 -06:00
Tests: the drag-budget test sets its thread count, and no render test changes the default
The FreeBSD job fails fx::tests::a_drag_renders_raster_effects_within_the_drag_budget at fx.rs:2822 with 1 previewed instead of 2. pixels_do_not_depend_on_the_thread_count called set_default_threads with 0, 1, 4 and 8. The override is process-wide, so a Renderer::new() in a test running at the same time took that count. With 0 threads a drag renders the drop shadow at full resolution, as RenderOptions::dragging documents, so stats.previewed counts only the filtered content (1 instead of 2). The thread-count test now sets each renderer's threads. The drag test gives its renderers 3 threads, so it also passes where default_threads() is 0 (one CPU, or VECTORCRAFT_RENDER_THREADS=0).
This commit is contained in:
+15
-7
@@ -2389,12 +2389,13 @@ mod tests {
|
||||
}
|
||||
let opts = RenderOptions { background: Some([255, 255, 255, 255]), ..Default::default() };
|
||||
let mut frames = vec![];
|
||||
for threads in [Some(0), Some(1), Some(4), Some(8)] {
|
||||
crate::set_default_threads(threads);
|
||||
// The test sets each renderer's count. `set_default_threads` would also change the count of the
|
||||
// renderers that other tests create while this one runs.
|
||||
for threads in [0, 1, 4, 8] {
|
||||
let mut r = Renderer::new();
|
||||
r.threads = threads;
|
||||
frames.push(r.render(&d, 1200, 900, Affine::scale(6.0), &opts).pixels);
|
||||
}
|
||||
crate::set_default_threads(None);
|
||||
assert!(frames.windows(2).all(|w| w[0] == w[1]), "the thread count changed pixels");
|
||||
}
|
||||
|
||||
@@ -2852,8 +2853,15 @@ mod tests {
|
||||
let still = RenderOptions { background: Some([255, 255, 255, 255]), ..Default::default() };
|
||||
let live = RenderOptions { interacting: true, ..still.clone() };
|
||||
let drag = RenderOptions { dragging: true, ..live.clone() };
|
||||
let fresh = Renderer::new().render(&d, 1600, 1000, view, &still).pixels;
|
||||
let mut r = Renderer::new();
|
||||
// Every renderer here has 3 threads on any machine. A drag renders drop shadows within its
|
||||
// budget only with `threads` above 0.
|
||||
let threaded = || {
|
||||
let mut r = Renderer::new();
|
||||
r.threads = 3;
|
||||
r
|
||||
};
|
||||
let fresh = threaded().render(&d, 1600, 1000, view, &still).pixels;
|
||||
let mut r = threaded();
|
||||
let _ = r.render(&base, 1600, 1000, view, &still);
|
||||
assert_eq!(r.stats.previewed, 0);
|
||||
let dragged = r.render(&d, 1600, 1000, view, &drag).pixels;
|
||||
@@ -2873,14 +2881,14 @@ mod tests {
|
||||
let id = scaled.layers[0].children().unwrap()[0].id;
|
||||
scaled.node_mut(id).unwrap().transform(Affine::scale_about(1.05, vectorcraft_geom::Point::new(35.0, 33.0)), false);
|
||||
let view = Affine::translate((800.0, 500.0)) * Affine::scale(40.0) * Affine::translate((-35.0, -33.0));
|
||||
let mut r = Renderer::new();
|
||||
let mut r = threaded();
|
||||
let _ = r.render(&shadowed, 1600, 1000, view, &still);
|
||||
let kept = r.shadows.len();
|
||||
assert_eq!((kept, r.stats.previewed), (1, 0), "a still frame keeps the shadow's raster");
|
||||
let _ = r.render(&scaled, 1600, 1000, view, &drag);
|
||||
assert_eq!((r.shadows.len(), r.stats.previewed), (kept, 1), "the scaled shadow");
|
||||
let after = r.render(&scaled, 1600, 1000, view, &still).pixels;
|
||||
assert!(after == Renderer::new().render(&scaled, 1600, 1000, view, &still).pixels, "the frame after the drag");
|
||||
assert!(after == threaded().render(&scaled, 1600, 1000, view, &still).pixels, "the frame after the drag");
|
||||
}
|
||||
|
||||
/// While interacting, a group holding a symbol instance whose art lies outside the 20 × 20
|
||||
|
||||
Reference in New Issue
Block a user