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.
This commit is contained in:
Christian Hergert
2019-05-17 09:59:34 -07:00
parent ed8e23f776
commit 16780fa765
2 changed files with 9 additions and 3 deletions

View File

@ -358,7 +358,12 @@ sysprof_capture_view_scan_worker (GTask *task,
if (mark->duration > mstat->max) if (mark->duration > mstat->max)
mstat->max = mark->duration; mstat->max = mark->duration;
mstat->avg += mark->duration; if (mark->duration > 0)
{
mstat->avg += mark->duration;
mstat->avg_count++;
}
mstat->count++; mstat->count++;
} }
@ -395,8 +400,8 @@ sysprof_capture_view_scan_worker (GTask *task,
{ {
SysprofMarkStat *mstat = v; SysprofMarkStat *mstat = v;
if (mstat->count > 0 && mstat->avg > 0) if (mstat->avg_count > 0 && mstat->avg > 0)
mstat->avg /= mstat->count; mstat->avg /= mstat->avg_count;
#if 0 #if 0
g_print ("%s: count=%ld avg=%ld min=%ld max=%ld\n", g_print ("%s: count=%ld avg=%ld min=%ld max=%ld\n",

View File

@ -32,6 +32,7 @@ typedef struct
gint64 max; gint64 max;
gint64 min; gint64 min;
gint64 avg; gint64 avg;
guint64 avg_count;
} SysprofMarkStat; } SysprofMarkStat;
SysprofMarkStat *_sysprof_mark_stat_new (const gchar *name); SysprofMarkStat *_sysprof_mark_stat_new (const gchar *name);