From 60b0c43c9061467e81d6bf3d35fb2a67c8d48f70 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Tue, 5 Oct 2021 21:15:33 +0800 Subject: [PATCH] replay: refresh segment window after current segment is changed by seek (#22436) --- selfdrive/ui/replay/replay.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/selfdrive/ui/replay/replay.cc b/selfdrive/ui/replay/replay.cc index 532b3daf80..6655f74ed1 100644 --- a/selfdrive/ui/replay/replay.cc +++ b/selfdrive/ui/replay/replay.cc @@ -88,6 +88,7 @@ void Replay::seekTo(int seconds, bool relative) { if (segments_.empty()) return; bool segment_loaded = false; + bool segment_changed = false; updateEvents([&]() { if (relative) { seconds += ((cur_mono_time_ - route_start_ts_) * 1e-9); @@ -95,14 +96,13 @@ void Replay::seekTo(int seconds, bool relative) { qInfo() << "seeking to" << seconds; cur_mono_time_ = route_start_ts_ + std::clamp(seconds, 0, (int)segments_.size() * 60) * 1e9; - current_segment_ = std::min(seconds / 60, (int)segments_.size() - 1); - segment_loaded = std::find(segments_merged_.begin(), segments_merged_.end(), current_segment_) != segments_merged_.end(); + int segment = std::min(seconds / 60, (int)segments_.size() - 1); + segment_changed = current_segment_.exchange(segment) != segment; + segment_loaded = std::find(segments_merged_.begin(), segments_merged_.end(), segment) != segments_merged_.end(); return segment_loaded; }); - if (!segment_loaded) { - // always emit segmentChanged if segment is not loaded. - // the current_segment_ may not valid when seeking cross boundary or seeking to an invalid segment. + if (segment_changed || !segment_loaded) { emit segmentChanged(); } }