Files
pycapnp/benchmark/common.py
Jason Paryani 52dde9ab22 Add benchmarks
2013-11-17 23:06:25 -08:00

77 lines
2.6 KiB
Python

from random import random
WORDS = ["foo ", "bar ", "baz ", "qux ", "quux ", "corge ", "grault ", "garply ", "waldo ", "fred ",
"plugh ", "xyzzy ", "thud "]
def rand_int(val):
return int(random() * val)
def rand_double(val):
return random() * val
def rand_bool():
return random() < .5
def from_bytes_helper(klass):
def helper(text):
obj = klass()
obj.ParseFromString(text)
return obj
return helper
def pass_by_object(reuse, iters, benchmark):
for _ in range(iters):
request = benchmark.Request()
expected = benchmark.setup(request)
response = benchmark.Response()
benchmark.handle(request, response)
if not benchmark.check(response, expected):
raise ValueError('Expected {}'.format(expected))
def pass_by_bytes(reuse, iters, benchmark):
for _ in range(iters):
request = benchmark.Request()
expected = benchmark.setup(request)
req_bytes = benchmark.to_bytes(request)
request2 = benchmark.from_bytes_request(req_bytes)
response = benchmark.Response()
benchmark.handle(request2, response)
resp_bytes = benchmark.to_bytes(response)
response2 = benchmark.from_bytes_response(resp_bytes)
if not benchmark.check(response2, expected):
raise ValueError('Expected {}'.format(expected))
def do_benchmark(mode, *args, **kwargs):
if mode == "client":
pass
elif mode == "object":
return pass_by_object(*args, **kwargs)
elif mode == "passByBytes":
return pass_by_bytes(*args, **kwargs)
else:
raise ValueError("Unknown mode: " + str(mode))
# typedef typename BenchmarkTypes::template BenchmarkMethods<TestCase, Reuse, Compression>
# BenchmarkMethods;
# if (mode == "client") {
# return BenchmarkMethods::syncClient(STDIN_FILENO, STDOUT_FILENO, iters);
# } else if (mode == "server") {
# return BenchmarkMethods::server(STDIN_FILENO, STDOUT_FILENO, iters);
# } else if (mode == "object") {
# return BenchmarkMethods::passByObject(iters, false);
# } else if (mode == "object-size") {
# return BenchmarkMethods::passByObject(iters, true);
# } else if (mode == "bytes") {
# return BenchmarkMethods::passByBytes(iters);
# } else if (mode == "pipe") {
# return passByPipe<BenchmarkMethods>(BenchmarkMethods::syncClient, iters);
# } else if (mode == "pipe-async") {
# return passByPipe<BenchmarkMethods>(BenchmarkMethods::asyncClient, iters);
# } else {
# fprintf(stderr, "Unknown mode: %s\n", mode.c_str());
# exit(1);
# }
# }