summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2014-12-04 16:42:00 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-12-04 16:26:47 -0600
commitaa22e0610c67dd86a54f7d7cab7987c399be4c46 (patch)
tree043f46bac21a776972e94dbd5b17b2c0c02d021c
parent3e429ac77df46894444d426d26feda8c8aabe3d0 (diff)
downloadsubsurface-aa22e0610c67dd86a54f7d7cab7987c399be4c46.tar.gz
Don't interpolate pressure while dragging waypoints
A profiler session in the planner shows that for deep long dives a significant amount of CPU time is spent in populate_pressure_information() which interpolates the cylinder pressure graphs. This patch introduces a "fast" flag for the replot of the profile which is active while the mouse button is still pressed and that suppresses this calculation. In the future, this flag could be used for other responsiveness tunings of the plot. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--profile.c11
-rw-r--r--profile.h2
-rw-r--r--qt-ui/profile/profilewidget2.cpp2
3 files changed, 8 insertions, 7 deletions
diff --git a/profile.c b/profile.c
index 20ac03976..6efd05eb7 100644
--- a/profile.c
+++ b/profile.c
@@ -1028,7 +1028,7 @@ static void debug_print_profiledata(struct plot_info *pi)
* sides, so that you can do end-points without having to worry
* about it.
*/
-void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi)
+void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool fast)
{
int o2, he, o2low;
init_decompression(dive);
@@ -1049,10 +1049,11 @@ void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plo
check_gas_change_events(dive, dc, pi); /* Populate the gas index from the gas change events */
check_setpoint_events(dive, dc, pi); /* Populate setpoints */
setup_gas_sensor_pressure(dive, dc, pi); /* Try to populate our gas pressure knowledge */
- populate_pressure_information(dive, dc, pi, false); /* .. calculate missing pressure entries for all gasses except o2 */
- if (dc->dctype == CCR) /* For CCR dives.. */
- populate_pressure_information(dive, dc, pi, true); /* .. calculate missing o2 gas pressure entries */
-
+ if (!fast) {
+ populate_pressure_information(dive, dc, pi, false); /* .. calculate missing pressure entries for all gasses except o2 */
+ if (dc->dctype == CCR) /* For CCR dives.. */
+ populate_pressure_information(dive, dc, pi, true); /* .. calculate missing o2 gas pressure entries */
+ }
fill_o2_values(dc, pi, dive); /* .. and insert the O2 sensor data having 0 values. */
calculate_sac(dive, pi); /* Calculate sac */
calculate_deco_information(dive, dc, pi, false); /* and ceiling information, using gradient factor values in Preferences) */
diff --git a/profile.h b/profile.h
index 147e4801e..5d2009530 100644
--- a/profile.h
+++ b/profile.h
@@ -70,7 +70,7 @@ struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer
void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int bufsize, int sum);
struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *dc, struct plot_info *pi);
struct plot_info *analyze_plot_info(struct plot_info *pi);
-void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi);
+void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool fast);
void calculate_deco_information(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool print_mode);
struct plot_data *get_plot_details_new(struct plot_info *pi, int time, struct membuffer *);
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 347cc1bf8..869a2ed5c 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -492,7 +492,7 @@ void ProfileWidget2::plotDive(struct dive *d, bool force)
* shown.
*/
plotInfo = calculate_max_limits_new(&displayed_dive, currentdc);
- create_plot_info_new(&displayed_dive, currentdc, &plotInfo);
+ create_plot_info_new(&displayed_dive, currentdc, &plotInfo, !shouldCalculateMaxDepth);
if(shouldCalculateMaxTime)
maxtime = get_maxtime(&plotInfo);