From def0ac29a7eb92282cf7f208b229261bb254ca00 Mon Sep 17 00:00:00 2001 From: "Stephen M. Cameron" Date: Mon, 12 Mar 2012 07:32:57 +0100 Subject: [PATCH] gfio: add extra space to the graphs at the edges This is to make it easier to read and also keeps the lines from going beyond the edges of the graph. Signed-off-by: Stephen M. Cameron Signed-off-by: Jens Axboe --- gfio.c | 3 +++ graph.c | 45 +++++++++++++++++++++++++++++++++++++++------ graph.h | 6 ++++++ 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/gfio.c b/gfio.c index 16cb4da8..4bf8fbe9 100644 --- a/gfio.c +++ b/gfio.c @@ -200,6 +200,7 @@ static struct graph *setup_iops_graph(void) graph_set_color(g, "Write IOPS", 1.0, 0.0, 0.0); line_graph_set_data_count_limit(g, gfio_graph_limit); graph_y_axis_unit_change_notify(g, iops_graph_y_axis_unit_change); + graph_add_extra_space(g, 0.005, 0.005, 0.03, 0.03); return g; } @@ -232,6 +233,8 @@ static struct graph *setup_bandwidth_graph(void) graph_set_color(g, "Write Bandwidth", 1.0, 0.0, 0.0); line_graph_set_data_count_limit(g, 100); graph_y_axis_unit_change_notify(g, bandwidth_graph_y_axis_unit_change); + graph_add_extra_space(g, 0.005, 0.005, 0.03, 0.03); + return g; } diff --git a/graph.c b/graph.c index 9eae7272..6cf511d1 100644 --- a/graph.c +++ b/graph.c @@ -62,6 +62,10 @@ struct graph { const char *font; graph_axis_unit_change_callback x_axis_unit_change_callback; graph_axis_unit_change_callback y_axis_unit_change_callback; + double left_extra; + double right_extra; + double top_extra; + double bottom_extra; }; void graph_set_size(struct graph *g, unsigned int xdim, unsigned int ydim) @@ -474,8 +478,8 @@ static double find_xy_value(struct graph *g, xy_value_extractor getvalue, double void line_graph_draw(struct graph *g, cairo_t *cr) { double x1, y1, x2, y2; - double minx, miny, maxx, maxy; - double tx, ty; + double minx, miny, maxx, maxy, gminx, gminy, gmaxx, gmaxy; + double tx, ty, top_extra, bottom_extra, left_extra, right_extra; struct graph_label *i; struct graph_value *j; int good_data = 1, first = 1; @@ -497,8 +501,27 @@ void line_graph_draw(struct graph *g, cairo_t *cr) maxy = 100.0; } - graph_draw_x_ticks(g, cr, x1, y1, x2, y2, minx, maxx, 10); - graph_draw_y_ticks(g, cr, x1, y1, x2, y2, miny, maxy, 10); + top_extra = 0.0; + bottom_extra = 0.0; + left_extra = 0.0; + right_extra = 0.0; + + if (g->top_extra > 0.001) + top_extra = fabs(maxy - miny) * g->top_extra; + if (g->bottom_extra > 0.001) + bottom_extra = fabs(maxy - miny) * g->bottom_extra; + if (g->left_extra > 0.001) + left_extra = fabs(maxx - minx) * g->left_extra; + if (g->right_extra > 0.001) + right_extra = fabs(maxx - minx) * g->right_extra; + + gminx = minx - left_extra; + gmaxx = maxx + right_extra; + gminy = miny - bottom_extra; + gmaxy = maxy + top_extra; + + graph_draw_x_ticks(g, cr, x1, y1, x2, y2, gminx, gmaxx, 10); + graph_draw_y_ticks(g, cr, x1, y1, x2, y2, gminy, gmaxy, 10); if (!good_data) goto skip_data; @@ -510,8 +533,8 @@ void line_graph_draw(struct graph *g, cairo_t *cr) continue; cairo_set_source_rgb(cr, i->r, i->g, i->b); for (j = i->values; j; j = j->next) { - tx = ((getx(j) - minx) / (maxx - minx)) * (x2 - x1) + x1; - ty = y2 - ((gety(j) - miny) / (maxy - miny)) * (y2 - y1); + tx = ((getx(j) - gminx) / (gmaxx - gminx)) * (x2 - x1) + x1; + ty = y2 - ((gety(j) - gminy) / (gmaxy - gminy)) * (y2 - y1); if (first) { cairo_move_to(cr, tx, ty); first = 0; @@ -724,3 +747,13 @@ void line_graph_set_data_count_limit(struct graph *g, int per_label_limit) g->per_label_limit = per_label_limit; } +void graph_add_extra_space(struct graph *g, double left_percent, double right_percent, + double top_percent, double bottom_percent) +{ + g->left_extra = left_percent; + g->right_extra = right_percent; + g->top_extra = top_percent; + g->bottom_extra = bottom_percent; +} + + diff --git a/graph.h b/graph.h index 0f286498..a8390b52 100644 --- a/graph.h +++ b/graph.h @@ -75,5 +75,11 @@ void graph_y_axis_unit_change_notify(struct graph *g, graph_axis_unit_change_cal * millions, thousands and ones. */ +void graph_add_extra_space(struct graph *g, double left_percent, double right_percent, + double top_percent, double bottom_percent); +/* graph_add_extra_space() adds extra space to edges of the the graph + * so that the data doesn't go to the very edges. + */ + #endif -- 2.25.1