summaryrefslogtreecommitdiff
path: root/overlay/chart.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-08-17 12:32:17 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2013-08-17 12:35:50 +0100
commit06c0cc0bb42d0a3f1c72e0c0d85d15107a392069 (patch)
tree4b1acdfbae2c4a55a7d48b28423ac5d155a97411 /overlay/chart.c
parentf9a50de3dcc501e930de6c60983a4feb57121e7e (diff)
overlay: Show GPU waits
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'overlay/chart.c')
-rw-r--r--overlay/chart.c50
1 files changed, 41 insertions, 9 deletions
diff --git a/overlay/chart.c b/overlay/chart.c
index 89b3f414..f98ba91f 100644
--- a/overlay/chart.c
+++ b/overlay/chart.c
@@ -20,12 +20,25 @@ int chart_init(struct chart *chart, const char *name, int num_samples)
return 0;
}
-void chart_set_rgba(struct chart *chart, float red, float green, float blue, float alpha)
+void chart_set_mode(struct chart *chart, enum chart_mode mode)
{
- chart->rgb[0] = red;
- chart->rgb[1] = green;
- chart->rgb[2] = blue;
- chart->rgb[3] = alpha;
+ chart->mode = mode;
+}
+
+void chart_set_stroke_rgba(struct chart *chart, float red, float green, float blue, float alpha)
+{
+ chart->stroke_rgb[0] = red;
+ chart->stroke_rgb[1] = green;
+ chart->stroke_rgb[2] = blue;
+ chart->stroke_rgb[3] = alpha;
+}
+
+void chart_set_fill_rgba(struct chart *chart, float red, float green, float blue, float alpha)
+{
+ chart->fill_rgb[0] = red;
+ chart->fill_rgb[1] = green;
+ chart->fill_rgb[2] = blue;
+ chart->fill_rgb[3] = alpha;
}
void chart_set_position(struct chart *chart, int x, int y)
@@ -119,17 +132,36 @@ void chart_draw(struct chart *chart, cairo_t *cr)
cairo_translate(cr, x, -chart->range[0]);
cairo_new_path(cr);
+ if (chart->mode != CHART_STROKE)
+ cairo_move_to(cr, 0, 0);
for (n = 0; n < max; n++) {
cairo_curve_to(cr,
n-2/3., value_at(chart, i + n -1) + gradient_at(chart, i + n - 1)/3.,
n-1/3., value_at(chart, i + n) - gradient_at(chart, i + n)/3.,
n, value_at(chart, i + n));
}
+ if (chart->mode != CHART_STROKE)
+ cairo_line_to(cr, max, 0);
cairo_identity_matrix(cr);
- cairo_set_line_width(cr, 1);
- cairo_set_source_rgba(cr, chart->rgb[0], chart->rgb[1], chart->rgb[2], chart->rgb[3]);
- cairo_stroke(cr);
-
+ cairo_set_line_width(cr, 2);
+ switch (chart->mode) {
+ case CHART_STROKE:
+ cairo_set_source_rgba(cr, chart->stroke_rgb[0], chart->stroke_rgb[1], chart->stroke_rgb[2], chart->stroke_rgb[3]);
+ cairo_stroke(cr);
+ break;
+ case CHART_FILL:
+ cairo_set_source_rgba(cr, chart->fill_rgb[0], chart->fill_rgb[1], chart->fill_rgb[2], chart->fill_rgb[3]);
+ cairo_fill(cr);
+ break;
+ case CHART_FILL_STROKE:
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
+ cairo_set_source_rgba(cr, chart->fill_rgb[0], chart->fill_rgb[1], chart->fill_rgb[2], chart->fill_rgb[3]);
+ cairo_fill_preserve(cr);
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_DEFAULT);
+ cairo_set_source_rgba(cr, chart->stroke_rgb[0], chart->stroke_rgb[1], chart->stroke_rgb[2], chart->stroke_rgb[3]);
+ cairo_stroke(cr);
+ break;
+ }
cairo_restore(cr);
}