summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/statistics.c13
-rw-r--r--core/statistics.h2
2 files changed, 10 insertions, 5 deletions
diff --git a/core/statistics.c b/core/statistics.c
index 1b9865443..62a4d737f 100644
--- a/core/statistics.c
+++ b/core/statistics.c
@@ -47,10 +47,10 @@ static void process_temperatures(struct dive *dp, stats_t *stats)
static void process_dive(struct dive *dp, stats_t *stats)
{
- int old_tt, sac_time = 0;
+ int old_tadt, sac_time = 0;
uint32_t duration = dp->duration.seconds;
- old_tt = stats->total_time.seconds;
+ old_tadt = stats->total_average_depth_time.seconds;
stats->total_time.seconds += duration;
if (duration > stats->longest_time.seconds)
stats->longest_time.seconds = duration;
@@ -66,9 +66,12 @@ static void process_dive(struct dive *dp, stats_t *stats)
/* Maybe we should drop zero-duration dives */
if (!duration)
return;
- stats->avg_depth.mm = (1.0 * old_tt * stats->avg_depth.mm +
- duration * dp->meandepth.mm) /
- stats->total_time.seconds;
+ if (dp->meandepth.mm) {
+ stats->total_average_depth_time.seconds += duration;
+ stats->avg_depth.mm = (1.0 * old_tadt * stats->avg_depth.mm +
+ duration * dp->meandepth.mm) /
+ stats->total_average_depth_time.seconds;
+ }
if (dp->sac > 100) { /* less than .1 l/min is bogus, even with a pSCR */
sac_time = stats->total_sac_time + duration;
stats->avg_sac.mliter = (1.0 * stats->total_sac_time * stats->avg_sac.mliter +
diff --git a/core/statistics.h b/core/statistics.h
index 015c3481e..732ae79cd 100644
--- a/core/statistics.h
+++ b/core/statistics.h
@@ -16,6 +16,8 @@ typedef struct
{
int period;
duration_t total_time;
+ /* total time of dives with non-zero average depth */
+ duration_t total_average_depth_time;
/* avg_time is simply total_time / nr -- let's not keep this */
duration_t shortest_time;
duration_t longest_time;