diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2014-06-04 13:41:50 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-06-04 13:44:34 -0700 |
commit | 714fdc7ced770c16126fadec2b0bf314e9b4a622 (patch) | |
tree | e3bc4f77f6964e530307ef04e7997f001a59f545 | |
parent | f34e6218a03dd91e831a240da3debb7d861e8603 (diff) | |
download | subsurface-714fdc7ced770c16126fadec2b0bf314e9b4a622.tar.gz |
Force TTS/NDL calculation off if things take too long
This is kind of a random cut off, but if plotting the dive takes more than
a second and TTS/NDL is on, we force it off. Because the algorithm for
that is fundamentally quadratic in nature it can take a VERY long time -
getting users to think something is broken.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | qt-ui/mainwindow.cpp | 6 | ||||
-rw-r--r-- | qt-ui/mainwindow.h | 1 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.cpp | 8 |
3 files changed, 15 insertions, 0 deletions
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index f6dd1b37f..ee0e6f090 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -1226,6 +1226,12 @@ void MainWindow::on_profNdl_tts_clicked(bool triggered) prefs.calcndltts = triggered; TOOLBOX_PREF_PROFILE(calcndltts); } +void MainWindow::turnOffNdlTts() +{ + const bool triggered = prefs.calcndltts = false; + TOOLBOX_PREF_PROFILE(calcndltts); +} + void MainWindow::on_profPhe_clicked(bool triggered) { prefs.pp_graphs.phe = triggered; diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index 6f352cc74..46f685f1f 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -148,6 +148,7 @@ protected: public slots: + void turnOffNdlTts(); void readSettings(); void refreshDisplay(bool doRecreateDiveList = true); void recreateDiveList(); diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index 67b0c4b9f..92c368cb8 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -355,6 +355,8 @@ void ProfileWidget2::setupSceneAndFlags() void ProfileWidget2::plotDives(QList<dive *> dives) { static bool firstCall = true; + QTime measureDuration; // let's measure how long this takes us (maybe we'll turn of TTL calculation later + measureDuration.start(); // I Know that it's a list, but currently we are // using just the first. @@ -517,6 +519,12 @@ void ProfileWidget2::plotDives(QList<dive *> dives) DivePlannerPointsModel *model = DivePlannerPointsModel::instance(); model->deleteTemporaryPlan(); } + // OK, how long did this take us? Anything above the second is way too long, + // so if we are calculation TTS / NDL then let's force that off. + if (measureDuration.elapsed() > 1000 && prefs.calcndltts) { + MainWindow::instance()->turnOffNdlTts(); + MainWindow::instance()->showError("Show NDL / TTS was disabled because of excessive processing time"); + } } void ProfileWidget2::settingsChanged() |