From 55eddb7ef4b6b561d6692a6f074834d5d5fb94fa Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 11 Aug 2009 23:40:04 +0100 Subject: [PATCH] [script] A little utility to convert a trace into a trace Replay the trace using the interpreter onto a script surface - useful for checking idempotency. --- util/cairo-script/Makefile.am | 6 ++++++ util/cairo-script/csi-trace.c | 40 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 util/cairo-script/csi-trace.c diff --git a/util/cairo-script/Makefile.am b/util/cairo-script/Makefile.am index acde8f594..8b783a9ad 100644 --- a/util/cairo-script/Makefile.am +++ b/util/cairo-script/Makefile.am @@ -28,5 +28,11 @@ csi_replay_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.l csi_exec_SOURCES = csi-exec.c csi_exec_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +if CAIRO_HAS_SCRIPT_SURFACE +EXTRA_PROGRAMS += csi-trace +csi_trace_SOURCES = csi-trace.c +csi_trace_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +endif + EXTRA_DIST = \ COPYING diff --git a/util/cairo-script/csi-trace.c b/util/cairo-script/csi-trace.c new file mode 100644 index 000000000..418a3353f --- /dev/null +++ b/util/cairo-script/csi-trace.c @@ -0,0 +1,40 @@ +#include +#include + +#include +#include +#include + +static cairo_surface_t * +_similar_surface_create (void *closure, + cairo_content_t content, + double width, double height) +{ + return cairo_surface_create_similar (closure, content, width, height); +} + +int +main (int argc, char **argv) +{ + cairo_script_interpreter_t *csi; + cairo_script_interpreter_hooks_t hooks = { + .surface_create = _similar_surface_create, + }; + int i; + + csi = cairo_script_interpreter_create (); + + for (i = 1; i < argc; i++) { + char buf[4096]; + + snprintf (buf, sizeof (buf), "%s.trace", basename (argv[i])); + + cairo_surface_destroy (hooks.closure); + hooks.closure = cairo_script_surface_create (buf, -1, -1); + cairo_script_interpreter_install_hooks (csi, &hooks); + cairo_script_interpreter_run (csi, argv[i]); + } + cairo_surface_destroy (hooks.closure); + + return cairo_script_interpreter_destroy (csi); +}