1*dbb99499SAndroid Build Coastguard Worker
2*dbb99499SAndroid Build Coastguard Worker #undef NDEBUG
3*dbb99499SAndroid Build Coastguard Worker
4*dbb99499SAndroid Build Coastguard Worker #include "benchmark/benchmark.h"
5*dbb99499SAndroid Build Coastguard Worker #include "output_test.h"
6*dbb99499SAndroid Build Coastguard Worker
7*dbb99499SAndroid Build Coastguard Worker // @todo: <jpmag> this checks the full output at once; the rule for
8*dbb99499SAndroid Build Coastguard Worker // CounterSet1 was failing because it was not matching "^[-]+$".
9*dbb99499SAndroid Build Coastguard Worker // @todo: <jpmag> check that the counters are vertically aligned.
10*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut,
11*dbb99499SAndroid Build Coastguard Worker {
12*dbb99499SAndroid Build Coastguard Worker // keeping these lines long improves readability, so:
13*dbb99499SAndroid Build Coastguard Worker // clang-format off
14*dbb99499SAndroid Build Coastguard Worker {"^[-]+$", MR_Next},
15*dbb99499SAndroid Build Coastguard Worker {"^Benchmark %s Time %s CPU %s Iterations %s Bar %s Bat %s Baz %s Foo %s Frob %s Lob$", MR_Next},
16*dbb99499SAndroid Build Coastguard Worker {"^[-]+$", MR_Next},
17*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:1 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
18*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:1 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
19*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:1_mean %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
20*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:1_median %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
21*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:1_stddev %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
22*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:1_cv %console_percentage_report [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*%$", MR_Next},
23*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:2 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
24*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:2 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
25*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:2_mean %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
26*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:2_median %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
27*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:2_stddev %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
28*dbb99499SAndroid Build Coastguard Worker {"^BM_Counters_Tabular/repeats:2/threads:2_cv %console_percentage_report [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*%$", MR_Next},
29*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
30*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
31*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
32*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
33*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
34*dbb99499SAndroid Build Coastguard Worker {"^[-]+$", MR_Next},
35*dbb99499SAndroid Build Coastguard Worker {"^Benchmark %s Time %s CPU %s Iterations %s Bar %s Baz %s Foo$", MR_Next},
36*dbb99499SAndroid Build Coastguard Worker {"^[-]+$", MR_Next},
37*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
38*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
39*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
40*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
41*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
42*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
43*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
44*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
45*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
46*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
47*dbb99499SAndroid Build Coastguard Worker {"^[-]+$", MR_Next},
48*dbb99499SAndroid Build Coastguard Worker {"^Benchmark %s Time %s CPU %s Iterations %s Bat %s Baz %s Foo$", MR_Next},
49*dbb99499SAndroid Build Coastguard Worker {"^[-]+$", MR_Next},
50*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
51*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
52*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
53*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
54*dbb99499SAndroid Build Coastguard Worker {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$"},
55*dbb99499SAndroid Build Coastguard Worker // clang-format on
56*dbb99499SAndroid Build Coastguard Worker });
57*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"%csv_header,"
58*dbb99499SAndroid Build Coastguard Worker "\"Bar\",\"Bat\",\"Baz\",\"Foo\",\"Frob\",\"Lob\""}});
59*dbb99499SAndroid Build Coastguard Worker
60*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
61*dbb99499SAndroid Build Coastguard Worker // ------------------------- Tabular Counters Output ----------------------- //
62*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
63*dbb99499SAndroid Build Coastguard Worker
BM_Counters_Tabular(benchmark::State & state)64*dbb99499SAndroid Build Coastguard Worker void BM_Counters_Tabular(benchmark::State& state) {
65*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
66*dbb99499SAndroid Build Coastguard Worker // This test requires a non-zero CPU time to avoid divide-by-zero
67*dbb99499SAndroid Build Coastguard Worker auto iterations = double(state.iterations()) * double(state.iterations());
68*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(iterations);
69*dbb99499SAndroid Build Coastguard Worker }
70*dbb99499SAndroid Build Coastguard Worker namespace bm = benchmark;
71*dbb99499SAndroid Build Coastguard Worker state.counters.insert({
72*dbb99499SAndroid Build Coastguard Worker {"Foo", {1, bm::Counter::kAvgThreads}},
73*dbb99499SAndroid Build Coastguard Worker {"Bar", {2, bm::Counter::kAvgThreads}},
74*dbb99499SAndroid Build Coastguard Worker {"Baz", {4, bm::Counter::kAvgThreads}},
75*dbb99499SAndroid Build Coastguard Worker {"Bat", {8, bm::Counter::kAvgThreads}},
76*dbb99499SAndroid Build Coastguard Worker {"Frob", {16, bm::Counter::kAvgThreads}},
77*dbb99499SAndroid Build Coastguard Worker {"Lob", {32, bm::Counter::kAvgThreads}},
78*dbb99499SAndroid Build Coastguard Worker });
79*dbb99499SAndroid Build Coastguard Worker }
80*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Counters_Tabular)->ThreadRange(1, 2)->Repetitions(2);
81*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
82*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$"},
83*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
84*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
85*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
86*dbb99499SAndroid Build Coastguard Worker MR_Next},
87*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
88*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
89*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 0,$", MR_Next},
90*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
91*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
92*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
93*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
94*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
95*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
96*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
97*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
98*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
99*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
100*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
101*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
102*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
103*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$"},
104*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
105*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
106*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
107*dbb99499SAndroid Build Coastguard Worker MR_Next},
108*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
109*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
110*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 1,$", MR_Next},
111*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
112*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
113*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
114*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
115*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
116*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
117*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
118*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
119*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
120*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
121*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
122*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
123*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
124*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_mean\",$"},
125*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
126*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
127*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
128*dbb99499SAndroid Build Coastguard Worker MR_Next},
129*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
130*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
131*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
132*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"mean\",$", MR_Next},
133*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"time\",$", MR_Next},
134*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
135*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
136*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
137*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
138*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
139*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
140*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
141*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
142*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
143*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
144*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
145*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
146*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_median\",$"},
147*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
148*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
149*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
150*dbb99499SAndroid Build Coastguard Worker MR_Next},
151*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
152*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
153*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
154*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"median\",$", MR_Next},
155*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"time\",$", MR_Next},
156*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
157*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
158*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
159*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
160*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
161*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
162*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
163*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
164*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
165*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
166*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
167*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
168*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_stddev\",$"},
169*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
170*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
171*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
172*dbb99499SAndroid Build Coastguard Worker MR_Next},
173*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
174*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
175*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
176*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"stddev\",$", MR_Next},
177*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"time\",$", MR_Next},
178*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
179*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
180*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
181*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
182*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
183*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
184*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
185*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
186*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
187*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
188*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
189*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
190*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_cv\",$"},
191*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
192*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
193*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
194*dbb99499SAndroid Build Coastguard Worker MR_Next},
195*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
196*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
197*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
198*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"cv\",$", MR_Next},
199*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"percentage\",$", MR_Next},
200*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
201*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
202*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
203*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
204*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
205*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
206*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
207*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
208*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
209*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
210*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
211*dbb99499SAndroid Build Coastguard Worker
212*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
213*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$"},
214*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
215*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 1,$", MR_Next},
216*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
217*dbb99499SAndroid Build Coastguard Worker MR_Next},
218*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
219*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
220*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 0,$", MR_Next},
221*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 2,$", MR_Next},
222*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
223*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
224*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
225*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
226*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
227*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
228*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
229*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
230*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
231*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
232*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
233*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
234*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$"},
235*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
236*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 1,$", MR_Next},
237*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
238*dbb99499SAndroid Build Coastguard Worker MR_Next},
239*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
240*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
241*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 1,$", MR_Next},
242*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 2,$", MR_Next},
243*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
244*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
245*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
246*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
247*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
248*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
249*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
250*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
251*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
252*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
253*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
254*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
255*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2_median\",$"},
256*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
257*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 1,$", MR_Next},
258*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
259*dbb99499SAndroid Build Coastguard Worker MR_Next},
260*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
261*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
262*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 2,$", MR_Next},
263*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"median\",$", MR_Next},
264*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"time\",$", MR_Next},
265*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
266*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
267*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
268*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
269*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
270*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
271*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
272*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
273*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
274*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
275*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
276*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
277*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2_stddev\",$"},
278*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
279*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 1,$", MR_Next},
280*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
281*dbb99499SAndroid Build Coastguard Worker MR_Next},
282*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
283*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
284*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 2,$", MR_Next},
285*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"stddev\",$", MR_Next},
286*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"time\",$", MR_Next},
287*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
288*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
289*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
290*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
291*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
292*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
293*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
294*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
295*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
296*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
297*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
298*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
299*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2_cv\",$"},
300*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 0,$", MR_Next},
301*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 1,$", MR_Next},
302*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
303*dbb99499SAndroid Build Coastguard Worker MR_Next},
304*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
305*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 2,$", MR_Next},
306*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 2,$", MR_Next},
307*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"cv\",$", MR_Next},
308*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"percentage\",$", MR_Next},
309*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
310*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
311*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
312*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
313*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
314*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
315*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
316*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
317*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
318*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
319*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
320*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
321*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:1\",%csv_report,"
322*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
323*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
324*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:1\",%csv_report,"
325*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
326*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
327*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:1_mean\",%csv_report,"
328*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
329*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
330*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:1_median\",%csv_report,"
331*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
332*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
333*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:1_stddev\",%csv_report,"
334*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
335*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
336*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:1_cv\",%csv_cv_report,"
337*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
338*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
339*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:2\",%csv_report,"
340*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
341*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
342*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:2\",%csv_report,"
343*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
344*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
345*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:2_mean\",%csv_report,"
346*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
347*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
348*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:2_median\",%csv_report,"
349*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
350*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
351*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:2_stddev\",%csv_report,"
352*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
353*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
354*dbb99499SAndroid Build Coastguard Worker {{"^\"BM_Counters_Tabular/repeats:2/threads:2_cv\",%csv_cv_report,"
355*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
356*dbb99499SAndroid Build Coastguard Worker // VS2013 does not allow this function to be passed as a lambda argument
357*dbb99499SAndroid Build Coastguard Worker // to CHECK_BENCHMARK_RESULTS()
CheckTabular(Results const & e)358*dbb99499SAndroid Build Coastguard Worker void CheckTabular(Results const& e) {
359*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 1);
360*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Bar", EQ, 2);
361*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 4);
362*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Bat", EQ, 8);
363*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Frob", EQ, 16);
364*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Lob", EQ, 32);
365*dbb99499SAndroid Build Coastguard Worker }
366*dbb99499SAndroid Build Coastguard Worker CHECK_BENCHMARK_RESULTS("BM_Counters_Tabular/repeats:2/threads:1$",
367*dbb99499SAndroid Build Coastguard Worker &CheckTabular);
368*dbb99499SAndroid Build Coastguard Worker CHECK_BENCHMARK_RESULTS("BM_Counters_Tabular/repeats:2/threads:2$",
369*dbb99499SAndroid Build Coastguard Worker &CheckTabular);
370*dbb99499SAndroid Build Coastguard Worker
371*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
372*dbb99499SAndroid Build Coastguard Worker // -------------------- Tabular+Rate Counters Output ----------------------- //
373*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
374*dbb99499SAndroid Build Coastguard Worker
BM_CounterRates_Tabular(benchmark::State & state)375*dbb99499SAndroid Build Coastguard Worker void BM_CounterRates_Tabular(benchmark::State& state) {
376*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
377*dbb99499SAndroid Build Coastguard Worker // This test requires a non-zero CPU time to avoid divide-by-zero
378*dbb99499SAndroid Build Coastguard Worker auto iterations = double(state.iterations()) * double(state.iterations());
379*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(iterations);
380*dbb99499SAndroid Build Coastguard Worker }
381*dbb99499SAndroid Build Coastguard Worker namespace bm = benchmark;
382*dbb99499SAndroid Build Coastguard Worker state.counters.insert({
383*dbb99499SAndroid Build Coastguard Worker {"Foo", {1, bm::Counter::kAvgThreadsRate}},
384*dbb99499SAndroid Build Coastguard Worker {"Bar", {2, bm::Counter::kAvgThreadsRate}},
385*dbb99499SAndroid Build Coastguard Worker {"Baz", {4, bm::Counter::kAvgThreadsRate}},
386*dbb99499SAndroid Build Coastguard Worker {"Bat", {8, bm::Counter::kAvgThreadsRate}},
387*dbb99499SAndroid Build Coastguard Worker {"Frob", {16, bm::Counter::kAvgThreadsRate}},
388*dbb99499SAndroid Build Coastguard Worker {"Lob", {32, bm::Counter::kAvgThreadsRate}},
389*dbb99499SAndroid Build Coastguard Worker });
390*dbb99499SAndroid Build Coastguard Worker }
391*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_CounterRates_Tabular)->ThreadRange(1, 16);
392*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
393*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_CounterRates_Tabular/threads:%int\",$"},
394*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 1,$", MR_Next},
395*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
396*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_CounterRates_Tabular/threads:%int\",$",
397*dbb99499SAndroid Build Coastguard Worker MR_Next},
398*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
399*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 1,$", MR_Next},
400*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 0,$", MR_Next},
401*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
402*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
403*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
404*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
405*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
406*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
407*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
408*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
409*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float,$", MR_Next},
410*dbb99499SAndroid Build Coastguard Worker {"\"Frob\": %float,$", MR_Next},
411*dbb99499SAndroid Build Coastguard Worker {"\"Lob\": %float$", MR_Next},
412*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
413*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_CounterRates_Tabular/threads:%int\",%csv_report,"
414*dbb99499SAndroid Build Coastguard Worker "%float,%float,%float,%float,%float,%float$"}});
415*dbb99499SAndroid Build Coastguard Worker // VS2013 does not allow this function to be passed as a lambda argument
416*dbb99499SAndroid Build Coastguard Worker // to CHECK_BENCHMARK_RESULTS()
CheckTabularRate(Results const & e)417*dbb99499SAndroid Build Coastguard Worker void CheckTabularRate(Results const& e) {
418*dbb99499SAndroid Build Coastguard Worker double t = e.DurationCPUTime();
419*dbb99499SAndroid Build Coastguard Worker CHECK_FLOAT_COUNTER_VALUE(e, "Foo", EQ, 1. / t, 0.001);
420*dbb99499SAndroid Build Coastguard Worker CHECK_FLOAT_COUNTER_VALUE(e, "Bar", EQ, 2. / t, 0.001);
421*dbb99499SAndroid Build Coastguard Worker CHECK_FLOAT_COUNTER_VALUE(e, "Baz", EQ, 4. / t, 0.001);
422*dbb99499SAndroid Build Coastguard Worker CHECK_FLOAT_COUNTER_VALUE(e, "Bat", EQ, 8. / t, 0.001);
423*dbb99499SAndroid Build Coastguard Worker CHECK_FLOAT_COUNTER_VALUE(e, "Frob", EQ, 16. / t, 0.001);
424*dbb99499SAndroid Build Coastguard Worker CHECK_FLOAT_COUNTER_VALUE(e, "Lob", EQ, 32. / t, 0.001);
425*dbb99499SAndroid Build Coastguard Worker }
426*dbb99499SAndroid Build Coastguard Worker CHECK_BENCHMARK_RESULTS("BM_CounterRates_Tabular/threads:%int",
427*dbb99499SAndroid Build Coastguard Worker &CheckTabularRate);
428*dbb99499SAndroid Build Coastguard Worker
429*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
430*dbb99499SAndroid Build Coastguard Worker // ------------------------- Tabular Counters Output ----------------------- //
431*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
432*dbb99499SAndroid Build Coastguard Worker
433*dbb99499SAndroid Build Coastguard Worker // set only some of the counters
BM_CounterSet0_Tabular(benchmark::State & state)434*dbb99499SAndroid Build Coastguard Worker void BM_CounterSet0_Tabular(benchmark::State& state) {
435*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
436*dbb99499SAndroid Build Coastguard Worker }
437*dbb99499SAndroid Build Coastguard Worker namespace bm = benchmark;
438*dbb99499SAndroid Build Coastguard Worker state.counters.insert({
439*dbb99499SAndroid Build Coastguard Worker {"Foo", {10, bm::Counter::kAvgThreads}},
440*dbb99499SAndroid Build Coastguard Worker {"Bar", {20, bm::Counter::kAvgThreads}},
441*dbb99499SAndroid Build Coastguard Worker {"Baz", {40, bm::Counter::kAvgThreads}},
442*dbb99499SAndroid Build Coastguard Worker });
443*dbb99499SAndroid Build Coastguard Worker }
444*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_CounterSet0_Tabular)->ThreadRange(1, 16);
445*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
446*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_CounterSet0_Tabular/threads:%int\",$"},
447*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 2,$", MR_Next},
448*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
449*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_CounterSet0_Tabular/threads:%int\",$", MR_Next},
450*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
451*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 1,$", MR_Next},
452*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 0,$", MR_Next},
453*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
454*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
455*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
456*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
457*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
458*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
459*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
460*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float$", MR_Next},
461*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
462*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_CounterSet0_Tabular/threads:%int\",%csv_report,"
463*dbb99499SAndroid Build Coastguard Worker "%float,,%float,%float,,"}});
464*dbb99499SAndroid Build Coastguard Worker // VS2013 does not allow this function to be passed as a lambda argument
465*dbb99499SAndroid Build Coastguard Worker // to CHECK_BENCHMARK_RESULTS()
CheckSet0(Results const & e)466*dbb99499SAndroid Build Coastguard Worker void CheckSet0(Results const& e) {
467*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 10);
468*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Bar", EQ, 20);
469*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 40);
470*dbb99499SAndroid Build Coastguard Worker }
471*dbb99499SAndroid Build Coastguard Worker CHECK_BENCHMARK_RESULTS("BM_CounterSet0_Tabular", &CheckSet0);
472*dbb99499SAndroid Build Coastguard Worker
473*dbb99499SAndroid Build Coastguard Worker // again.
BM_CounterSet1_Tabular(benchmark::State & state)474*dbb99499SAndroid Build Coastguard Worker void BM_CounterSet1_Tabular(benchmark::State& state) {
475*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
476*dbb99499SAndroid Build Coastguard Worker }
477*dbb99499SAndroid Build Coastguard Worker namespace bm = benchmark;
478*dbb99499SAndroid Build Coastguard Worker state.counters.insert({
479*dbb99499SAndroid Build Coastguard Worker {"Foo", {15, bm::Counter::kAvgThreads}},
480*dbb99499SAndroid Build Coastguard Worker {"Bar", {25, bm::Counter::kAvgThreads}},
481*dbb99499SAndroid Build Coastguard Worker {"Baz", {45, bm::Counter::kAvgThreads}},
482*dbb99499SAndroid Build Coastguard Worker });
483*dbb99499SAndroid Build Coastguard Worker }
484*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_CounterSet1_Tabular)->ThreadRange(1, 16);
485*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
486*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_CounterSet1_Tabular/threads:%int\",$"},
487*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 3,$", MR_Next},
488*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
489*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_CounterSet1_Tabular/threads:%int\",$", MR_Next},
490*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
491*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 1,$", MR_Next},
492*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 0,$", MR_Next},
493*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
494*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
495*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
496*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
497*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
498*dbb99499SAndroid Build Coastguard Worker {"\"Bar\": %float,$", MR_Next},
499*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
500*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float$", MR_Next},
501*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
502*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_CounterSet1_Tabular/threads:%int\",%csv_report,"
503*dbb99499SAndroid Build Coastguard Worker "%float,,%float,%float,,"}});
504*dbb99499SAndroid Build Coastguard Worker // VS2013 does not allow this function to be passed as a lambda argument
505*dbb99499SAndroid Build Coastguard Worker // to CHECK_BENCHMARK_RESULTS()
CheckSet1(Results const & e)506*dbb99499SAndroid Build Coastguard Worker void CheckSet1(Results const& e) {
507*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 15);
508*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Bar", EQ, 25);
509*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 45);
510*dbb99499SAndroid Build Coastguard Worker }
511*dbb99499SAndroid Build Coastguard Worker CHECK_BENCHMARK_RESULTS("BM_CounterSet1_Tabular/threads:%int", &CheckSet1);
512*dbb99499SAndroid Build Coastguard Worker
513*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
514*dbb99499SAndroid Build Coastguard Worker // ------------------------- Tabular Counters Output ----------------------- //
515*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
516*dbb99499SAndroid Build Coastguard Worker
517*dbb99499SAndroid Build Coastguard Worker // set only some of the counters, different set now.
BM_CounterSet2_Tabular(benchmark::State & state)518*dbb99499SAndroid Build Coastguard Worker void BM_CounterSet2_Tabular(benchmark::State& state) {
519*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
520*dbb99499SAndroid Build Coastguard Worker }
521*dbb99499SAndroid Build Coastguard Worker namespace bm = benchmark;
522*dbb99499SAndroid Build Coastguard Worker state.counters.insert({
523*dbb99499SAndroid Build Coastguard Worker {"Foo", {10, bm::Counter::kAvgThreads}},
524*dbb99499SAndroid Build Coastguard Worker {"Bat", {30, bm::Counter::kAvgThreads}},
525*dbb99499SAndroid Build Coastguard Worker {"Baz", {40, bm::Counter::kAvgThreads}},
526*dbb99499SAndroid Build Coastguard Worker });
527*dbb99499SAndroid Build Coastguard Worker }
528*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_CounterSet2_Tabular)->ThreadRange(1, 16);
529*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
530*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"BM_CounterSet2_Tabular/threads:%int\",$"},
531*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": 4,$", MR_Next},
532*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
533*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"BM_CounterSet2_Tabular/threads:%int\",$", MR_Next},
534*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"iteration\",$", MR_Next},
535*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": 1,$", MR_Next},
536*dbb99499SAndroid Build Coastguard Worker {"\"repetition_index\": 0,$", MR_Next},
537*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
538*dbb99499SAndroid Build Coastguard Worker {"\"iterations\": %int,$", MR_Next},
539*dbb99499SAndroid Build Coastguard Worker {"\"real_time\": %float,$", MR_Next},
540*dbb99499SAndroid Build Coastguard Worker {"\"cpu_time\": %float,$", MR_Next},
541*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\",$", MR_Next},
542*dbb99499SAndroid Build Coastguard Worker {"\"Bat\": %float,$", MR_Next},
543*dbb99499SAndroid Build Coastguard Worker {"\"Baz\": %float,$", MR_Next},
544*dbb99499SAndroid Build Coastguard Worker {"\"Foo\": %float$", MR_Next},
545*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
546*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_CounterSet2_Tabular/threads:%int\",%csv_report,"
547*dbb99499SAndroid Build Coastguard Worker ",%float,%float,%float,,"}});
548*dbb99499SAndroid Build Coastguard Worker // VS2013 does not allow this function to be passed as a lambda argument
549*dbb99499SAndroid Build Coastguard Worker // to CHECK_BENCHMARK_RESULTS()
CheckSet2(Results const & e)550*dbb99499SAndroid Build Coastguard Worker void CheckSet2(Results const& e) {
551*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 10);
552*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Bat", EQ, 30);
553*dbb99499SAndroid Build Coastguard Worker CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 40);
554*dbb99499SAndroid Build Coastguard Worker }
555*dbb99499SAndroid Build Coastguard Worker CHECK_BENCHMARK_RESULTS("BM_CounterSet2_Tabular", &CheckSet2);
556*dbb99499SAndroid Build Coastguard Worker
557*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
558*dbb99499SAndroid Build Coastguard Worker // --------------------------- TEST CASES END ------------------------------ //
559*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
560*dbb99499SAndroid Build Coastguard Worker
main(int argc,char * argv[])561*dbb99499SAndroid Build Coastguard Worker int main(int argc, char* argv[]) { RunOutputTests(argc, argv); }
562