Skip to content

Commit 3d13807

Browse files
Only initialize empty series once fixes mem leak. (#361)
1 parent bb851b7 commit 3d13807

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

resources/TrackingTabComponents/TrackingSignalsTab.qml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Item {
1515
property alias check_labels: trackingSignalsPoints.check_labels
1616
property alias num_labels: trackingSignalsPoints.num_labels
1717
property variant check_visibility: []
18+
property var emptySeries: null
1819

1920
TrackingSignalsPoints {
2021
id: trackingSignalsPoints
@@ -87,6 +88,13 @@ Item {
8788
if (!trackingSignalsTab.visible)
8889
return ;
8990

91+
if (emptySeries == null) {
92+
emptySeries = trackingSignalsChart.createSeries(ChartView.SeriesTypeLine, "", trackingSignalsXAxis);
93+
emptySeries.axisYRight = trackingSignalsYAxis;
94+
emptySeries.width = Constants.commonChart.lineWidth;
95+
emptySeries.useOpenGL = Globals.useOpenGL;
96+
trackingSignalsPoints.addEmptySeries(emptySeries);
97+
}
9098
if (all_series.length < num_labels) {
9199
for (var i = all_series.length; i < num_labels; i++) {
92100
var series = trackingSignalsChart.createSeries(ChartView.SeriesTypeLine, trackingSignalsPoints.getLabel(i), trackingSignalsXAxis);
@@ -97,11 +105,6 @@ Item {
97105
trackingSignalsPoints.addSeries(series);
98106
}
99107
}
100-
var series = trackingSignalsChart.createSeries(ChartView.SeriesTypeLine, "", trackingSignalsXAxis);
101-
series.axisYRight = trackingSignalsYAxis;
102-
series.width = Constants.commonChart.lineWidth;
103-
series.useOpenGL = Globals.useOpenGL;
104-
trackingSignalsPoints.addSeries(series);
105108
trackingSignalsPoints.fill_all_series();
106109
trackingSignalsChart.visible = true;
107110
trackingSignalsXAxis.min = trackingSignalsPoints.xaxis_min;

swiftnav_console/tracking_signals_tab.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Tracking Signals Tab QObjects.
22
"""
33

4-
from typing import Dict, List, Any
4+
from typing import Dict, List, Any, Optional
55

66
from PySide2.QtCore import Property, QObject, Signal, Slot
77
from PySide2.QtCharts import QtCharts
@@ -24,6 +24,7 @@ class TrackingSignalsPoints(QObject):
2424
_xaxis_min: float = 0.0
2525
_xaxis_max: float = 0.0
2626
_check_labels: List[str] = []
27+
_empty_series: Optional[QtCharts.QXYSeries] = None
2728
_all_series: List[QtCharts.QXYSeries] = []
2829
_enabled_series: List[QtCharts.QXYSeries] = []
2930
num_labels_changed = Signal(int, arguments="num_labels")
@@ -76,26 +77,34 @@ def addSeries(self, series) -> None:
7677
self._all_series.append(series)
7778
self.all_series_changed.emit() # type: ignore
7879

80+
@Slot(QtCharts.QAbstractSeries) # type: ignore
81+
def addEmptySeries(self, series) -> None:
82+
"""Store a QML created series in empty_series"""
83+
self._empty_series = series
84+
7985
@Slot() # type: ignore
8086
def fill_all_series(self) -> None:
8187
cur_num_labels = len(TRACKING_SIGNALS_TAB[Keys.LABELS])
8288
if self._num_labels != cur_num_labels:
8389
self._num_labels = cur_num_labels
8490
self.num_labels_changed.emit(cur_num_labels) # type: ignore
85-
points_for_all_series = TRACKING_SIGNALS_TAB[Keys.POINTS]
91+
all_points = TRACKING_SIGNALS_TAB[Keys.POINTS]
92+
points_for_all_series = all_points[:-1]
93+
if self._empty_series is not None and len(all_points) > 0:
94+
self._empty_series.replace(all_points[-1])
8695

8796
labels = TRACKING_SIGNALS_TAB[Keys.LABELS]
8897
colors = TRACKING_SIGNALS_TAB[Keys.COLORS]
8998
if self._check_labels != TRACKING_SIGNALS_TAB[Keys.CHECK_LABELS]:
9099
self._check_labels = TRACKING_SIGNALS_TAB[Keys.CHECK_LABELS]
91100
self.check_labels_changed.emit() # type: ignore
92101

93-
if len(points_for_all_series) != 0:
94-
xaxis_min = points_for_all_series[0][-1].x() + TRACKING_SIGNALS_TAB[Keys.XMIN_OFFSET]
102+
if len(all_points) != 0:
103+
xaxis_min = all_points[0][-1].x() + TRACKING_SIGNALS_TAB[Keys.XMIN_OFFSET]
95104
if self._xaxis_min != xaxis_min:
96105
self._xaxis_min = xaxis_min
97106
self.xaxis_min_changed.emit() # type: ignore
98-
xaxis_max = points_for_all_series[0][-1].x()
107+
xaxis_max = all_points[0][-1].x()
99108
if self._xaxis_max != xaxis_max:
100109
self._xaxis_max = xaxis_max
101110
self.xaxis_max_changed.emit() # type: ignore

0 commit comments

Comments
 (0)