diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2013-08-17 12:32:17 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2013-08-17 12:35:50 +0100 |
commit | 06c0cc0bb42d0a3f1c72e0c0d85d15107a392069 (patch) | |
tree | 4b1acdfbae2c4a55a7d48b28423ac5d155a97411 /overlay/chart.c | |
parent | f9a50de3dcc501e930de6c60983a4feb57121e7e (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.c | 50 |
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); } |