improve verification for buffer_proto5
verify that different pieces of the sim are properly connected.
This commit is contained in:
@@ -494,9 +494,18 @@ impl<S: SampleableSim> Renderer<S> for Y4MRenderer {
|
||||
|
||||
struct MultiRendererElement<S> {
|
||||
step_frequency: u64,
|
||||
step_limit: Option<u64>,
|
||||
renderer: Box<dyn Renderer<S>>,
|
||||
}
|
||||
|
||||
impl<S> MultiRendererElement<S> {
|
||||
fn work_this_frame(&self, frame: u64) -> bool {
|
||||
frame % self.step_frequency == 0 && match self.step_limit {
|
||||
None => true,
|
||||
Some(end) => frame < end,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct MultiRenderer<S> {
|
||||
renderers: RwLock<Vec<MultiRendererElement<S>>>,
|
||||
@@ -514,18 +523,19 @@ impl<S> MultiRenderer<S> {
|
||||
pub fn new() -> Self {
|
||||
Default::default()
|
||||
}
|
||||
pub fn push<R: Renderer<S> + 'static>(&self, renderer: R, step_frequency: u64) {
|
||||
pub fn push<R: Renderer<S> + 'static>(&self, renderer: R, step_frequency: u64, step_limit: Option<u64>) {
|
||||
self.renderers.write().unwrap().push(MultiRendererElement {
|
||||
step_frequency,
|
||||
step_limit,
|
||||
renderer: Box::new(renderer),
|
||||
});
|
||||
}
|
||||
pub fn with<R: Renderer<S> + 'static>(self, renderer: R, step_frequency: u64) -> Self {
|
||||
self.push(renderer, step_frequency);
|
||||
pub fn with<R: Renderer<S> + 'static>(self, renderer: R, step_frequency: u64, step_limit: Option<u64>) -> Self {
|
||||
self.push(renderer, step_frequency, step_limit);
|
||||
self
|
||||
}
|
||||
pub fn any_work_for_frame(&self, frame: u64) -> bool {
|
||||
self.renderers.read().unwrap().iter().any(|m| frame % m.step_frequency == 0)
|
||||
self.renderers.read().unwrap().iter().any(|m| m.work_this_frame(frame))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -541,7 +551,7 @@ impl<S: SampleableSim> Renderer<S> for MultiRenderer<S> {
|
||||
|
||||
fn render_with_image(&self, state: &S, im: &RgbImage, measurements: &[Box<dyn AbstractMeasurement>], config: RenderConfig) {
|
||||
for r in &*self.renderers.read().unwrap() {
|
||||
if state.step_no() % r.step_frequency == 0 {
|
||||
if r.work_this_frame(state.step_no()) {
|
||||
r.renderer.render_with_image(state, im, measurements, config);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user