summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Haberman <jhaberman@gmail.com>2019-06-02 21:45:11 -0700
committerJoshua Haberman <jhaberman@gmail.com>2019-06-02 21:45:11 -0700
commit901463e41e0ef32266a59b5ba4a63c94529c86bd (patch)
treee9ca83445c3f9bca80a9af805299950231aad5f7
parent9f49efef6203973931894a4ed9b862b3e3d639f0 (diff)
Added benchmark of parsing.
-rw-r--r--BUILD11
-rw-r--r--WORKSPACE14
-rw-r--r--tests/benchmark.cc36
3 files changed, 61 insertions, 0 deletions
diff --git a/BUILD b/BUILD
index 11156c8..7eb1d72 100644
--- a/BUILD
+++ b/BUILD
@@ -231,6 +231,17 @@ cc_binary(
# C/C++ tests ##################################################################
+cc_binary(
+ name = "benchmark",
+ testonly = 1,
+ srcs = ["tests/benchmark.cc"],
+ deps = [
+ ":descriptor_upbproto",
+ ":descriptor_upbreflection",
+ "@com_github_google_benchmark//:benchmark_main",
+ ],
+)
+
cc_library(
name = "upb_test",
testonly = 1,
diff --git a/WORKSPACE b/WORKSPACE
index 91d2150..c1c8c3b 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -23,3 +23,17 @@ http_archive(
strip_prefix = "ragel-6.10",
urls = ["http://www.colm.net/files/ragel/ragel-6.10.tar.gz"],
)
+
+http_archive(
+ name = "com_google_googletest",
+ urls = ["https://github.com/google/googletest/archive/b6cd405286ed8635ece71c72f118e659f4ade3fb.zip"], # 2019-01-07
+ strip_prefix = "googletest-b6cd405286ed8635ece71c72f118e659f4ade3fb",
+ sha256 = "ff7a82736e158c077e76188232eac77913a15dac0b22508c390ab3f88e6d6d86",
+)
+
+http_archive(
+ name = "com_github_google_benchmark",
+ urls = ["https://github.com/google/benchmark/archive/16703ff83c1ae6d53e5155df3bb3ab0bc96083be.zip"],
+ strip_prefix = "benchmark-16703ff83c1ae6d53e5155df3bb3ab0bc96083be",
+ sha256 = "59f918c8ccd4d74b6ac43484467b500f1d64b40cc1010daa055375b322a43ba3",
+)
diff --git a/tests/benchmark.cc b/tests/benchmark.cc
new file mode 100644
index 0000000..bcb4ec7
--- /dev/null
+++ b/tests/benchmark.cc
@@ -0,0 +1,36 @@
+
+#include <string.h>
+#include <benchmark/benchmark.h>
+#include "google/protobuf/descriptor.upb.h"
+#include "google/protobuf/descriptor.upbdefs.h"
+
+upb_strview descriptor = google_protobuf_descriptor_proto_upbdefinit.descriptor;
+
+/* A buffer big enough to parse descriptor.proto without going to heap. */
+char buf[65535];
+
+static void BM_CreateArena(benchmark::State& state) {
+ for (auto _ : state) {
+ upb_arena* arena = upb_arena_init(buf, sizeof(buf), NULL);
+ upb_arena_free(arena);
+ }
+}
+BENCHMARK(BM_CreateArena);
+
+static void BM_ParseDescriptor(benchmark::State& state) {
+ size_t bytes = 0;
+ for (auto _ : state) {
+ upb_arena* arena = upb_arena_init(buf, sizeof(buf), NULL);
+ google_protobuf_FileDescriptorProto* set =
+ google_protobuf_FileDescriptorProto_parse(descriptor.data,
+ descriptor.size, arena);
+ if (!set) {
+ printf("Failed to parse.\n");
+ exit(1);
+ }
+ bytes += descriptor.size;
+ upb_arena_free(arena);
+ }
+ state.SetBytesProcessed(state.iterations() * descriptor.size);
+}
+BENCHMARK(BM_ParseDescriptor);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback