From 16780fa765500c7eb9c42e4fbf7abdfab07748dd Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Fri, 17 May 2019 09:59:34 -0700 Subject: [PATCH] libsysprof-ui: ignore negative and 0 averages This ensures that we only calculate averages for marks that have a valid duration. We also need a new field for the number of averages we added so that we don't skew the results. --- src/libsysprof-ui/sysprof-capture-view.c | 11 ++++++++--- src/libsysprof-ui/sysprof-ui-private.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libsysprof-ui/sysprof-capture-view.c b/src/libsysprof-ui/sysprof-capture-view.c index 8d2a36d9..15e96ace 100644 --- a/src/libsysprof-ui/sysprof-capture-view.c +++ b/src/libsysprof-ui/sysprof-capture-view.c @@ -358,7 +358,12 @@ sysprof_capture_view_scan_worker (GTask *task, if (mark->duration > mstat->max) mstat->max = mark->duration; - mstat->avg += mark->duration; + if (mark->duration > 0) + { + mstat->avg += mark->duration; + mstat->avg_count++; + } + mstat->count++; } @@ -395,8 +400,8 @@ sysprof_capture_view_scan_worker (GTask *task, { SysprofMarkStat *mstat = v; - if (mstat->count > 0 && mstat->avg > 0) - mstat->avg /= mstat->count; + if (mstat->avg_count > 0 && mstat->avg > 0) + mstat->avg /= mstat->avg_count; #if 0 g_print ("%s: count=%ld avg=%ld min=%ld max=%ld\n", diff --git a/src/libsysprof-ui/sysprof-ui-private.h b/src/libsysprof-ui/sysprof-ui-private.h index 99d5bc64..d6982c18 100644 --- a/src/libsysprof-ui/sysprof-ui-private.h +++ b/src/libsysprof-ui/sysprof-ui-private.h @@ -32,6 +32,7 @@ typedef struct gint64 max; gint64 min; gint64 avg; + guint64 avg_count; } SysprofMarkStat; SysprofMarkStat *_sysprof_mark_stat_new (const gchar *name);