]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Use an indirect pointer to min/max entry rather than value
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 8 Sep 2011 22:59:04 +0000 (15:59 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 8 Sep 2011 22:59:04 +0000 (15:59 -0700)
This way we can always find the actual min/max entry that generated the
local minima/maxima.  Which is useful for visualization.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
profile.c

index 12e648be92abef21933c2ee6efd9e0e595c60ce7..6f4839d24b48bde55d995ec406bd0532e74af912 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -32,8 +32,8 @@ struct plot_info {
                int sec;
                int val;
                int smoothed;
-               int min[3];
-               int max[3];
+               struct plot_data *min[3];
+               struct plot_data *max[3];
                int avg[3];
        } entry[];
 };
@@ -255,13 +255,13 @@ static void plot_minmax_profile_minute(struct graphics_context *gc, struct plot_
        struct plot_data *entry = pi->entry;
 
        cairo_set_source_rgba(gc->cr, 1, 0.2, 1, a);
-       move_to(gc, entry->sec, entry->min[index]);
+       move_to(gc, entry->sec, entry->min[index]->val);
        for (i = 1; i < pi->nr; i++) {
                entry++;
-               line_to(gc, entry->sec, entry->min[index]);
+               line_to(gc, entry->sec, entry->min[index]->val);
        }
        for (i = 1; i < pi->nr; i++) {
-               line_to(gc, entry->sec, entry->max[index]);
+               line_to(gc, entry->sec, entry->max[index]->val);
                entry--;
        }
        cairo_close_path(gc->cr);
@@ -504,8 +504,9 @@ static void analyze_plot_info_minmax_minute(struct plot_data *entry, struct plot
 {
        struct plot_data *p = entry;
        int time = entry->sec;
-       int seconds = 60*(index+1);
-       int min, max, avg, nr;
+       int seconds = 90*(index+1);
+       struct plot_data *min, *max;
+       int avg, nr;
 
        /* Go back 'seconds' in time */
        while (p > first) {
@@ -515,7 +516,8 @@ static void analyze_plot_info_minmax_minute(struct plot_data *entry, struct plot
        }
 
        /* Then go forward until we hit an entry past the time */
-       min = max = avg = p->val;
+       min = max = p;
+       avg = p->val;
        nr = 1;
        while (++p < last) {
                int val = p->val;
@@ -523,10 +525,10 @@ static void analyze_plot_info_minmax_minute(struct plot_data *entry, struct plot
                        break;
                avg += val;
                nr ++;
-               if (val < min)
-                       min = val;
-               if (val > max)
-                       max = val;
+               if (val < min->val)
+                       min = p;
+               if (val > max->val)
+                       max = p;
        }
        entry->min[index] = min;
        entry->max[index] = max;