diff options
author | Abseil Team <absl-team@google.com> | 2024-04-12 05:50:16 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-04-12 05:51:19 -0700 |
commit | 854193071498f330b71083d7e06a7cd18e02a4cc (patch) | |
tree | abf64c328f4036533b2eaaec59373e0f1a28681e | |
parent | 8f9e5f0203c8a708c71f4498bf59355d1d7bbf87 (diff) | |
download | abseil-854193071498f330b71083d7e06a7cd18e02a4cc.tar.gz abseil-854193071498f330b71083d7e06a7cd18e02a4cc.tar.bz2 abseil-854193071498f330b71083d7e06a7cd18e02a4cc.zip |
log_benchmark: Add VLOG_IS_ON benchmark
PiperOrigin-RevId: 624149255
Change-Id: I74815463226adaf183af531b8d373782d20b2ef2
-rw-r--r-- | absl/log/BUILD.bazel | 1 | ||||
-rw-r--r-- | absl/log/log_benchmark.cc | 67 |
2 files changed, 68 insertions, 0 deletions
diff --git a/absl/log/BUILD.bazel b/absl/log/BUILD.bazel index 0f172398..dd192a10 100644 --- a/absl/log/BUILD.bazel +++ b/absl/log/BUILD.bazel @@ -664,6 +664,7 @@ cc_test( ":log_entry", ":log_sink", ":log_sink_registry", + ":vlog_is_on", "//absl/base:core_headers", "//absl/base:log_severity", "//absl/flags:flag", diff --git a/absl/log/log_benchmark.cc b/absl/log/log_benchmark.cc index 45d9a5d6..60c0fd63 100644 --- a/absl/log/log_benchmark.cc +++ b/absl/log/log_benchmark.cc @@ -17,10 +17,12 @@ #include "absl/flags/flag.h" #include "absl/log/check.h" #include "absl/log/globals.h" +#include "absl/log/internal/flags.h" #include "absl/log/log.h" #include "absl/log/log_entry.h" #include "absl/log/log_sink.h" #include "absl/log/log_sink_registry.h" +#include "absl/log/vlog_is_on.h" #include "benchmark/benchmark.h" namespace { @@ -93,5 +95,70 @@ static void BM_EnabledLogOverhead(benchmark::State& state) { } BENCHMARK(BM_EnabledLogOverhead); +static void BM_VlogIsOnOverhead(benchmark::State& state) { + // It would make sense to do this only when state.thread_index == 0, + // but thread_index is an int on some platforms (e.g. Android) and a + // function returning an int on others. So we just do it on all threads. + // TODO(b/152609127): set only if thread_index == 0. + absl::SetFlag(&FLAGS_v, 0); + + while (state.KeepRunningBatch(10)) { + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 1 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 2 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 3 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 4 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 5 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 6 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 7 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 8 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 9 + benchmark::DoNotOptimize(VLOG_IS_ON(0)); // 10 + } +} +BENCHMARK(BM_VlogIsOnOverhead)->ThreadRange(1, 64); + +static void BM_VlogIsNotOnOverhead(benchmark::State& state) { + // It would make sense to do this only when state.thread_index == 0, + // but thread_index is an int on some platforms (e.g. Android) and a + // function returning an int on others. So we just do it on all threads. + // TODO(b/152609127): set only if thread_index == 0. + absl::SetFlag(&FLAGS_v, 0); + + while (state.KeepRunningBatch(10)) { + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 1 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 2 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 3 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 4 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 5 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 6 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 7 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 8 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 9 + benchmark::DoNotOptimize(VLOG_IS_ON(1)); // 10 + } +} +BENCHMARK(BM_VlogIsNotOnOverhead)->ThreadRange(1, 64); + +static void BM_LogEveryNOverhead(benchmark::State& state) { + absl::ScopedStderrThreshold disable_stderr_logging( + absl::LogSeverityAtLeast::kInfinity); + absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfinity); + ABSL_ATTRIBUTE_UNUSED NullLogSink null_sink; + + while (state.KeepRunningBatch(10)) { + LOG_EVERY_N_SEC(INFO, 10); + LOG_EVERY_N_SEC(INFO, 20); + LOG_EVERY_N_SEC(INFO, 30); + LOG_EVERY_N_SEC(INFO, 40); + LOG_EVERY_N_SEC(INFO, 50); + LOG_EVERY_N_SEC(INFO, 60); + LOG_EVERY_N_SEC(INFO, 70); + LOG_EVERY_N_SEC(INFO, 80); + LOG_EVERY_N_SEC(INFO, 90); + LOG_EVERY_N_SEC(INFO, 100); + } +} +BENCHMARK(BM_LogEveryNOverhead)->ThreadRange(1, 64); + } // namespace |