xref: /aosp_15_r20/external/google-benchmark/src/benchmark_name.cc (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
1*dbb99499SAndroid Build Coastguard Worker // Copyright 2015 Google Inc. All rights reserved.
2*dbb99499SAndroid Build Coastguard Worker //
3*dbb99499SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*dbb99499SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*dbb99499SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*dbb99499SAndroid Build Coastguard Worker //
7*dbb99499SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
8*dbb99499SAndroid Build Coastguard Worker //
9*dbb99499SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*dbb99499SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*dbb99499SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*dbb99499SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*dbb99499SAndroid Build Coastguard Worker // limitations under the License.
14*dbb99499SAndroid Build Coastguard Worker 
15*dbb99499SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
16*dbb99499SAndroid Build Coastguard Worker 
17*dbb99499SAndroid Build Coastguard Worker namespace benchmark {
18*dbb99499SAndroid Build Coastguard Worker 
19*dbb99499SAndroid Build Coastguard Worker namespace {
20*dbb99499SAndroid Build Coastguard Worker 
21*dbb99499SAndroid Build Coastguard Worker // Compute the total size of a pack of std::strings
size_impl()22*dbb99499SAndroid Build Coastguard Worker size_t size_impl() { return 0; }
23*dbb99499SAndroid Build Coastguard Worker 
24*dbb99499SAndroid Build Coastguard Worker template <typename Head, typename... Tail>
size_impl(const Head & head,const Tail &...tail)25*dbb99499SAndroid Build Coastguard Worker size_t size_impl(const Head& head, const Tail&... tail) {
26*dbb99499SAndroid Build Coastguard Worker   return head.size() + size_impl(tail...);
27*dbb99499SAndroid Build Coastguard Worker }
28*dbb99499SAndroid Build Coastguard Worker 
29*dbb99499SAndroid Build Coastguard Worker // Join a pack of std::strings using a delimiter
30*dbb99499SAndroid Build Coastguard Worker // TODO: use absl::StrJoin
join_impl(std::string &,char)31*dbb99499SAndroid Build Coastguard Worker void join_impl(std::string&, char) {}
32*dbb99499SAndroid Build Coastguard Worker 
33*dbb99499SAndroid Build Coastguard Worker template <typename Head, typename... Tail>
join_impl(std::string & s,const char delimiter,const Head & head,const Tail &...tail)34*dbb99499SAndroid Build Coastguard Worker void join_impl(std::string& s, const char delimiter, const Head& head,
35*dbb99499SAndroid Build Coastguard Worker                const Tail&... tail) {
36*dbb99499SAndroid Build Coastguard Worker   if (!s.empty() && !head.empty()) {
37*dbb99499SAndroid Build Coastguard Worker     s += delimiter;
38*dbb99499SAndroid Build Coastguard Worker   }
39*dbb99499SAndroid Build Coastguard Worker 
40*dbb99499SAndroid Build Coastguard Worker   s += head;
41*dbb99499SAndroid Build Coastguard Worker 
42*dbb99499SAndroid Build Coastguard Worker   join_impl(s, delimiter, tail...);
43*dbb99499SAndroid Build Coastguard Worker }
44*dbb99499SAndroid Build Coastguard Worker 
45*dbb99499SAndroid Build Coastguard Worker template <typename... Ts>
join(char delimiter,const Ts &...ts)46*dbb99499SAndroid Build Coastguard Worker std::string join(char delimiter, const Ts&... ts) {
47*dbb99499SAndroid Build Coastguard Worker   std::string s;
48*dbb99499SAndroid Build Coastguard Worker   s.reserve(sizeof...(Ts) + size_impl(ts...));
49*dbb99499SAndroid Build Coastguard Worker   join_impl(s, delimiter, ts...);
50*dbb99499SAndroid Build Coastguard Worker   return s;
51*dbb99499SAndroid Build Coastguard Worker }
52*dbb99499SAndroid Build Coastguard Worker }  // namespace
53*dbb99499SAndroid Build Coastguard Worker 
54*dbb99499SAndroid Build Coastguard Worker BENCHMARK_EXPORT
str() const55*dbb99499SAndroid Build Coastguard Worker std::string BenchmarkName::str() const {
56*dbb99499SAndroid Build Coastguard Worker   return join('/', function_name, args, min_time, min_warmup_time, iterations,
57*dbb99499SAndroid Build Coastguard Worker               repetitions, time_type, threads);
58*dbb99499SAndroid Build Coastguard Worker }
59*dbb99499SAndroid Build Coastguard Worker }  // namespace benchmark
60