diff options
author | Joshua Haberman <jhaberman@gmail.com> | 2019-06-02 21:45:11 -0700 |
---|---|---|
committer | Joshua Haberman <jhaberman@gmail.com> | 2019-06-02 21:45:11 -0700 |
commit | 901463e41e0ef32266a59b5ba4a63c94529c86bd (patch) | |
tree | e9ca83445c3f9bca80a9af805299950231aad5f7 /tests/benchmark.cc | |
parent | 9f49efef6203973931894a4ed9b862b3e3d639f0 (diff) |
Added benchmark of parsing.
Diffstat (limited to 'tests/benchmark.cc')
-rw-r--r-- | tests/benchmark.cc | 36 |
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); |