aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted/google
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2024-11-30 18:17:04 +0000
committerAlexander Smirnov <alex@ydb.tech>2024-11-30 18:17:04 +0000
commit6d314ad5bbedbdbad47e567f12669f005eaad866 (patch)
tree3d7d24450705ed983ba77f143d1ca95a63a6f142 /contrib/restricted/google
parent7466d62733bffe5cb040f37b21c5a9a4ad174353 (diff)
parent21adcc74febab524dedf75a02d887e6f507d0b7e (diff)
downloadydb-6d314ad5bbedbdbad47e567f12669f005eaad866.tar.gz
Merge branch 'rightlib' into mergelibs-241130-1815
Diffstat (limited to 'contrib/restricted/google')
-rw-r--r--contrib/restricted/google/benchmark/.yandex_meta/override.nix4
-rw-r--r--contrib/restricted/google/benchmark/include/benchmark/benchmark.h52
-rw-r--r--contrib/restricted/google/benchmark/src/benchmark.cc14
-rw-r--r--contrib/restricted/google/benchmark/src/benchmark_runner.cc43
-rw-r--r--contrib/restricted/google/benchmark/src/benchmark_runner.h7
-rw-r--r--contrib/restricted/google/benchmark/src/colorprint.cc16
-rw-r--r--contrib/restricted/google/benchmark/src/perf_counters.cc2
-rw-r--r--contrib/restricted/google/benchmark/src/sysinfo.cc6
-rw-r--r--contrib/restricted/google/benchmark/test/ya.make2
-rw-r--r--contrib/restricted/google/benchmark/tools/compare/ya.make4
-rw-r--r--contrib/restricted/google/benchmark/tools/ya.make2
-rw-r--r--contrib/restricted/google/benchmark/ya.make6
12 files changed, 120 insertions, 38 deletions
diff --git a/contrib/restricted/google/benchmark/.yandex_meta/override.nix b/contrib/restricted/google/benchmark/.yandex_meta/override.nix
index 1eaa98bdf5..13fbc44446 100644
--- a/contrib/restricted/google/benchmark/.yandex_meta/override.nix
+++ b/contrib/restricted/google/benchmark/.yandex_meta/override.nix
@@ -1,11 +1,11 @@
pkgs: attrs: with pkgs; with attrs; rec {
- version = "1.9.0";
+ version = "1.9.1";
src = fetchFromGitHub {
owner = "google";
repo = "benchmark";
rev = "v${version}";
- hash = "sha256-5cl1PIjhXaL58kSyWZXRWLq6BITS2BwEovPhwvk2e18=";
+ hash = "sha256-5xDg1duixLoWIuy59WT0r5ZBAvTR6RPP7YrhBYkMxc8=";
};
buildInputs = [ gtest ];
diff --git a/contrib/restricted/google/benchmark/include/benchmark/benchmark.h b/contrib/restricted/google/benchmark/include/benchmark/benchmark.h
index 4cdb4515cb..86f9dbbabb 100644
--- a/contrib/restricted/google/benchmark/include/benchmark/benchmark.h
+++ b/contrib/restricted/google/benchmark/include/benchmark/benchmark.h
@@ -290,11 +290,50 @@ BENCHMARK(BM_test)->Unit(benchmark::kMillisecond);
#define BENCHMARK_OVERRIDE
#endif
+#if defined(__GNUC__)
+// Determine the cacheline size based on architecture
+#if defined(__i386__) || defined(__x86_64__)
+#define BENCHMARK_INTERNAL_CACHELINE_SIZE 64
+#elif defined(__powerpc64__)
+#define BENCHMARK_INTERNAL_CACHELINE_SIZE 128
+#elif defined(__aarch64__)
+#define BENCHMARK_INTERNAL_CACHELINE_SIZE 64
+#elif defined(__arm__)
+// Cache line sizes for ARM: These values are not strictly correct since
+// cache line sizes depend on implementations, not architectures. There
+// are even implementations with cache line sizes configurable at boot
+// time.
+#if defined(__ARM_ARCH_5T__)
+#define BENCHMARK_INTERNAL_CACHELINE_SIZE 32
+#elif defined(__ARM_ARCH_7A__)
+#define BENCHMARK_INTERNAL_CACHELINE_SIZE 64
+#endif // ARM_ARCH
+#endif // arches
+#endif // __GNUC__
+
+#ifndef BENCHMARK_INTERNAL_CACHELINE_SIZE
+// A reasonable default guess. Note that overestimates tend to waste more
+// space, while underestimates tend to waste more time.
+#define BENCHMARK_INTERNAL_CACHELINE_SIZE 64
+#endif
+
+#if defined(__GNUC__)
+// Indicates that the declared object be cache aligned using
+// `BENCHMARK_INTERNAL_CACHELINE_SIZE` (see above).
+#define BENCHMARK_INTERNAL_CACHELINE_ALIGNED \
+ __attribute__((aligned(BENCHMARK_INTERNAL_CACHELINE_SIZE)))
+#elif defined(_MSC_VER)
+#define BENCHMARK_INTERNAL_CACHELINE_ALIGNED \
+ __declspec(align(BENCHMARK_INTERNAL_CACHELINE_SIZE))
+#else
+#define BENCHMARK_INTERNAL_CACHELINE_ALIGNED
+#endif
+
#if defined(_MSC_VER)
#pragma warning(push)
// C4251: <symbol> needs to have dll-interface to be used by clients of class
#pragma warning(disable : 4251)
-#endif
+#endif // _MSC_VER_
namespace benchmark {
class BenchmarkReporter;
@@ -757,9 +796,14 @@ enum Skipped
} // namespace internal
+#if defined(_MSC_VER)
+#pragma warning(push)
+// C4324: 'benchmark::State': structure was padded due to alignment specifier
+#pragma warning(disable : 4324)
+#endif // _MSC_VER_
// State is passed to a running Benchmark and contains state for the
// benchmark to use.
-class BENCHMARK_EXPORT State {
+class BENCHMARK_EXPORT BENCHMARK_INTERNAL_CACHELINE_ALIGNED State {
public:
struct StateIterator;
friend struct StateIterator;
@@ -1024,6 +1068,9 @@ class BENCHMARK_EXPORT State {
friend class internal::BenchmarkInstance;
};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif // _MSC_VER_
inline BENCHMARK_ALWAYS_INLINE bool State::KeepRunning() {
return KeepRunningInternal(1, /*is_batch=*/false);
@@ -1507,6 +1554,7 @@ class Fixture : public internal::Benchmark {
BaseClass##_##Method##_Benchmark
#define BENCHMARK_PRIVATE_DECLARE(n) \
+ /* NOLINTNEXTLINE(misc-use-anonymous-namespace) */ \
static ::benchmark::internal::Benchmark* BENCHMARK_PRIVATE_NAME(n) \
BENCHMARK_UNUSED
diff --git a/contrib/restricted/google/benchmark/src/benchmark.cc b/contrib/restricted/google/benchmark/src/benchmark.cc
index b7767bd00a..0ea90aeb6a 100644
--- a/contrib/restricted/google/benchmark/src/benchmark.cc
+++ b/contrib/restricted/google/benchmark/src/benchmark.cc
@@ -92,6 +92,11 @@ BM_DEFINE_double(benchmark_min_warmup_time, 0.0);
// standard deviation of the runs will be reported.
BM_DEFINE_int32(benchmark_repetitions, 1);
+// If enabled, forces each benchmark to execute exactly one iteration and one
+// repetition, bypassing any configured
+// MinTime()/MinWarmUpTime()/Iterations()/Repetitions()
+BM_DEFINE_bool(benchmark_dry_run, false);
+
// If set, enable random interleaving of repetitions of all benchmarks.
// See http://github.com/google/benchmark/issues/1051 for details.
BM_DEFINE_bool(benchmark_enable_random_interleaving, false);
@@ -663,6 +668,10 @@ void RegisterMemoryManager(MemoryManager* manager) {
}
void RegisterProfilerManager(ProfilerManager* manager) {
+ // Don't allow overwriting an existing manager.
+ if (manager != nullptr) {
+ BM_CHECK_EQ(internal::profiler_manager, nullptr);
+ }
internal::profiler_manager = manager;
}
@@ -717,6 +726,7 @@ void ParseCommandLineFlags(int* argc, char** argv) {
&FLAGS_benchmark_min_warmup_time) ||
ParseInt32Flag(argv[i], "benchmark_repetitions",
&FLAGS_benchmark_repetitions) ||
+ ParseBoolFlag(argv[i], "benchmark_dry_run", &FLAGS_benchmark_dry_run) ||
ParseBoolFlag(argv[i], "benchmark_enable_random_interleaving",
&FLAGS_benchmark_enable_random_interleaving) ||
ParseBoolFlag(argv[i], "benchmark_report_aggregates_only",
@@ -755,6 +765,9 @@ void ParseCommandLineFlags(int* argc, char** argv) {
if (FLAGS_benchmark_color.empty()) {
PrintUsageAndExit();
}
+ if (FLAGS_benchmark_dry_run) {
+ AddCustomContext("dry_run", "true");
+ }
for (const auto& kv : FLAGS_benchmark_context) {
AddCustomContext(kv.first, kv.second);
}
@@ -783,6 +796,7 @@ void PrintDefaultHelp() {
" [--benchmark_min_time=`<integer>x` OR `<float>s` ]\n"
" [--benchmark_min_warmup_time=<min_warmup_time>]\n"
" [--benchmark_repetitions=<num_repetitions>]\n"
+ " [--benchmark_dry_run={true|false}]\n"
" [--benchmark_enable_random_interleaving={true|false}]\n"
" [--benchmark_report_aggregates_only={true|false}]\n"
" [--benchmark_display_aggregates_only={true|false}]\n"
diff --git a/contrib/restricted/google/benchmark/src/benchmark_runner.cc b/contrib/restricted/google/benchmark/src/benchmark_runner.cc
index a38093937a..463f69fc52 100644
--- a/contrib/restricted/google/benchmark/src/benchmark_runner.cc
+++ b/contrib/restricted/google/benchmark/src/benchmark_runner.cc
@@ -58,6 +58,14 @@
namespace benchmark {
+BM_DECLARE_bool(benchmark_dry_run);
+BM_DECLARE_string(benchmark_min_time);
+BM_DECLARE_double(benchmark_min_warmup_time);
+BM_DECLARE_int32(benchmark_repetitions);
+BM_DECLARE_bool(benchmark_report_aggregates_only);
+BM_DECLARE_bool(benchmark_display_aggregates_only);
+BM_DECLARE_string(benchmark_perf_counters);
+
namespace internal {
MemoryManager* memory_manager = nullptr;
@@ -126,14 +134,14 @@ BenchmarkReporter::Run CreateRunReport(
void RunInThread(const BenchmarkInstance* b, IterationCount iters,
int thread_id, ThreadManager* manager,
PerfCountersMeasurement* perf_counters_measurement,
- ProfilerManager* profiler_manager) {
+ ProfilerManager* profiler_manager_) {
internal::ThreadTimer timer(
b->measure_process_cpu_time()
? internal::ThreadTimer::CreateProcessCpuTime()
: internal::ThreadTimer::Create());
State st = b->Run(iters, thread_id, &timer, manager,
- perf_counters_measurement, profiler_manager);
+ perf_counters_measurement, profiler_manager_);
BM_CHECK(st.skipped() || st.iterations() >= st.max_iterations)
<< "Benchmark returned before State::KeepRunning() returned false!";
{
@@ -228,20 +236,29 @@ BenchmarkRunner::BenchmarkRunner(
: b(b_),
reports_for_family(reports_for_family_),
parsed_benchtime_flag(ParseBenchMinTime(FLAGS_benchmark_min_time)),
- min_time(ComputeMinTime(b_, parsed_benchtime_flag)),
- min_warmup_time((!IsZero(b.min_time()) && b.min_warmup_time() > 0.0)
- ? b.min_warmup_time()
- : FLAGS_benchmark_min_warmup_time),
- warmup_done(!(min_warmup_time > 0.0)),
- repeats(b.repetitions() != 0 ? b.repetitions()
- : FLAGS_benchmark_repetitions),
+ min_time(FLAGS_benchmark_dry_run
+ ? 0
+ : ComputeMinTime(b_, parsed_benchtime_flag)),
+ min_warmup_time(
+ FLAGS_benchmark_dry_run
+ ? 0
+ : ((!IsZero(b.min_time()) && b.min_warmup_time() > 0.0)
+ ? b.min_warmup_time()
+ : FLAGS_benchmark_min_warmup_time)),
+ warmup_done(FLAGS_benchmark_dry_run ? true : !(min_warmup_time > 0.0)),
+ repeats(FLAGS_benchmark_dry_run
+ ? 1
+ : (b.repetitions() != 0 ? b.repetitions()
+ : FLAGS_benchmark_repetitions)),
has_explicit_iteration_count(b.iterations() != 0 ||
parsed_benchtime_flag.tag ==
BenchTimeType::ITERS),
pool(static_cast<size_t>(b.threads() - 1)),
- iters(has_explicit_iteration_count
- ? ComputeIters(b_, parsed_benchtime_flag)
- : 1),
+ iters(FLAGS_benchmark_dry_run
+ ? 1
+ : (has_explicit_iteration_count
+ ? ComputeIters(b_, parsed_benchtime_flag)
+ : 1)),
perf_counters_measurement_ptr(pcm_) {
run_results.display_report_aggregates_only =
(FLAGS_benchmark_report_aggregates_only ||
@@ -339,7 +356,7 @@ bool BenchmarkRunner::ShouldReportIterationResults(
// Determine if this run should be reported;
// Either it has run for a sufficient amount of time
// or because an error was reported.
- return i.results.skipped_ ||
+ return i.results.skipped_ || FLAGS_benchmark_dry_run ||
i.iters >= kMaxIterations || // Too many iterations already.
i.seconds >=
GetMinTimeToApply() || // The elapsed time is large enough.
diff --git a/contrib/restricted/google/benchmark/src/benchmark_runner.h b/contrib/restricted/google/benchmark/src/benchmark_runner.h
index cd34d2d5bb..6e5ceb31e0 100644
--- a/contrib/restricted/google/benchmark/src/benchmark_runner.h
+++ b/contrib/restricted/google/benchmark/src/benchmark_runner.h
@@ -25,13 +25,6 @@
namespace benchmark {
-BM_DECLARE_string(benchmark_min_time);
-BM_DECLARE_double(benchmark_min_warmup_time);
-BM_DECLARE_int32(benchmark_repetitions);
-BM_DECLARE_bool(benchmark_report_aggregates_only);
-BM_DECLARE_bool(benchmark_display_aggregates_only);
-BM_DECLARE_string(benchmark_perf_counters);
-
namespace internal {
extern MemoryManager* memory_manager;
diff --git a/contrib/restricted/google/benchmark/src/colorprint.cc b/contrib/restricted/google/benchmark/src/colorprint.cc
index abc71492f7..fd1971ad3c 100644
--- a/contrib/restricted/google/benchmark/src/colorprint.cc
+++ b/contrib/restricted/google/benchmark/src/colorprint.cc
@@ -135,19 +135,25 @@ void ColorPrintf(std::ostream& out, LogColor color, const char* fmt,
// Gets the current text color.
CONSOLE_SCREEN_BUFFER_INFO buffer_info;
GetConsoleScreenBufferInfo(stdout_handle, &buffer_info);
- const WORD old_color_attrs = buffer_info.wAttributes;
+ const WORD original_color_attrs = buffer_info.wAttributes;
// We need to flush the stream buffers into the console before each
// SetConsoleTextAttribute call lest it affect the text that is already
// printed but has not yet reached the console.
out.flush();
- SetConsoleTextAttribute(stdout_handle,
- GetPlatformColorCode(color) | FOREGROUND_INTENSITY);
+
+ const WORD original_background_attrs =
+ original_color_attrs & (BACKGROUND_RED | BACKGROUND_GREEN |
+ BACKGROUND_BLUE | BACKGROUND_INTENSITY);
+
+ SetConsoleTextAttribute(stdout_handle, GetPlatformColorCode(color) |
+ FOREGROUND_INTENSITY |
+ original_background_attrs);
out << FormatString(fmt, args);
out.flush();
- // Restores the text color.
- SetConsoleTextAttribute(stdout_handle, old_color_attrs);
+ // Restores the text and background color.
+ SetConsoleTextAttribute(stdout_handle, original_color_attrs);
#else
const char* color_code = GetPlatformColorCode(color);
if (color_code) out << FormatString("\033[0;3%sm", color_code);
diff --git a/contrib/restricted/google/benchmark/src/perf_counters.cc b/contrib/restricted/google/benchmark/src/perf_counters.cc
index 66ac6f0afb..c1a8316448 100644
--- a/contrib/restricted/google/benchmark/src/perf_counters.cc
+++ b/contrib/restricted/google/benchmark/src/perf_counters.cc
@@ -26,8 +26,6 @@
namespace benchmark {
namespace internal {
-constexpr size_t PerfCounterValues::kMaxCounters;
-
#if defined HAVE_LIBPFM
size_t PerfCounterValues::Read(const std::vector<int>& leaders) {
diff --git a/contrib/restricted/google/benchmark/src/sysinfo.cc b/contrib/restricted/google/benchmark/src/sysinfo.cc
index 617d276e47..358e4d4230 100644
--- a/contrib/restricted/google/benchmark/src/sysinfo.cc
+++ b/contrib/restricted/google/benchmark/src/sysinfo.cc
@@ -353,6 +353,12 @@ std::vector<CPUInfo::CacheInfo> GetCacheSizesWindows() {
C.size = static_cast<int>(cache.Size);
C.type = "Unknown";
switch (cache.Type) {
+// Windows SDK version >= 10.0.26100.0
+// 0x0A000010 is the value of NTDDI_WIN11_GE
+#if NTDDI_VERSION >= 0x0A000010
+ case CacheUnknown:
+ break;
+#endif
case CacheUnified:
C.type = "Unified";
break;
diff --git a/contrib/restricted/google/benchmark/test/ya.make b/contrib/restricted/google/benchmark/test/ya.make
index 0c2cad107d..1ef8afafb8 100644
--- a/contrib/restricted/google/benchmark/test/ya.make
+++ b/contrib/restricted/google/benchmark/test/ya.make
@@ -4,7 +4,7 @@ GTEST(benchmark_gtest)
WITHOUT_LICENSE_TEXTS()
-VERSION(1.9.0)
+VERSION(1.9.1)
LICENSE(Apache-2.0)
diff --git a/contrib/restricted/google/benchmark/tools/compare/ya.make b/contrib/restricted/google/benchmark/tools/compare/ya.make
index cf364865b5..0d4aa76cfb 100644
--- a/contrib/restricted/google/benchmark/tools/compare/ya.make
+++ b/contrib/restricted/google/benchmark/tools/compare/ya.make
@@ -4,9 +4,9 @@ PY3_PROGRAM()
WITHOUT_LICENSE_TEXTS()
-VERSION(1.9.0)
+VERSION(1.9.1)
-ORIGINAL_SOURCE(https://github.com/google/benchmark/archive/v1.9.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/google/benchmark/archive/v1.9.1.tar.gz)
LICENSE(Apache-2.0)
diff --git a/contrib/restricted/google/benchmark/tools/ya.make b/contrib/restricted/google/benchmark/tools/ya.make
index c010117d64..6f36ef1416 100644
--- a/contrib/restricted/google/benchmark/tools/ya.make
+++ b/contrib/restricted/google/benchmark/tools/ya.make
@@ -1,6 +1,6 @@
# Generated by devtools/yamaker.
-VERSION(1.9.0)
+VERSION(1.9.1)
IF (NOT USE_STL_SYSTEM)
IF (NOT USE_SYSTEM_PYTHON OR NOT _SYSTEM_PYTHON27)
diff --git a/contrib/restricted/google/benchmark/ya.make b/contrib/restricted/google/benchmark/ya.make
index 73451b6535..a38b55df68 100644
--- a/contrib/restricted/google/benchmark/ya.make
+++ b/contrib/restricted/google/benchmark/ya.make
@@ -2,9 +2,9 @@
LIBRARY()
-VERSION(1.9.0)
+VERSION(1.9.1)
-ORIGINAL_SOURCE(https://github.com/google/benchmark/archive/v1.9.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/google/benchmark/archive/v1.9.1.tar.gz)
LICENSE(Apache-2.0)
@@ -21,7 +21,7 @@ NO_UTIL()
CFLAGS(
GLOBAL -DBENCHMARK_STATIC_DEFINE
- -DBENCHMARK_VERSION=\"v1.9.0\"
+ -DBENCHMARK_VERSION=\"v1.9.1\"
-DHAVE_POSIX_REGEX
-DHAVE_PTHREAD_AFFINITY
-DHAVE_STD_REGEX