From 030dedaaa74b379331809f037d46202e762724bc Mon Sep 17 00:00:00 2001 From: Carlos Sousa Date: Sun, 12 May 2024 17:44:04 -0300 Subject: [PATCH 1/3] Add can_parse to benchmark --- benchmarks/benchmark_template.cpp | 62 +++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/benchmarks/benchmark_template.cpp b/benchmarks/benchmark_template.cpp index 922872aa3..42df8672c 100644 --- a/benchmarks/benchmark_template.cpp +++ b/benchmarks/benchmark_template.cpp @@ -89,6 +89,68 @@ auto BasicBench_AdaURL_aggregator_href = BasicBench_AdaURL; BENCHMARK(BasicBench_AdaURL_aggregator_href); + +static void BasicBench_AdaURL_CanParse(benchmark::State& state) { + // volatile to prevent optimizations. + volatile size_t success = 0; + volatile size_t href_size = 0; + + for (auto _ : state) { + for (std::string& url_string : url_examples) { + bool can_parse = ada::can_parse(url_string); + if (can_parse) { + success++; + } + } + } + if (collector.has_events()) { + event_aggregate aggregate{}; + for (size_t i = 0; i < N; i++) { + std::atomic_thread_fence(std::memory_order_acquire); + collector.start(); + for (std::string& url_string : url_examples) { + bool can_parse = ada::can_parse(url_string); + if (can_parse) { + success++; + } + } + std::atomic_thread_fence(std::memory_order_release); + event_count allocate_count = collector.end(); + aggregate << allocate_count; + } + state.counters["cycles/url"] = + aggregate.best.cycles() / std::size(url_examples); + state.counters["instructions/url"] = + aggregate.best.instructions() / std::size(url_examples); + state.counters["instructions/cycle"] = + aggregate.best.instructions() / aggregate.best.cycles(); + state.counters["instructions/byte"] = + aggregate.best.instructions() / url_examples_bytes; + state.counters["instructions/ns"] = + aggregate.best.instructions() / aggregate.best.elapsed_ns(); + state.counters["GHz"] = + aggregate.best.cycles() / aggregate.best.elapsed_ns(); + state.counters["ns/url"] = + aggregate.best.elapsed_ns() / std::size(url_examples); + state.counters["cycle/byte"] = aggregate.best.cycles() / url_examples_bytes; + } + (void)success; + state.counters["time/byte"] = benchmark::Counter( + url_examples_bytes, benchmark::Counter::kIsIterationInvariantRate | + benchmark::Counter::kInvert); + state.counters["time/url"] = + benchmark::Counter(double(std::size(url_examples)), + benchmark::Counter::kIsIterationInvariantRate | + benchmark::Counter::kInvert); + state.counters["speed"] = benchmark::Counter( + url_examples_bytes, benchmark::Counter::kIsIterationInvariantRate); + state.counters["url/s"] = + benchmark::Counter(double(std::size(url_examples)), + benchmark::Counter::kIsIterationInvariantRate); +} + +BENCHMARK(BasicBench_AdaURL_CanParse); + #if ADA_url_whatwg_ENABLED size_t count_whatwg_invalid() { size_t how_many = 0; From ff2961af157a8ea7732b04623d736bd060b88349 Mon Sep 17 00:00:00 2001 From: Carlos Sousa Date: Sun, 12 May 2024 18:16:57 -0300 Subject: [PATCH 2/3] run clang-format --- benchmarks/benchmark_template.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/benchmark_template.cpp b/benchmarks/benchmark_template.cpp index 42df8672c..420905d09 100644 --- a/benchmarks/benchmark_template.cpp +++ b/benchmarks/benchmark_template.cpp @@ -89,7 +89,6 @@ auto BasicBench_AdaURL_aggregator_href = BasicBench_AdaURL; BENCHMARK(BasicBench_AdaURL_aggregator_href); - static void BasicBench_AdaURL_CanParse(benchmark::State& state) { // volatile to prevent optimizations. volatile size_t success = 0; From 5312f45a12b0b4425728b1ee5d160d4d2af49249 Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Sun, 12 May 2024 19:51:36 -0400 Subject: [PATCH 3/3] Update benchmarks/benchmark_template.cpp --- benchmarks/benchmark_template.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/benchmark_template.cpp b/benchmarks/benchmark_template.cpp index 420905d09..18205b7d6 100644 --- a/benchmarks/benchmark_template.cpp +++ b/benchmarks/benchmark_template.cpp @@ -92,7 +92,6 @@ BENCHMARK(BasicBench_AdaURL_aggregator_href); static void BasicBench_AdaURL_CanParse(benchmark::State& state) { // volatile to prevent optimizations. volatile size_t success = 0; - volatile size_t href_size = 0; for (auto _ : state) { for (std::string& url_string : url_examples) {