Added benchmark of parsing.

pull/13171/head
Joshua Haberman 6 years ago
parent 9f49efef62
commit 901463e41e
  1. 11
      BUILD
  2. 14
      WORKSPACE
  3. 36
      tests/benchmark.cc

11
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,

@ -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",
)

@ -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);
Loading…
Cancel
Save