Skip to content

Commit d835e1e

Browse files
liyuying0000copybara-github
authored andcommitted
Add support for having different default benchmarks in single-threaded and multi-threaded runs.
PiperOrigin-RevId: 806013441 Change-Id: If823a13a45931122ee1a0d01e35f540cfd171887
1 parent 6e78f80 commit d835e1e

File tree

5 files changed

+66
-14
lines changed

5 files changed

+66
-14
lines changed

fleetbench/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ cc_library(
117117
"@com_google_absl//absl/log:check",
118118
"@com_google_absl//absl/log:globals",
119119
"@com_google_absl//absl/log:initialize",
120-
"@com_google_absl//absl/status",
121120
"@com_google_absl//absl/strings",
122121
"@com_google_absl//absl/strings:string_view",
123122
"@com_google_benchmark//:benchmark",

fleetbench/benchmark_main.cc

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,17 @@ int main(int argc, char* argv[]) {
129129

130130
CheckMemoryLimit();
131131

132-
if (benchmark::GetBenchmarkFilter().empty() ||
133-
benchmark::GetBenchmarkFilter() == "default") {
134-
// --benchmark_filter flag not set
132+
const std::string benchmark_filter = benchmark::GetBenchmarkFilter();
133+
if (benchmark_filter.empty() || benchmark_filter == "default" ||
134+
benchmark_filter == "single") {
135+
// --benchmark_filter flag not set, set to default or "single"
135136
benchmark::SetBenchmarkFilter(
136-
fleetbench::DynamicRegistrar::Get()->GetDefaultFilter());
137+
fleetbench::DynamicRegistrar::Get()->GetDefaultFilter(
138+
fleetbench::ThreadingMode::kSingleThreaded));
139+
} else if (benchmark_filter == "multi") {
140+
benchmark::SetBenchmarkFilter(
141+
fleetbench::DynamicRegistrar::Get()->GetDefaultFilter(
142+
fleetbench::ThreadingMode::kMultiThreaded));
137143
}
138144
fleetbench::DynamicRegistrar::Get()->Run();
139145

fleetbench/dynamic_registrar.cc

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,27 @@ void DynamicRegistrar::Run() {
3636
callbacks_.clear();
3737
}
3838

39-
void DynamicRegistrar::AddDefaultFilter(std::string filter) {
40-
if (!default_filter_.empty()) {
41-
default_filter_.append("|");
39+
void DynamicRegistrar::AddDefaultFilter(std::string filter,
40+
ThreadingMode mode) {
41+
if (mode == ThreadingMode::kSingleThreaded || mode == ThreadingMode::kBoth) {
42+
if (!default_single_threaded_filter_.empty()) {
43+
default_single_threaded_filter_.push_back('|');
44+
}
45+
default_single_threaded_filter_.append(filter);
4246
}
43-
default_filter_.append(filter);
47+
if (mode == ThreadingMode::kMultiThreaded || mode == ThreadingMode::kBoth) {
48+
if (!default_multi_threaded_filter_.empty()) {
49+
default_multi_threaded_filter_.push_back('|');
50+
}
51+
default_multi_threaded_filter_.append(filter);
52+
}
53+
}
54+
55+
std::string DynamicRegistrar::GetDefaultFilter(ThreadingMode mode) const {
56+
if (mode == ThreadingMode::kSingleThreaded) {
57+
return default_single_threaded_filter_;
58+
}
59+
return default_multi_threaded_filter_;
4460
}
4561

4662
} // namespace fleetbench

fleetbench/dynamic_registrar.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@
2121

2222
namespace fleetbench {
2323

24+
enum class ThreadingMode {
25+
kSingleThreaded,
26+
kMultiThreaded,
27+
kBoth,
28+
};
29+
2430
#define REGISTER_BENCHMARK(n) benchmark::RegisterBenchmark(#n, n)
2531
#define REGISTER_BENCHMARK_TEMPLATE(n, ...) \
2632
benchmark::RegisterBenchmark(#n "<" #__VA_ARGS__ ">", n<__VA_ARGS__>)
@@ -45,15 +51,17 @@ class DynamicRegistrar {
4551

4652
// Used by fleetbench main() as the default benchmark filter if the
4753
// --benchmark_filter flag is not set. The returned filter is the disjunction
48-
// of all filters that were added by calls to AddDefaultFilter.
49-
std::string GetDefaultFilter() const { return default_filter_; }
54+
// of all filters that were added by calls to AddDefaultFilter for the given
55+
// `ThreadingMode`.
56+
std::string GetDefaultFilter(ThreadingMode mode) const;
5057

51-
// Adds an additional benchmark filter.
52-
void AddDefaultFilter(std::string filter);
58+
void AddDefaultFilter(std::string filter,
59+
ThreadingMode mode = ThreadingMode::kBoth);
5360

5461
private:
5562
std::vector<std::function<void()>> callbacks_;
56-
std::string default_filter_;
63+
std::string default_single_threaded_filter_;
64+
std::string default_multi_threaded_filter_;
5765
};
5866
} // namespace fleetbench
5967

fleetbench/dynamic_registrar_test.cc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,28 @@ TEST(DynamicRegistrar, CallbackRunsOnlyOnce) {
3333
DynamicRegistrar::Get()->Run();
3434
}
3535

36+
TEST(DynamicRegistrar, DefaultFilters) {
37+
DynamicRegistrar registrar;
38+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kSingleThreaded), "");
39+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kMultiThreaded), "");
40+
41+
registrar.AddDefaultFilter("filter1", ThreadingMode::kSingleThreaded);
42+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kSingleThreaded),
43+
"filter1");
44+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kMultiThreaded), "");
45+
46+
registrar.AddDefaultFilter("filter2", ThreadingMode::kMultiThreaded);
47+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kSingleThreaded),
48+
"filter1");
49+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kMultiThreaded),
50+
"filter2");
51+
52+
registrar.AddDefaultFilter("filter3", ThreadingMode::kBoth);
53+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kSingleThreaded),
54+
"filter1|filter3");
55+
EXPECT_EQ(registrar.GetDefaultFilter(ThreadingMode::kMultiThreaded),
56+
"filter2|filter3");
57+
}
58+
3659
} // namespace
3760
} // namespace fleetbench

0 commit comments

Comments
 (0)