int main (int argc, const char *argv[]) { cairo_perf_diff_files_args_t args = { NULL, /* filenames */ 0, /* num_filenames */ { 0.05, /* min change */ 1, /* use UTF-8? */ 1, /* display change bars? */ } }; cairo_perf_report_t *reports; test_report_t *t; int i; parse_args (argc, argv, &args); if (args.num_filenames) { reports = xcalloc (args.num_filenames, sizeof (cairo_perf_report_t)); for (i = 0; i < args.num_filenames; i++) { cairo_perf_report_load (&reports[i], args.filenames[i], test_report_cmp_name); printf ("loaded: %s, %d tests\n", args.filenames[i], reports[i].tests_count); } } else { args.num_filenames = 1; reports = xcalloc (args.num_filenames, sizeof (cairo_perf_report_t)); cairo_perf_report_load (&reports[0], NULL, test_report_cmp_name); } cairo_perf_reports_compare (reports, args.num_filenames, &args.options); /* Pointless memory cleanup, (would be a great place for talloc) */ free (args.filenames); for (i = 0; i < args.num_filenames; i++) { for (t = reports[i].tests; t->name; t++) { free (t->samples); free (t->backend); free (t->name); } free (reports[i].tests); free (reports[i].configuration); } free (reports); return 0; }
int main (int argc, const char *argv[]) { cairo_surface_t *surface; struct chart chart; test_report_t *t; int i; chart.use_html = 0; chart.width = 640; chart.height = 480; chart.reports = xcalloc (argc-1, sizeof (cairo_perf_report_t)); chart.names = xcalloc (argc-1, sizeof (cairo_perf_report_t)); chart.num_reports = 0; for (i = 1; i < argc; i++) { if (strcmp (argv[i], "--html") == 0) { chart.use_html = 1; } else if (strncmp (argv[i], "--width=", 8) == 0) { chart.width = atoi (argv[i] + 8); } else if (strncmp (argv[i], "--height=", 9) == 0) { chart.height = atoi (argv[i] + 9); } else if (strcmp (argv[i], "--name") == 0) { if (i + 1 < argc) chart.names[chart.num_reports] = argv[++i]; } else if (strncmp (argv[i], "--name=", 7) == 0) { chart.names[chart.num_reports] = argv[i] + 7; } else { cairo_perf_report_load (&chart.reports[chart.num_reports++], argv[i], i, test_report_cmp_name); } } for (chart.relative = 0; chart.relative <= 1; chart.relative++) { surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, chart.width, chart.height + (FONT_SIZE + PAD) + 2*PAD); chart.cr = cairo_create (surface); cairo_surface_destroy (surface); cairo_set_source_rgb (chart.cr, 0, 0, 0); cairo_paint (chart.cr); find_ranges (&chart); for (i = 0; i < chart.num_tests; i++) test_background (&chart, i); if (chart.relative) { add_relative_lines (&chart); add_slower_faster_guide (&chart); } else add_absolute_lines (&chart); cairo_save (chart.cr); cairo_rectangle (chart.cr, 0, 0, chart.width, chart.height); cairo_clip (chart.cr); cairo_perf_reports_compare (&chart, !chart.relative); cairo_restore (chart.cr); add_base_line (&chart); add_legend (&chart); cairo_surface_write_to_png (cairo_get_target (chart.cr), chart.relative ? "relative.png" : "absolute.png"); cairo_destroy (chart.cr); } /* Pointless memory cleanup, (would be a great place for talloc) */ for (i = 0; i < chart.num_reports; i++) { for (t = chart.reports[i].tests; t->name; t++) { free (t->samples); free (t->backend); free (t->name); } free (chart.reports[i].tests); free (chart.reports[i].configuration); } free (chart.names); free (chart.reports); return 0; }