Cabana: update line series concurrently (#26339)

update series concurrently
old-commit-hash: e4ec1d7c4c
taco
Dean Lee 3 years ago committed by GitHub
parent 01b10ac864
commit 21960039ed
  1. 9
      tools/cabana/chartswidget.cc
  2. 4
      tools/cabana/chartswidget.h

@ -1,11 +1,13 @@
#include "tools/cabana/chartswidget.h" #include "tools/cabana/chartswidget.h"
#include <QFutureSynchronizer>
#include <QGraphicsLayout> #include <QGraphicsLayout>
#include <QGridLayout> #include <QGridLayout>
#include <QRubberBand> #include <QRubberBand>
#include <QTimer> #include <QTimer>
#include <QtCharts/QLineSeries> #include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis> #include <QtCharts/QValueAxis>
#include <QtConcurrent>
// ChartsWidget // ChartsWidget
@ -116,8 +118,9 @@ void ChartsWidget::updateState() {
display_range.first = std::max(display_range.first, event_range.first); display_range.first = std::max(display_range.first, event_range.first);
display_range.second = std::min(display_range.first + settings.max_chart_x_range, event_range.second); display_range.second = std::min(display_range.first + settings.max_chart_x_range, event_range.second);
if (prev_range != display_range) { if (prev_range != display_range) {
QFutureSynchronizer<void> future_synchronizer;
for (auto c : charts) for (auto c : charts)
c->chart_view->updateSeries(display_range); future_synchronizer.addFuture(QtConcurrent::run(c->chart_view, &ChartView::updateSeries, display_range));
} }
} }
@ -328,7 +331,7 @@ void ChartView::updateLineMarker(double current_sec) {
} }
} }
void ChartView::updateSeries(const std::pair<double, double> &range) { void ChartView::updateSeries(const std::pair<double, double> range) {
auto events = can->events(); auto events = can->events();
if (!events) return; if (!events) return;
@ -337,7 +340,7 @@ void ChartView::updateSeries(const std::pair<double, double> &range) {
uint32_t address = l[1].toUInt(nullptr, 16); uint32_t address = l[1].toUInt(nullptr, 16);
vals.clear(); vals.clear();
vals.reserve((range.second - range.first) * 100); // [n]minutes * 100hz vals.reserve((range.second - range.first) * 1000); // [n]seconds * 1000hz
double route_start_time = can->routeStartTime(); double route_start_time = can->routeStartTime();
Event begin_event(cereal::Event::Which::INIT_DATA, (route_start_time + range.first) * 1e9); Event begin_event(cereal::Event::Which::INIT_DATA, (route_start_time + range.first) * 1e9);
auto begin = std::lower_bound(events->begin(), events->end(), &begin_event, Event::lessThan()); auto begin = std::lower_bound(events->begin(), events->end(), &begin_event, Event::lessThan());

@ -21,7 +21,7 @@ class ChartView : public QChartView {
public: public:
ChartView(const QString &id, const Signal *sig, QWidget *parent = nullptr); ChartView(const QString &id, const Signal *sig, QWidget *parent = nullptr);
void updateSeries(const std::pair<double, double> &range); void updateSeries(const std::pair<double, double> range);
void setRange(double min, double max, bool force_update = false); void setRange(double min, double max, bool force_update = false);
void updateLineMarker(double current_sec); void updateLineMarker(double current_sec);
void updateFromSettings(); void updateFromSettings();
@ -42,7 +42,7 @@ private:
QGraphicsEllipseItem *track_ellipse; QGraphicsEllipseItem *track_ellipse;
QGraphicsTextItem *value_text; QGraphicsTextItem *value_text;
QGraphicsLineItem *line_marker; QGraphicsLineItem *line_marker;
QList<QPointF> vals; QVector<QPointF> vals;
QString id; QString id;
const Signal *signal; const Signal *signal;
}; };

Loading…
Cancel
Save