| /** | 
 |  * 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 : 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().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().msecs; | 
 |     writefln(" Read: %s ms (%s kHz)", msecs, ITERATIONS / msecs); | 
 |   } | 
 | } |