Color_Ptr_Const name_to_color(const std::string& key) { return name_to_color(key.c_str()); }
static test_case_t * test_cases_from_reports (cairo_perf_report_t *reports, int num_reports) { test_case_t *cases, *c; test_report_t **tests; int i, j; int num_tests; num_tests = 0; for (i = 0; i < num_reports; i++) { for (j = 0; reports[i].tests[j].name != NULL; j++) ; if (j > num_tests) num_tests = j; } cases = xcalloc (num_tests+1, sizeof (test_case_t)); tests = xmalloc (num_reports * sizeof (test_report_t *)); for (i = 0; i < num_reports; i++) tests[i] = reports[i].tests; c = cases; while (1) { int seen_non_null; test_report_t *min_test; /* We expect iterations values of 0 when multiple raw reports * for the same test have been condensed into the stats of the * first. So we just skip these later reports that have no * stats. */ seen_non_null = 0; for (i = 0; i < num_reports; i++) { while (tests[i]->name && tests[i]->stats.iterations == 0) tests[i]++; if (tests[i]->name) seen_non_null++; } if (seen_non_null < 2) break; /* Find the minimum of all current tests, (we have to do this * in case some reports don't have a particular test). */ for (i = 0; i < num_reports; i++) { if (tests[i]->name) { min_test = tests[i]; break; } } for (++i; i < num_reports; i++) { if (tests[i]->name && test_report_cmp_backend_then_name (tests[i], min_test) < 0) { min_test = tests[i]; } } c->min_test = min_test; c->backend = min_test->backend; c->content = min_test->content; c->name = min_test->name; c->size = min_test->size; c->baseline = min_test->stats.min_ticks; c->min = c->max = 1.; c->shown = TRUE; name_to_color (c->name, &c->color); for (i = 0; i < num_reports; i++) { if (tests[i]->name && test_report_cmp_backend_then_name (tests[i], min_test) == 0) { tests[i]++; break; } } for (++i; i < num_reports; i++) { if (tests[i]->name && test_report_cmp_backend_then_name (tests[i], min_test) == 0) { double v = tests[i]->stats.min_ticks / c->baseline; if (v < c->min) c->min = v; if (v > c->max) c->max = v; tests[i]++; } } c++; } free (tests); return cases; }