Add SetBenchmarkFilter() to set --benchmark_filter flag value in user code (#1362)
* Add SetBenchmarkFilter() to set --benchmark_filter flag value in user code.
Use case: Provide an API to set this flag indepedence of the flag's implementation (ie., absl flag vs benchmark's flag facility)
* add test
* added notes on Initialize()
diff --git a/include/benchmark/benchmark.h b/include/benchmark/benchmark.h
index 7e146db..da5b890 100644
--- a/include/benchmark/benchmark.h
+++ b/include/benchmark/benchmark.h
@@ -302,6 +302,12 @@
// Returns the current value of --benchmark_filter.
BENCHMARK_EXPORT std::string GetBenchmarkFilter();
+// Sets a new value to --benchmark_filter. (This will override this flag's
+// current value).
+// Should be called after `benchmark::Initialize()`, as
+// `benchmark::Initialize()` will override the flag's value.
+BENCHMARK_EXPORT void SetBenchmarkFilter(std::string value);
+
// Creates a default display reporter. Used by the library when no display
// reporter is provided, but also made available for external use in case a
// custom reporter should respect the `--benchmark_format` flag as a fallback
diff --git a/src/benchmark.cc b/src/benchmark.cc
index 57958b1..eb7f656 100644
--- a/src/benchmark.cc
+++ b/src/benchmark.cc
@@ -535,6 +535,10 @@
std::string GetBenchmarkFilter() { return FLAGS_benchmark_filter; }
+void SetBenchmarkFilter(std::string value) {
+ FLAGS_benchmark_filter = std::move(value);
+}
+
void RegisterMemoryManager(MemoryManager* manager) {
internal::memory_manager = manager;
}
diff --git a/test/spec_arg_test.cc b/test/spec_arg_test.cc
index 043db1b..68ab135 100644
--- a/test/spec_arg_test.cc
+++ b/test/spec_arg_test.cc
@@ -91,5 +91,15 @@
<< matched_functions.front() << "]\n";
return 2;
}
+
+ // Test that SetBenchmarkFilter works.
+ const std::string golden_value = "golden_value";
+ benchmark::SetBenchmarkFilter(golden_value);
+ std::string current_value = benchmark::GetBenchmarkFilter();
+ if (golden_value != current_value) {
+ std::cerr << "Expected [" << golden_value
+ << "] for --benchmark_filter but got [" << current_value << "]\n";
+ return 3;
+ }
return 0;
}