parent
85cbc41a89
commit
555fbbc0bc
10 changed files with 259 additions and 84 deletions
@ -0,0 +1,38 @@ |
||||
|
||||
import sys |
||||
import re |
||||
|
||||
include = sys.argv[1] |
||||
msg_basename = sys.argv[2] |
||||
count = 1 |
||||
|
||||
m = re.search(r'(.*\D)(\d+)$', sys.argv[2]) |
||||
if m: |
||||
msg_basename = m.group(1) |
||||
count = int(m.group(2)) |
||||
|
||||
print(f''' |
||||
#include "{include}" |
||||
|
||||
char buf[1]; |
||||
|
||||
int main() {{ |
||||
''') |
||||
|
||||
def RefMessage(name): |
||||
print(f''' |
||||
{{ |
||||
{name} proto; |
||||
proto.ParseFromArray(buf, 0); |
||||
proto.SerializePartialToArray(&buf[0], 0); |
||||
}} |
||||
''') |
||||
|
||||
RefMessage(msg_basename) |
||||
|
||||
for i in range(2, count + 1): |
||||
RefMessage(msg_basename + str(i)) |
||||
|
||||
print(''' |
||||
return 0; |
||||
}''') |
@ -0,0 +1,85 @@ |
||||
|
||||
import sys |
||||
import random |
||||
|
||||
base = sys.argv[1] |
||||
|
||||
field_freqs = [ |
||||
(('bool', 'optional'), 8.321), |
||||
(('bool', 'repeated'), 0.033), |
||||
(('bytes', 'optional'), 0.809), |
||||
(('bytes', 'repeated'), 0.065), |
||||
(('double', 'optional'), 2.845), |
||||
(('double', 'repeated'), 0.143), |
||||
(('fixed32', 'optional'), 0.084), |
||||
(('fixed32', 'repeated'), 0.012), |
||||
(('fixed64', 'optional'), 0.204), |
||||
(('fixed64', 'repeated'), 0.027), |
||||
(('float', 'optional'), 2.355), |
||||
(('float', 'repeated'), 0.132), |
||||
(('int32', 'optional'), 6.717), |
||||
(('int32', 'repeated'), 0.366), |
||||
(('int64', 'optional'), 9.678), |
||||
(('int64', 'repeated'), 0.425), |
||||
(('sfixed32', 'optional'), 0.018), |
||||
(('sfixed32', 'repeated'), 0.005), |
||||
(('sfixed64', 'optional'), 0.022), |
||||
(('sfixed64', 'repeated'), 0.005), |
||||
(('sint32', 'optional'), 0.026), |
||||
(('sint32', 'repeated'), 0.009), |
||||
(('sint64', 'optional'), 0.018), |
||||
(('sint64', 'repeated'), 0.006), |
||||
(('string', 'optional'), 25.461), |
||||
(('string', 'repeated'), 2.606), |
||||
(('Enum', 'optional'), 6.16), |
||||
(('Enum', 'repeated'), 0.576), |
||||
(('Message', 'optional'), 22.472), |
||||
(('Message', 'repeated'), 7.766), |
||||
(('uint32', 'optional'), 1.289), |
||||
(('uint32', 'repeated'), 0.051), |
||||
(('uint64', 'optional'), 1.044), |
||||
(('uint64', 'repeated'), 0.079), |
||||
] |
||||
|
||||
population = [item[0] for item in field_freqs] |
||||
weights = [item[1] for item in field_freqs] |
||||
|
||||
with open(base + "/benchmarks/100_msgs.proto", "w") as f: |
||||
f.write('syntax = "proto3";\n') |
||||
f.write('package upb_benchmark;\n') |
||||
f.write('message Message {}\n') |
||||
for i in range(2, 101): |
||||
f.write(f'message Message{i} {{}}\n') |
||||
|
||||
with open(base + "/benchmarks/200_msgs.proto", "w") as f: |
||||
f.write('syntax = "proto3";\n') |
||||
f.write('package upb_benchmark;\n') |
||||
f.write('message Message {}\n') |
||||
for i in range(2, 501): |
||||
f.write(f'message Message{i} {{}}\n') |
||||
|
||||
with open(base + "/benchmarks/100_fields.proto", "w") as f: |
||||
f.write('syntax = "proto2";\n') |
||||
f.write('package upb_benchmark;\n') |
||||
f.write('enum Enum { ZERO = 0; }\n') |
||||
f.write('message Message {\n') |
||||
i = 1 |
||||
random.seed(a=0, version=2) |
||||
for field in random.choices(population=population, weights=weights, k=100): |
||||
field_type, label = field |
||||
f.write(f' {label} {field_type} field{i} = {i};\n') |
||||
i += 1 |
||||
f.write('}\n') |
||||
|
||||
with open(base + "/benchmarks/200_fields.proto", "w") as f: |
||||
f.write('syntax = "proto2";\n') |
||||
f.write('package upb_benchmark;\n') |
||||
f.write('enum Enum { ZERO = 0; }\n') |
||||
f.write('message Message {\n') |
||||
i = 1 |
||||
random.seed(a=0, version=2) |
||||
for field in random.choices(population=population, weights=weights, k=200): |
||||
field_type, label = field |
||||
f.write(f' {label} {field_type} field{i} = {i};\n') |
||||
i += 1 |
||||
f.write('}\n') |
@ -0,0 +1,39 @@ |
||||
|
||||
import sys |
||||
import re |
||||
|
||||
include = sys.argv[1] |
||||
msg_basename = sys.argv[2] |
||||
count = 1 |
||||
|
||||
m = re.search(r'(.*\D)(\d+)$', sys.argv[2]) |
||||
if m: |
||||
msg_basename = m.group(1) |
||||
count = int(m.group(2)) |
||||
|
||||
print(f''' |
||||
#include "{include}" |
||||
|
||||
char buf[1]; |
||||
|
||||
int main() {{ |
||||
upb_arena *arena = upb_arena_new(); |
||||
size_t size; |
||||
''') |
||||
|
||||
def RefMessage(name): |
||||
print(f''' |
||||
{{ |
||||
{name} *proto = {name}_parse(buf, 1, arena); |
||||
{name}_serialize(proto, arena, &size); |
||||
}} |
||||
''') |
||||
|
||||
RefMessage(msg_basename) |
||||
|
||||
for i in range(2, count + 1): |
||||
RefMessage(msg_basename + str(i)) |
||||
|
||||
print(''' |
||||
return 0; |
||||
}''') |
@ -1,10 +0,0 @@ |
||||
|
||||
#include "INCLUDE" |
||||
|
||||
char buf[1]; |
||||
|
||||
int main() { |
||||
PROTO proto; |
||||
proto.ParseFromArray(buf, 1); |
||||
proto.SerializeToArray(buf, 1); |
||||
} |
@ -1,12 +0,0 @@ |
||||
|
||||
#include "INCLUDE" |
||||
|
||||
char buf[1]; |
||||
|
||||
int main() { |
||||
upb_arena *arena = upb_arena_new(); |
||||
size_t size; |
||||
PROTO *proto = PROTO_parse(buf, 1, arena); |
||||
PROTO_serialize(proto, arena, &size); |
||||
return 0; |
||||
} |
Loading…
Reference in new issue