36 {
37
38
39 double overhead = 0;
40 for (int i = 0; i < FLAGS_overheadLoops; i++) {
43 }
44 overhead /= FLAGS_overheadLoops;
45
46
47
48 double bench_plus_overhead = 0.0;
50 while (bench_plus_overhead < overhead) {
51 if (
round++ == FLAGS_maxCalibrationAttempts) {
52 TestRunner::Log(
"Warning: Cannot estimate loops for %s (%s vs. %s); skipping.",
54 humanize(bench_plus_overhead).c_str(),
56 return std::make_tuple(0, false);
57 }
58 bench_plus_overhead =
time(1);
59 }
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 const double numer = overhead / FLAGS_overheadGoal - overhead;
78 const double denom = bench_plus_overhead - overhead;
79 int loops = (
int)
ceil(numer / denom);
80
81 return std::make_tuple(loops, true);
82 }
static void round(SkPoint *p)
SkString humanize(double ms)
Type::kYUV Type::kRGBA() int(0.7 *637)
double time(int loops) const
const char * getUniqueName()
void Log(const char *format,...) SK_PRINTF_LIKE(1
SIN Vec< N, float > ceil(const Vec< N, float > &x)