summaryrefslogtreecommitdiff
path: root/perf/cairo-perf-print.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2009-07-23 08:45:58 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2009-07-23 15:32:12 +0100
commit6c28c7a1e268fad0ad34cac0d8a9a3951d8f3c7a (patch)
treeb13e5c2a0ab083bde57f203359a3f932b38ad370 /perf/cairo-perf-print.c
parent92ba74d760f20cd257b3916a51c8efef1c0e021e (diff)
downloadcairo-6c28c7a1e268fad0ad34cac0d8a9a3951d8f3c7a.tar.gz
[perf] Add a simple report printer.
After a run, it can be useful to reprint the results, so add cairo-perf-print to perform that task. For the future, I'd like to move the performance suite over to the git/perf style of single, multi-function binary. The sequence of operations that I typically do are: ./cairo-perf-trace -r -v -i 6 > `git describe`.`hostname`.perf ./cairo-perf-diff-files REVA REVB ./cairo-perf-print REVA ./cairo-perf-compare-backends REVA which misses the caching available with cairo-perf-diff. 'make html' is almost what I want, but still too prescriptive. However, that does need to be addressed for continuous performance monitoring. Along the perf lines, those sequence of operations become: ./cairo-perf record -i 6 ./cairo-perf report ./cairo-perf report REVA REVB ./cairo-perf report --backends="image,xlib,gl" REVA REVB ./cairo-perf report --html REVA REVB Also we want to think about installing the cairo-perf binary. So we want to differentiate when run inside a git checkout.
Diffstat (limited to 'perf/cairo-perf-print.c')
-rw-r--r--perf/cairo-perf-print.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/perf/cairo-perf-print.c b/perf/cairo-perf-print.c
new file mode 100644
index 000000000..05bf5bd01
--- /dev/null
+++ b/perf/cairo-perf-print.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2006 Red Hat, Inc.
+ * Copyright © 2009 Chris Wilson
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of the
+ * copyright holders not be used in advertising or publicity
+ * pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Authors: Carl Worth <cworth@cworth.org>
+ * Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-perf.h"
+
+#include <stdio.h>
+
+static void
+report_print (const cairo_perf_report_t *report)
+{
+ const test_report_t *tests;
+
+ tests = report->tests;
+ for (tests = report->tests; tests->name != NULL; tests++) {
+ if (tests->stats.iterations == 0)
+ continue;
+
+ if (tests->size) {
+ printf ("%5s-%-4s %26s-%-3d %6.2f %4.2f%%\n",
+ tests->backend, tests->content,
+ tests->name, tests->size,
+ tests->stats.median_ticks / tests->stats.ticks_per_ms,
+ tests->stats.std_dev * 100);
+ } else {
+ printf ("%5s %26s %6.2f %4.2f%%\n",
+ tests->backend, tests->name,
+ tests->stats.median_ticks / tests->stats.ticks_per_ms,
+ tests->stats.std_dev * 100);
+ }
+ }
+}
+
+int
+main (int argc, const char *argv[])
+{
+ int i;
+
+ for (i = 1; i < argc; i++ ) {
+ cairo_perf_report_t report;
+
+ cairo_perf_report_load (&report, argv[i], NULL);
+ report_print (&report);
+ }
+
+ return 0;
+}