mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-04-15 05:32:21 +00:00
UI Nits: LTMSidebar performance
Don't refresh CP, LTM or Histogram plots when dateRange property is set, if the dateRange was previously plotted anyway. Will set to stale if a ride is added or deleted too. This means the replot of tabs is not performed when simply switching between tabs. But will if the date range does change or a ride is added or deleted meaning the aggregate needs to be re-calculated. There is still one more performance improvement required; 1. get RideFileCache to have a cache of recent aggregations. Since (a) the same ranges will be called over and over by different charts when a season is selected and (b) there are only likely to be 20-30 seasons defined in total, so lets cache them instead of recalculating every time.
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
#include <QXmlSimpleReader>
|
||||
|
||||
CriticalPowerWindow::CriticalPowerWindow(const QDir &home, MainWindow *parent, bool rangemode) :
|
||||
GcWindow(parent), _dateRange("{00000000-0000-0000-0000-000000000001}"), home(home), mainWindow(parent), currentRide(NULL), rangemode(rangemode)
|
||||
GcWindow(parent), _dateRange("{00000000-0000-0000-0000-000000000001}"), home(home), mainWindow(parent), currentRide(NULL), rangemode(rangemode), stale(true)
|
||||
{
|
||||
setInstanceName("Critical Power Window");
|
||||
|
||||
@@ -136,6 +136,9 @@ CriticalPowerWindow::CriticalPowerWindow(const QDir &home, MainWindow *parent, b
|
||||
void
|
||||
CriticalPowerWindow::newRideAdded(RideItem *here)
|
||||
{
|
||||
// any plots we already have are now stale
|
||||
stale = true;
|
||||
|
||||
// mine just got Zapped, a new rideitem would not be my current item
|
||||
if (here == currentRide) currentRide = NULL;
|
||||
|
||||
@@ -375,8 +378,14 @@ CriticalPowerWindow::dateRangeChanged(DateRange dateRange)
|
||||
{
|
||||
if (!amVisible()) return;
|
||||
|
||||
if (dateRange.from == cfrom && dateRange.to == cto && !stale) return;
|
||||
|
||||
cpintPlot->changeSeason(dateRange.from, dateRange.to);
|
||||
cpintPlot->calculate(currentRide);
|
||||
|
||||
cfrom = dateRange.from;
|
||||
cto = dateRange.to;
|
||||
stale = false;
|
||||
}
|
||||
|
||||
void CriticalPowerWindow::seasonSelected(int iSeason)
|
||||
|
||||
@@ -118,6 +118,8 @@ class CriticalPowerWindow : public GcWindow
|
||||
#endif
|
||||
|
||||
bool rangemode;
|
||||
QDate cfrom, cto;
|
||||
bool stale;
|
||||
};
|
||||
|
||||
#endif // _GC_CriticalPowerWindow_h
|
||||
|
||||
@@ -156,10 +156,7 @@ HistogramWindow::rideSelected()
|
||||
void
|
||||
HistogramWindow::rideAddorRemove(RideItem *)
|
||||
{
|
||||
if (rangemode) {
|
||||
stale = true;
|
||||
updateChart();
|
||||
}
|
||||
stale = true;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -186,11 +183,14 @@ HistogramWindow::zonesChanged()
|
||||
powerHist->replot();
|
||||
}
|
||||
|
||||
void HistogramWindow::dateRangeChanged(DateRange)
|
||||
void HistogramWindow::dateRangeChanged(DateRange dateRange)
|
||||
{
|
||||
if (!amVisible()) return;
|
||||
// has it changed?
|
||||
if (dateRange.from != cfrom || dateRange.to != cto)
|
||||
stale = true;
|
||||
|
||||
if (!amVisible() && !stale) return;
|
||||
|
||||
stale = true;
|
||||
updateChart();
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@ HistogramWindow::updateChart()
|
||||
#else
|
||||
source = new RideFileCache(mainWindow, myDateRange.from, myDateRange.to);
|
||||
#endif
|
||||
|
||||
cfrom = myDateRange.from;
|
||||
cto = myDateRange.to;
|
||||
stale = false;
|
||||
|
||||
if (old) delete old; // guarantee source pointer changes
|
||||
|
||||
@@ -115,6 +115,7 @@ class HistogramWindow : public GcWindow
|
||||
int powerRange, hrRange;
|
||||
|
||||
bool stale;
|
||||
QDate cfrom, cto;
|
||||
RideFileCache *source;
|
||||
bool interval;
|
||||
#ifdef GC_HAVE_LUCENE
|
||||
|
||||
@@ -193,7 +193,10 @@ LTMWindow::rideSelected()
|
||||
void
|
||||
LTMWindow::refreshPlot()
|
||||
{
|
||||
if (amVisible() == true) ltmPlot->setData(&settings);
|
||||
if (amVisible() == true) {
|
||||
ltmPlot->setData(&settings);
|
||||
dirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
// total redraw, reread data etc
|
||||
@@ -234,7 +237,7 @@ LTMWindow::metricSelected()
|
||||
void
|
||||
LTMWindow::dateRangeChanged(DateRange range)
|
||||
{
|
||||
if (!amVisible()) return;
|
||||
if (!amVisible() && !dirty) return;
|
||||
|
||||
settings.data = &results;
|
||||
settings.measures = &measures;
|
||||
|
||||
Reference in New Issue
Block a user