From 901463e41e0ef32266a59b5ba4a63c94529c86bd Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Sun, 2 Jun 2019 21:45:11 -0700 Subject: Added benchmark of parsing. --- tests/benchmark.cc | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/benchmark.cc (limited to 'tests/benchmark.cc') 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 +#include +#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); -- cgit v1.2.3