summaryrefslogtreecommitdiff
path: root/perf/README
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2006-08-31 18:11:25 -0700
committerCarl Worth <cworth@cworth.org>2006-08-31 18:11:25 -0700
commit91d55417053d3c0b615787432ff0a618e76f864f (patch)
treec2f0a09ed47c528a72bbefd2e7c08967d898efbc /perf/README
parent2fa0228d63713f6274ca3228f236f1ee362ba11f (diff)
downloadcairo-91d55417053d3c0b615787432ff0a618e76f864f.tar.gz
perf: Add README file explaining how to add a new test
Diffstat (limited to 'perf/README')
-rw-r--r--perf/README92
1 files changed, 92 insertions, 0 deletions
diff --git a/perf/README b/perf/README
new file mode 100644
index 000000000..0cb564e27
--- /dev/null
+++ b/perf/README
@@ -0,0 +1,92 @@
+This is cairo's performance test suite.
+
+To run the performance tests simply type:
+
+ make perf
+
+and the tests results will be printed on stdout
+
+TODO: We'll want to add support for charting the results. Various
+charts would be interesting:
+
+ * For a given test, how does its performance scale as a function of
+ image size
+
+ * For a given test, how do the various backends perform
+
+ * For a given test, how has the performance changed throughout the
+ history of cairo development.
+
+TODO: We'll also want to make it easy to run individual tests for
+profiling, etc.
+
+Creating a new performance test
+-------------------------------
+This is where we could use everybody's help. If you have encountered a
+sequence of cairo operations that are slower than you would like, then
+please provide a performance test. Writing a test is very simple, it
+requires you to write only a single function exercising the cairo
+calls of interest.
+
+Here is the basic structure of a performance test file:
+
+ /* Copyright © 2006 Kind Cairo User
+ *
+ * ... Licensing information here ...
+ * Please copy the MIT blurb as in other tests
+ */
+
+ #include "cairo-perf"
+
+ double
+ my_new_test (cairo_t *cr, int width, int height)
+ {
+ cairo_perf_timer_t timer;
+
+ /* First do any setup for which the execution time should not
+ * be measured. For example, this might include loading
+ * images from disk, creating patterns, etc. */
+
+ timer_start (&timer);
+
+ /* Now make the real cairo calls to be measured */
+
+ timer_stop (&timer);
+
+ /* Finally, any cleanup */
+
+ /* Then return the inverse of the time that elapsed so that
+ * the return value measures a rate, (how many times per
+ * second your code can be excecuted). We use rates rather
+ * than times for a "bigger is better" effect in the
+ * results. */
+
+ return 1.0 / timer_elapsed (&timer);
+ }
+
+That's really all there is to writing a new test. Then, to fully
+integrate this you just need to add your new test to three different
+lists. (TODO: We should set this up better so that the lists are
+maintained automatically---computed from the list of files in
+cairo/perf, for example). Here's what needs to be added:
+
+ 1. Makefile.am: Add the new file name to the cairo_perf_SOURCES list
+
+ 2. cairo-perf.h: Add a new CAIRO_PERF_DECL line with the name of your function
+
+ 3. cairo-perf.c: Add a new row to the list at the end of the file. A
+ typical entry would look like:
+
+ { "my_new_test", my_new_test, 16, 64 }
+
+ The last two numbers are a minimum and a maximum image size at
+ which your test should be exercised. If these values are the same,
+ then only that size will be used. If they are different, then
+ intermediate sizes will be used by doubling. So in the example
+ above, three tests would be performed at sizes of 16x16, 32x32 and
+ 64x64.
+
+Thanks for your contributions and have fun with cairo!
+
+
+