71 lines
1.9 KiB
D
71 lines
1.9 KiB
D
/**
|
|
* An implementation of the mini serialization benchmark also available for
|
|
* C++ and Java.
|
|
*
|
|
* For meaningful results, you might want to make sure that
|
|
* the Thrift library is compiled with release build flags,
|
|
* e.g. by including the source files with the build instead
|
|
* of linking libthriftd:
|
|
*
|
|
dmd -w -O -release -inline -I../src -Igen-d -ofserialization_benchmark \
|
|
$(find ../src/thrift -name '*.d' -not -name index.d) \
|
|
gen-d/DebugProtoTest_types.d serialization_benchmark.d
|
|
*/
|
|
module serialization_benchmark;
|
|
|
|
import std.datetime.stopwatch : AutoStart, StopWatch;
|
|
import std.math : PI;
|
|
import std.stdio;
|
|
import thrift.protocol.binary;
|
|
import thrift.transport.memory;
|
|
import thrift.transport.range;
|
|
import DebugProtoTest_types;
|
|
|
|
void main() {
|
|
auto buf = new TMemoryBuffer;
|
|
enum ITERATIONS = 10_000_000;
|
|
|
|
{
|
|
auto ooe = OneOfEach();
|
|
ooe.im_true = true;
|
|
ooe.im_false = false;
|
|
ooe.a_bite = 0x7f;
|
|
ooe.integer16 = 27_000;
|
|
ooe.integer32 = 1 << 24;
|
|
ooe.integer64 = 6_000_000_000;
|
|
ooe.double_precision = PI;
|
|
ooe.some_characters = "JSON THIS! \"\1";
|
|
ooe.zomg_unicode = "\xd7\n\a\t";
|
|
ooe.base64 = "\1\2\3\255";
|
|
|
|
auto prot = tBinaryProtocol(buf);
|
|
auto sw = StopWatch(AutoStart.yes);
|
|
foreach (i; 0 .. ITERATIONS) {
|
|
buf.reset(120);
|
|
ooe.write(prot);
|
|
}
|
|
sw.stop();
|
|
|
|
auto msecs = sw.peek().total!"msecs";
|
|
writefln("Write: %s ms (%s kHz)", msecs, ITERATIONS / msecs);
|
|
}
|
|
|
|
auto data = buf.getContents().dup;
|
|
|
|
{
|
|
auto readBuf = tInputRangeTransport(data);
|
|
auto prot = tBinaryProtocol(readBuf);
|
|
auto ooe = OneOfEach();
|
|
|
|
auto sw = StopWatch(AutoStart.yes);
|
|
foreach (i; 0 .. ITERATIONS) {
|
|
readBuf.reset(data);
|
|
ooe.read(prot);
|
|
}
|
|
sw.stop();
|
|
|
|
auto msecs = sw.peek().total!"msecs";
|
|
writefln(" Read: %s ms (%s kHz)", msecs, ITERATIONS / msecs);
|
|
}
|
|
}
|