summaryrefslogtreecommitdiff
path: root/tests/benchmark.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmark.cc')
-rw-r--r--tests/benchmark.cc36
1 files changed, 36 insertions, 0 deletions
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