multicam: throttle angle refresh, shrink pre-render window
- MulticamPanel: playback angle refresh runs one cycle per 3 ticks instead of re-requesting every source every tick — each angle decode is a keyframe-scanning FFmpeg seek that stole worker capacity from the main viewer - PreRender frames default 120 -> 12: a window larger than what the pool can render in real time queues far ahead of the playhead, so the painted frame lags seconds behind (playback frozen); a smaller window keeps the backlog bounded - render_graph_frame: OAK_PERF clip-level timing
This commit is contained in:
@@ -1304,11 +1304,21 @@ pub fn render_graph_frame(
|
||||
let mut perf_collect = perf.then(std::time::Instant::now);
|
||||
let mut perf_collect_ms = 0.0f64;
|
||||
let mut frames: Vec<Frame> = Vec::new();
|
||||
for clip in clips {
|
||||
let mut perf_clip_hist: Vec<(oak_node::id::NodeId, f64)> = Vec::new();
|
||||
for clip in clips.clone() {
|
||||
let clip_sw = perf.then(std::time::Instant::now);
|
||||
let request = oak_node::traverser::EvalRequest::new(clip, time);
|
||||
let table = traverser.evaluate(graph, &request, &mut hooks).map_err(|e| {
|
||||
Error::Failed(format!("graph evaluation of clip {clip:?} failed: {e:?}"))
|
||||
})?;
|
||||
if perf {
|
||||
perf_clip_hist.push((
|
||||
clip,
|
||||
clip_sw
|
||||
.map(|t| t.elapsed().as_secs_f64() * 1000.0)
|
||||
.unwrap_or(0.0),
|
||||
));
|
||||
}
|
||||
if let Some(t0) = &perf_collect {
|
||||
perf_collect_ms += t0.elapsed().as_secs_f64() * 1000.0;
|
||||
perf_collect = Some(std::time::Instant::now());
|
||||
@@ -1337,6 +1347,9 @@ pub fn render_graph_frame(
|
||||
let composite_ms = composite_started
|
||||
.map(|t| t.elapsed().as_secs_f64() * 1000.0)
|
||||
.unwrap_or(0.0);
|
||||
for (clip, ms) in &perf_clip_hist {
|
||||
eprintln!("[perf] clip {clip:?} evaluate {ms:.1}ms");
|
||||
}
|
||||
eprintln!(
|
||||
"[perf] graph frame time {time:?} size {size:?}: evaluate {perf_collect_ms:.1}ms composite {composite_ms:.1}ms total {}ms",
|
||||
perf_collect_ms + composite_ms
|
||||
|
||||
Reference in New Issue
Block a user