From eacce0b503a81a2910cc1ea0439cf7bc39e3377d Mon Sep 17 00:00:00 2001 From: Vy Nguyen Date: Tue, 8 Mar 2022 11:02:37 -0500 Subject: [PATCH] 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() --- include/benchmark/benchmark.h | 6 ++++++ src/benchmark.cc | 4 ++++ test/spec_arg_test.cc | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/include/benchmark/benchmark.h b/include/benchmark/benchmark.h index 7e146db9..da5b8902 100644 --- a/include/benchmark/benchmark.h +++ b/include/benchmark/benchmark.h @@ -302,6 +302,12 @@ BENCHMARK_EXPORT bool ReportUnrecognizedArguments(int argc, char** argv); // 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 57958b12..eb7f6566 100644 --- a/src/benchmark.cc +++ b/src/benchmark.cc @@ -535,6 +535,10 @@ void SetDefaultTimeUnit(TimeUnit unit) { default_time_unit = unit; } 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 043db1be..68ab1351 100644 --- a/test/spec_arg_test.cc +++ b/test/spec_arg_test.cc @@ -91,5 +91,15 @@ int main(int argc, char** argv) { << 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; }