diff --git a/benchmarks.go b/benchmarks.go index 8bbe7c1..f063fbd 100644 --- a/benchmarks.go +++ b/benchmarks.go @@ -226,6 +226,15 @@ var benchmarkCases = []BenchmarkCase{ TimeSupport: TSNoSupport, APIKind: AKCodegen, + }, { + Name: "flatbuffers/unsafe_reuse", + URL: "github.com/google/flatbuffers/go", + New: flatbuffers.NewFlatBuffersUnsafeReuseSerializer, + + TimeSupport: TSNoSupport, + APIKind: AKCodegen, + UnsafeStringUnmarshal: true, + BufferReuseMarshal: true, }, { Name: "capnproto", URL: "github.com/glycerine/go-capnproto", diff --git a/internal/serializers/flatbuffers/flatbuffers.go b/internal/serializers/flatbuffers/flatbuffers.go index 6df2bc3..9d31b16 100644 --- a/internal/serializers/flatbuffers/flatbuffers.go +++ b/internal/serializers/flatbuffers/flatbuffers.go @@ -2,19 +2,23 @@ package flatbuffers import ( "time" + "unsafe" "github.com/alecthomas/go_serialization_benchmarks/goserbench" flatbuffers "github.com/google/flatbuffers/go" ) type FlatBufferSerializer struct { - builder *flatbuffers.Builder + unsafeReuse bool + builder *flatbuffers.Builder } func (s *FlatBufferSerializer) Marshal(o interface{}) ([]byte, error) { a := o.(*goserbench.SmallStruct) builder := s.builder - builder.Bytes = nil // free + if !s.unsafeReuse { + builder.Bytes = nil // free + } builder.Reset() name := builder.CreateString(a.Name) @@ -28,16 +32,21 @@ func (s *FlatBufferSerializer) Marshal(o interface{}) ([]byte, error) { FlatBufferAAddSpouse(builder, a.Spouse) FlatBufferAAddMoney(builder, a.Money) builder.Finish(FlatBufferAEnd(builder)) - return builder.Bytes[builder.Head():], nil + return builder.FinishedBytes(), nil } func (s *FlatBufferSerializer) Unmarshal(d []byte, i interface{}) error { a := i.(*goserbench.SmallStruct) o := FlatBufferA{} o.Init(d, flatbuffers.GetUOffsetT(d)) - a.Name = string(o.Name()) + if s.unsafeReuse { + a.Name = unsafeSliceToString(o.Name()) + a.Phone = unsafeSliceToString(o.Phone()) + } else { + a.Name = string(o.Name()) + a.Phone = string(o.Phone()) + } a.BirthDay = time.Unix(0, o.BirthDay()) - a.Phone = string(o.Phone()) a.Siblings = int(o.Siblings()) a.Spouse = o.Spouse() a.Money = o.Money() @@ -45,5 +54,16 @@ func (s *FlatBufferSerializer) Unmarshal(d []byte, i interface{}) error { } func NewFlatBuffersSerializer() goserbench.Serializer { - return &FlatBufferSerializer{flatbuffers.NewBuilder(0)} + return &FlatBufferSerializer{builder: flatbuffers.NewBuilder(0), unsafeReuse: false} +} + +func NewFlatBuffersUnsafeReuseSerializer() goserbench.Serializer { + const maxSerSize = 128 + return &FlatBufferSerializer{builder: flatbuffers.NewBuilder(maxSerSize), unsafeReuse: true} +} + +// unsafeSliceToString converts a byte slice to a string in an unsafe way +// (modifications to the byte slice modify the string). +func unsafeSliceToString(b []byte) string { + return *(*string)(unsafe.Pointer(&b)) } diff --git a/report/data.js b/report/data.js index 7280c13..0b01e66 100644 --- a/report/data.js +++ b/report/data.js @@ -1,14 +1,14 @@ var data = [ { "name": "gotiny", - "marshal_iter_count": 3175519, - "unmarshal_iter_count": 7119271, - "total_iter_count": 10294790, + "marshal_iter_count": 3247654, + "unmarshal_iter_count": 7138230, + "total_iter_count": 10385884, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 381, - "unmarshal_ns_op": 164, - "total_ns_op": 545, + "marshal_ns_op": 362, + "unmarshal_ns_op": 166, + "total_ns_op": 528, "serialization_size": 47, "marshal_alloc_bytes": 168, "unmarshal_alloc_bytes": 32, @@ -23,14 +23,14 @@ var data = [ }, { "name": "msgp", - "marshal_iter_count": 8376064, - "unmarshal_iter_count": 6040916, - "total_iter_count": 14416980, + "marshal_iter_count": 8817481, + "unmarshal_iter_count": 6077943, + "total_iter_count": 14895424, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 140, - "unmarshal_ns_op": 210, - "total_ns_op": 350, + "marshal_ns_op": 134, + "unmarshal_ns_op": 200, + "total_ns_op": 334, "serialization_size": 97, "marshal_alloc_bytes": 128, "unmarshal_alloc_bytes": 32, @@ -45,14 +45,14 @@ var data = [ }, { "name": "msgpack", - "marshal_iter_count": 1258870, - "unmarshal_iter_count": 994758, - "total_iter_count": 2253628, + "marshal_iter_count": 1303186, + "unmarshal_iter_count": 982790, + "total_iter_count": 2285976, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 978, - "unmarshal_ns_op": 1232, - "total_ns_op": 2210, + "marshal_ns_op": 921, + "unmarshal_ns_op": 1216, + "total_ns_op": 2137, "serialization_size": 92, "marshal_alloc_bytes": 264, "unmarshal_alloc_bytes": 80, @@ -67,14 +67,14 @@ var data = [ }, { "name": "json", - "marshal_iter_count": 762392, - "unmarshal_iter_count": 347907, - "total_iter_count": 1110299, + "marshal_iter_count": 859290, + "unmarshal_iter_count": 345022, + "total_iter_count": 1204312, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1426, - "unmarshal_ns_op": 3496, - "total_ns_op": 4922, + "marshal_ns_op": 1407, + "unmarshal_ns_op": 3366, + "total_ns_op": 4773, "serialization_size": 151, "marshal_alloc_bytes": 208, "unmarshal_alloc_bytes": 248, @@ -89,14 +89,14 @@ var data = [ }, { "name": "jsoniter", - "marshal_iter_count": 1398093, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2398093, + "marshal_iter_count": 1442014, + "unmarshal_iter_count": 866595, + "total_iter_count": 2308609, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 863, - "unmarshal_ns_op": 1280, - "total_ns_op": 2143, + "marshal_ns_op": 837, + "unmarshal_ns_op": 1214, + "total_ns_op": 2051, "serialization_size": 141, "marshal_alloc_bytes": 200, "unmarshal_alloc_bytes": 136, @@ -111,14 +111,14 @@ var data = [ }, { "name": "easyjson", - "marshal_iter_count": 1187122, + "marshal_iter_count": 1153174, "unmarshal_iter_count": 1000000, - "total_iter_count": 2187122, + "total_iter_count": 2153174, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1028, - "unmarshal_ns_op": 1043, - "total_ns_op": 2071, + "marshal_ns_op": 1044, + "unmarshal_ns_op": 1025, + "total_ns_op": 2069, "serialization_size": 151, "marshal_alloc_bytes": 976, "unmarshal_alloc_bytes": 32, @@ -133,14 +133,14 @@ var data = [ }, { "name": "bson", - "marshal_iter_count": 1258428, - "unmarshal_iter_count": 683167, - "total_iter_count": 1941595, + "marshal_iter_count": 1293120, + "unmarshal_iter_count": 628549, + "total_iter_count": 1921669, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 960, - "unmarshal_ns_op": 1902, - "total_ns_op": 2862, + "marshal_ns_op": 934, + "unmarshal_ns_op": 1827, + "total_ns_op": 2761, "serialization_size": 110, "marshal_alloc_bytes": 376, "unmarshal_alloc_bytes": 144, @@ -155,14 +155,14 @@ var data = [ }, { "name": "mongobson", - "marshal_iter_count": 818680, - "unmarshal_iter_count": 651531, - "total_iter_count": 1470211, + "marshal_iter_count": 732868, + "unmarshal_iter_count": 622735, + "total_iter_count": 1355603, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1538, - "unmarshal_ns_op": 1821, - "total_ns_op": 3359, + "marshal_ns_op": 1515, + "unmarshal_ns_op": 1780, + "total_ns_op": 3295, "serialization_size": 110, "marshal_alloc_bytes": 240, "unmarshal_alloc_bytes": 328, @@ -177,14 +177,14 @@ var data = [ }, { "name": "gob", - "marshal_iter_count": 237766, - "unmarshal_iter_count": 49005, - "total_iter_count": 286771, + "marshal_iter_count": 221737, + "unmarshal_iter_count": 50125, + "total_iter_count": 271862, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 5248, - "unmarshal_ns_op": 24031, - "total_ns_op": 29279, + "marshal_ns_op": 5097, + "unmarshal_ns_op": 23870, + "total_ns_op": 28967, "serialization_size": 172, "marshal_alloc_bytes": 1656, "unmarshal_alloc_bytes": 7808, @@ -199,18 +199,18 @@ var data = [ }, { "name": "davecgh/xdr", - "marshal_iter_count": 796549, + "marshal_iter_count": 969937, "unmarshal_iter_count": 1000000, - "total_iter_count": 1796549, + "total_iter_count": 1969937, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1326, - "unmarshal_ns_op": 1054, - "total_ns_op": 2380, + "marshal_ns_op": 1240, + "unmarshal_ns_op": 1088, + "total_ns_op": 2328, "serialization_size": 92, "marshal_alloc_bytes": 336, - "unmarshal_alloc_bytes": 103, - "total_alloc_bytes": 439, + "unmarshal_alloc_bytes": 104, + "total_alloc_bytes": 440, "marshal_allocs": 14, "unmarshal_allocs": 4, "total_allocs": 18, @@ -221,14 +221,14 @@ var data = [ }, { "name": "ugorji/msgpack", - "marshal_iter_count": 1217157, - "unmarshal_iter_count": 867561, - "total_iter_count": 2084718, + "marshal_iter_count": 1238792, + "unmarshal_iter_count": 982131, + "total_iter_count": 2220923, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1049, - "unmarshal_ns_op": 1244, - "total_ns_op": 2293, + "marshal_ns_op": 973, + "unmarshal_ns_op": 1216, + "total_ns_op": 2189, "serialization_size": 91, "marshal_alloc_bytes": 1240, "unmarshal_alloc_bytes": 608, @@ -243,14 +243,14 @@ var data = [ }, { "name": "ugorji/binc", - "marshal_iter_count": 930873, - "unmarshal_iter_count": 1046048, - "total_iter_count": 1976921, + "marshal_iter_count": 1084963, + "unmarshal_iter_count": 1099303, + "total_iter_count": 2184266, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1102, - "unmarshal_ns_op": 1172, - "total_ns_op": 2274, + "marshal_ns_op": 1103, + "unmarshal_ns_op": 1096, + "total_ns_op": 2199, "serialization_size": 95, "marshal_alloc_bytes": 1256, "unmarshal_alloc_bytes": 672, @@ -265,14 +265,14 @@ var data = [ }, { "name": "sereal", - "marshal_iter_count": 430359, - "unmarshal_iter_count": 463070, - "total_iter_count": 893429, + "marshal_iter_count": 422546, + "unmarshal_iter_count": 476920, + "total_iter_count": 899466, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2753, - "unmarshal_ns_op": 2612, - "total_ns_op": 5365, + "marshal_ns_op": 2633, + "unmarshal_ns_op": 2463, + "total_ns_op": 5096, "serialization_size": 142, "marshal_alloc_bytes": 1104, "unmarshal_alloc_bytes": 752, @@ -287,14 +287,14 @@ var data = [ }, { "name": "alecthomas/binary", - "marshal_iter_count": 824755, - "unmarshal_iter_count": 1000000, - "total_iter_count": 1824755, + "marshal_iter_count": 859758, + "unmarshal_iter_count": 889114, + "total_iter_count": 1748872, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1439, - "unmarshal_ns_op": 1228, - "total_ns_op": 2667, + "marshal_ns_op": 1397, + "unmarshal_ns_op": 1250, + "total_ns_op": 2647, "serialization_size": 61, "marshal_alloc_bytes": 264, "unmarshal_alloc_bytes": 176, @@ -309,14 +309,14 @@ var data = [ }, { "name": "flatbuffers", - "marshal_iter_count": 1582918, - "unmarshal_iter_count": 7569368, - "total_iter_count": 9152286, + "marshal_iter_count": 1636479, + "unmarshal_iter_count": 7762726, + "total_iter_count": 9399205, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 770, - "unmarshal_ns_op": 159, - "total_ns_op": 929, + "marshal_ns_op": 730, + "unmarshal_ns_op": 153, + "total_ns_op": 883, "serialization_size": 95, "marshal_alloc_bytes": 376, "unmarshal_alloc_bytes": 32, @@ -329,16 +329,38 @@ var data = [ "url": "github.com/google/flatbuffers/go", "notes": "" }, + { + "name": "flatbuffers/unsafe_reuse", + "marshal_iter_count": 4900250, + "unmarshal_iter_count": 12540393, + "total_iter_count": 17440643, + "unsafe_string_unmarshal": true, + "buffer_reuse_marshal": true, + "marshal_ns_op": 246, + "unmarshal_ns_op": 98, + "total_ns_op": 344, + "serialization_size": 95, + "marshal_alloc_bytes": 0, + "unmarshal_alloc_bytes": 0, + "total_alloc_bytes": 0, + "marshal_allocs": 0, + "unmarshal_allocs": 0, + "total_allocs": 0, + "time_support": "no", + "api_kind": "codegen", + "url": "github.com/google/flatbuffers/go", + "notes": "" + }, { "name": "capnproto", - "marshal_iter_count": 517026, - "unmarshal_iter_count": 3242523, - "total_iter_count": 3759549, + "marshal_iter_count": 545534, + "unmarshal_iter_count": 3282273, + "total_iter_count": 3827807, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2177, - "unmarshal_ns_op": 370, - "total_ns_op": 2547, + "marshal_ns_op": 2181, + "unmarshal_ns_op": 364, + "total_ns_op": 2545, "serialization_size": 96, "marshal_alloc_bytes": 4392, "unmarshal_alloc_bytes": 112, @@ -358,13 +380,13 @@ var data = [ "total_iter_count": 2000000, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1420, - "unmarshal_ns_op": 1255, - "total_ns_op": 2675, + "marshal_ns_op": 1254, + "unmarshal_ns_op": 1336, + "total_ns_op": 2590, "serialization_size": 85, "marshal_alloc_bytes": 412, - "unmarshal_alloc_bytes": 224, - "total_alloc_bytes": 636, + "unmarshal_alloc_bytes": 223, + "total_alloc_bytes": 635, "marshal_allocs": 8, "unmarshal_allocs": 9, "total_allocs": 17, @@ -375,14 +397,14 @@ var data = [ }, { "name": "hprose2", - "marshal_iter_count": 2799258, - "unmarshal_iter_count": 2651095, - "total_iter_count": 5450353, + "marshal_iter_count": 2998497, + "unmarshal_iter_count": 2689975, + "total_iter_count": 5688472, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 437, - "unmarshal_ns_op": 457, - "total_ns_op": 894, + "marshal_ns_op": 402, + "unmarshal_ns_op": 444, + "total_ns_op": 846, "serialization_size": 85, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 56, @@ -397,14 +419,14 @@ var data = [ }, { "name": "dedis/protobuf", - "marshal_iter_count": 1838618, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2838618, + "marshal_iter_count": 1829186, + "unmarshal_iter_count": 1339342, + "total_iter_count": 3168528, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 747, - "unmarshal_ns_op": 1088, - "total_ns_op": 1835, + "marshal_ns_op": 755, + "unmarshal_ns_op": 903, + "total_ns_op": 1658, "serialization_size": 52, "marshal_alloc_bytes": 144, "unmarshal_alloc_bytes": 104, @@ -419,14 +441,14 @@ var data = [ }, { "name": "pulsar", - "marshal_iter_count": 2298661, - "unmarshal_iter_count": 2467683, - "total_iter_count": 4766344, + "marshal_iter_count": 2303378, + "unmarshal_iter_count": 2449497, + "total_iter_count": 4752875, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 532, - "unmarshal_ns_op": 493, - "total_ns_op": 1025, + "marshal_ns_op": 525, + "unmarshal_ns_op": 484, + "total_ns_op": 1009, "serialization_size": 51, "marshal_alloc_bytes": 304, "unmarshal_alloc_bytes": 160, @@ -441,14 +463,14 @@ var data = [ }, { "name": "protobuf-go", - "marshal_iter_count": 4126407, - "unmarshal_iter_count": 2989768, - "total_iter_count": 7116175, + "marshal_iter_count": 4199473, + "unmarshal_iter_count": 3368353, + "total_iter_count": 7567826, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 312, - "unmarshal_ns_op": 387, - "total_ns_op": 699, + "marshal_ns_op": 287, + "unmarshal_ns_op": 356, + "total_ns_op": 643, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -463,14 +485,14 @@ var data = [ }, { "name": "gogo/protobuf", - "marshal_iter_count": 10072735, - "unmarshal_iter_count": 7491723, - "total_iter_count": 17564458, + "marshal_iter_count": 10420051, + "unmarshal_iter_count": 7253460, + "total_iter_count": 17673511, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 120, - "unmarshal_ns_op": 155, - "total_ns_op": 275, + "marshal_ns_op": 115, + "unmarshal_ns_op": 166, + "total_ns_op": 281, "serialization_size": 53, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -485,18 +507,18 @@ var data = [ }, { "name": "gogo/jsonpb", - "marshal_iter_count": 106680, - "unmarshal_iter_count": 78124, - "total_iter_count": 184804, + "marshal_iter_count": 105903, + "unmarshal_iter_count": 82950, + "total_iter_count": 188853, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 11312, - "unmarshal_ns_op": 15086, - "total_ns_op": 26398, + "marshal_ns_op": 11285, + "unmarshal_ns_op": 14812, + "total_ns_op": 26097, "serialization_size": 125, "marshal_alloc_bytes": 2659, - "unmarshal_alloc_bytes": 3056, - "total_alloc_bytes": 5715, + "unmarshal_alloc_bytes": 3061, + "total_alloc_bytes": 5720, "marshal_allocs": 68, "unmarshal_allocs": 43, "total_allocs": 111, @@ -507,14 +529,14 @@ var data = [ }, { "name": "colfer", - "marshal_iter_count": 10562342, - "unmarshal_iter_count": 9412471, - "total_iter_count": 19974813, + "marshal_iter_count": 10260195, + "unmarshal_iter_count": 9852162, + "total_iter_count": 20112357, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 113, - "unmarshal_ns_op": 124, - "total_ns_op": 237, + "marshal_ns_op": 115, + "unmarshal_ns_op": 123, + "total_ns_op": 238, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -529,14 +551,14 @@ var data = [ }, { "name": "gencode", - "marshal_iter_count": 10152963, - "unmarshal_iter_count": 10438854, - "total_iter_count": 20591817, + "marshal_iter_count": 9332352, + "unmarshal_iter_count": 9154633, + "total_iter_count": 18486985, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 126, - "unmarshal_ns_op": 112, - "total_ns_op": 238, + "marshal_ns_op": 122, + "unmarshal_ns_op": 132, + "total_ns_op": 254, "serialization_size": 53, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -551,14 +573,14 @@ var data = [ }, { "name": "gencode/unsafe_reuse", - "marshal_iter_count": 25223767, - "unmarshal_iter_count": 11929041, - "total_iter_count": 37152808, + "marshal_iter_count": 26959874, + "unmarshal_iter_count": 11509878, + "total_iter_count": 38469752, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 50, + "marshal_ns_op": 48, "unmarshal_ns_op": 104, - "total_ns_op": 154, + "total_ns_op": 152, "serialization_size": 46, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -573,14 +595,14 @@ var data = [ }, { "name": "calmh/xdr", - "marshal_iter_count": 7713487, - "unmarshal_iter_count": 9558763, - "total_iter_count": 17272250, + "marshal_iter_count": 7797838, + "unmarshal_iter_count": 8899627, + "total_iter_count": 16697465, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 157, - "unmarshal_ns_op": 124, - "total_ns_op": 281, + "marshal_ns_op": 151, + "unmarshal_ns_op": 136, + "total_ns_op": 287, "serialization_size": 60, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -595,14 +617,14 @@ var data = [ }, { "name": "goavro", - "marshal_iter_count": 567969, - "unmarshal_iter_count": 238359, - "total_iter_count": 806328, + "marshal_iter_count": 589597, + "unmarshal_iter_count": 241372, + "total_iter_count": 830969, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1910, - "unmarshal_ns_op": 5012, - "total_ns_op": 6922, + "marshal_ns_op": 1884, + "unmarshal_ns_op": 5003, + "total_ns_op": 6887, "serialization_size": 47, "marshal_alloc_bytes": 584, "unmarshal_alloc_bytes": 2232, @@ -617,14 +639,14 @@ var data = [ }, { "name": "avro2/text", - "marshal_iter_count": 374695, - "unmarshal_iter_count": 425136, - "total_iter_count": 799831, + "marshal_iter_count": 369188, + "unmarshal_iter_count": 412360, + "total_iter_count": 781548, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3122, - "unmarshal_ns_op": 2955, - "total_ns_op": 6077, + "marshal_ns_op": 3131, + "unmarshal_ns_op": 2908, + "total_ns_op": 6039, "serialization_size": 133, "marshal_alloc_bytes": 1320, "unmarshal_alloc_bytes": 656, @@ -639,14 +661,14 @@ var data = [ }, { "name": "avro2/binary", - "marshal_iter_count": 1317032, - "unmarshal_iter_count": 1316748, - "total_iter_count": 2633780, + "marshal_iter_count": 1363780, + "unmarshal_iter_count": 1329542, + "total_iter_count": 2693322, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 904, - "unmarshal_ns_op": 912, - "total_ns_op": 1816, + "marshal_ns_op": 886, + "unmarshal_ns_op": 901, + "total_ns_op": 1787, "serialization_size": 47, "marshal_alloc_bytes": 464, "unmarshal_alloc_bytes": 464, @@ -661,14 +683,14 @@ var data = [ }, { "name": "ikea", - "marshal_iter_count": 1992028, - "unmarshal_iter_count": 1681767, - "total_iter_count": 3673795, + "marshal_iter_count": 2026972, + "unmarshal_iter_count": 1794320, + "total_iter_count": 3821292, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 601, - "unmarshal_ns_op": 719, - "total_ns_op": 1320, + "marshal_ns_op": 590, + "unmarshal_ns_op": 674, + "total_ns_op": 1264, "serialization_size": 55, "marshal_alloc_bytes": 72, "unmarshal_alloc_bytes": 96, @@ -683,14 +705,14 @@ var data = [ }, { "name": "shamaton/msgpack/map", - "marshal_iter_count": 1760298, - "unmarshal_iter_count": 1834942, - "total_iter_count": 3595240, + "marshal_iter_count": 1805672, + "unmarshal_iter_count": 1902604, + "total_iter_count": 3708276, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 689, - "unmarshal_ns_op": 653, - "total_ns_op": 1342, + "marshal_ns_op": 671, + "unmarshal_ns_op": 635, + "total_ns_op": 1306, "serialization_size": 92, "marshal_alloc_bytes": 192, "unmarshal_alloc_bytes": 88, @@ -705,14 +727,14 @@ var data = [ }, { "name": "shamaton/msgpack/array", - "marshal_iter_count": 2012157, - "unmarshal_iter_count": 2475640, - "total_iter_count": 4487797, + "marshal_iter_count": 2034438, + "unmarshal_iter_count": 2490765, + "total_iter_count": 4525203, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 591, - "unmarshal_ns_op": 482, - "total_ns_op": 1073, + "marshal_ns_op": 582, + "unmarshal_ns_op": 476, + "total_ns_op": 1058, "serialization_size": 50, "marshal_alloc_bytes": 160, "unmarshal_alloc_bytes": 88, @@ -727,14 +749,14 @@ var data = [ }, { "name": "shamaton/msgpackgen/map", - "marshal_iter_count": 4913571, - "unmarshal_iter_count": 3199938, - "total_iter_count": 8113509, + "marshal_iter_count": 4848866, + "unmarshal_iter_count": 3311181, + "total_iter_count": 8160047, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 241, - "unmarshal_ns_op": 377, - "total_ns_op": 618, + "marshal_ns_op": 242, + "unmarshal_ns_op": 358, + "total_ns_op": 600, "serialization_size": 92, "marshal_alloc_bytes": 176, "unmarshal_alloc_bytes": 112, @@ -749,14 +771,14 @@ var data = [ }, { "name": "shamaton/msgpackgen/array", - "marshal_iter_count": 5879554, - "unmarshal_iter_count": 5531976, - "total_iter_count": 11411530, + "marshal_iter_count": 5254903, + "unmarshal_iter_count": 5518424, + "total_iter_count": 10773327, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 202, - "unmarshal_ns_op": 217, - "total_ns_op": 419, + "marshal_ns_op": 208, + "unmarshal_ns_op": 216, + "total_ns_op": 424, "serialization_size": 50, "marshal_alloc_bytes": 144, "unmarshal_alloc_bytes": 112, @@ -771,14 +793,14 @@ var data = [ }, { "name": "ssz", - "marshal_iter_count": 367242, - "unmarshal_iter_count": 632128, - "total_iter_count": 999370, + "marshal_iter_count": 388062, + "unmarshal_iter_count": 657604, + "total_iter_count": 1045666, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3236, - "unmarshal_ns_op": 1996, - "total_ns_op": 5232, + "marshal_ns_op": 3160, + "unmarshal_ns_op": 1939, + "total_ns_op": 5099, "serialization_size": 55, "marshal_alloc_bytes": 104, "unmarshal_alloc_bytes": 88, @@ -793,14 +815,14 @@ var data = [ }, { "name": "200sc/bebop", - "marshal_iter_count": 12459994, - "unmarshal_iter_count": 10978929, - "total_iter_count": 23438923, + "marshal_iter_count": 12360867, + "unmarshal_iter_count": 10785926, + "total_iter_count": 23146793, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 93, - "unmarshal_ns_op": 110, - "total_ns_op": 203, + "marshal_ns_op": 94, + "unmarshal_ns_op": 112, + "total_ns_op": 206, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -815,14 +837,14 @@ var data = [ }, { "name": "200sc/bebop/reuse", - "marshal_iter_count": 24077684, - "unmarshal_iter_count": 10814379, - "total_iter_count": 34892063, + "marshal_iter_count": 23594652, + "unmarshal_iter_count": 10686052, + "total_iter_count": 34280704, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 50, - "unmarshal_ns_op": 111, - "total_ns_op": 161, + "marshal_ns_op": 52, + "unmarshal_ns_op": 110, + "total_ns_op": 162, "serialization_size": 55, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -837,14 +859,14 @@ var data = [ }, { "name": "wellquite/bebop", - "marshal_iter_count": 12306654, - "unmarshal_iter_count": 10569010, - "total_iter_count": 22875664, + "marshal_iter_count": 12384184, + "unmarshal_iter_count": 9892989, + "total_iter_count": 22277173, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 96, - "unmarshal_ns_op": 115, - "total_ns_op": 211, + "marshal_ns_op": 95, + "unmarshal_ns_op": 118, + "total_ns_op": 213, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -859,14 +881,14 @@ var data = [ }, { "name": "wellquite/bebop/reuse", - "marshal_iter_count": 22272747, - "unmarshal_iter_count": 10649991, - "total_iter_count": 32922738, + "marshal_iter_count": 24528868, + "unmarshal_iter_count": 10210911, + "total_iter_count": 34739779, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 56, - "unmarshal_ns_op": 114, - "total_ns_op": 170, + "marshal_ns_op": 50, + "unmarshal_ns_op": 116, + "total_ns_op": 166, "serialization_size": 55, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -881,14 +903,14 @@ var data = [ }, { "name": "fastjson", - "marshal_iter_count": 633622, - "unmarshal_iter_count": 577780, - "total_iter_count": 1211402, + "marshal_iter_count": 500336, + "unmarshal_iter_count": 544534, + "total_iter_count": 1044870, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1884, - "unmarshal_ns_op": 1959, - "total_ns_op": 3843, + "marshal_ns_op": 2000, + "unmarshal_ns_op": 2056, + "total_ns_op": 4056, "serialization_size": 133, "marshal_alloc_bytes": 1864, "unmarshal_alloc_bytes": 1800, @@ -903,14 +925,14 @@ var data = [ }, { "name": "fastjson/reuse", - "marshal_iter_count": 692350, - "unmarshal_iter_count": 580002, - "total_iter_count": 1272352, + "marshal_iter_count": 664064, + "unmarshal_iter_count": 500023, + "total_iter_count": 1164087, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 1456, - "unmarshal_ns_op": 1919, - "total_ns_op": 3375, + "marshal_ns_op": 1529, + "unmarshal_ns_op": 2061, + "total_ns_op": 3590, "serialization_size": 133, "marshal_alloc_bytes": 1360, "unmarshal_alloc_bytes": 1800, @@ -925,14 +947,14 @@ var data = [ }, { "name": "benc", - "marshal_iter_count": 15463422, - "unmarshal_iter_count": 10768898, - "total_iter_count": 26232320, + "marshal_iter_count": 14006010, + "unmarshal_iter_count": 11368335, + "total_iter_count": 25374345, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 77, - "unmarshal_ns_op": 113, - "total_ns_op": 190, + "marshal_ns_op": 81, + "unmarshal_ns_op": 103, + "total_ns_op": 184, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -947,14 +969,14 @@ var data = [ }, { "name": "benc/usafe", - "marshal_iter_count": 14989750, - "unmarshal_iter_count": 31691316, - "total_iter_count": 46681066, + "marshal_iter_count": 14015796, + "unmarshal_iter_count": 30669090, + "total_iter_count": 44684886, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": false, - "marshal_ns_op": 76, + "marshal_ns_op": 80, "unmarshal_ns_op": 41, - "total_ns_op": 117, + "total_ns_op": 121, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 0, @@ -969,14 +991,14 @@ var data = [ }, { "name": "mus", - "marshal_iter_count": 13045105, - "unmarshal_iter_count": 10412770, - "total_iter_count": 23457875, + "marshal_iter_count": 12620026, + "unmarshal_iter_count": 9325752, + "total_iter_count": 21945778, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 90, - "unmarshal_ns_op": 114, - "total_ns_op": 204, + "marshal_ns_op": 92, + "unmarshal_ns_op": 122, + "total_ns_op": 214, "serialization_size": 49, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -991,14 +1013,14 @@ var data = [ }, { "name": "mus/unsafe_reuse", - "marshal_iter_count": 24070401, - "unmarshal_iter_count": 27342328, - "total_iter_count": 51412729, + "marshal_iter_count": 24823722, + "unmarshal_iter_count": 21048848, + "total_iter_count": 45872570, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, "marshal_ns_op": 50, - "unmarshal_ns_op": 45, - "total_ns_op": 95, + "unmarshal_ns_op": 55, + "total_ns_op": 105, "serialization_size": 49, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 0, @@ -1013,14 +1035,14 @@ var data = [ }, { "name": "idr", - "marshal_iter_count": 11869149, - "unmarshal_iter_count": 9961321, - "total_iter_count": 21830470, + "marshal_iter_count": 11318032, + "unmarshal_iter_count": 10044177, + "total_iter_count": 21362209, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 102, + "marshal_ns_op": 103, "unmarshal_ns_op": 120, - "total_ns_op": 222, + "total_ns_op": 223, "serialization_size": 54, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -1035,14 +1057,14 @@ var data = [ }, { "name": "idr/reuse", - "marshal_iter_count": 21913352, - "unmarshal_iter_count": 10403799, - "total_iter_count": 32317151, + "marshal_iter_count": 18786597, + "unmarshal_iter_count": 9917632, + "total_iter_count": 28704229, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 59, - "unmarshal_ns_op": 115, - "total_ns_op": 174, + "marshal_ns_op": 62, + "unmarshal_ns_op": 121, + "total_ns_op": 183, "serialization_size": 54, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -1057,14 +1079,14 @@ var data = [ }, { "name": "baseline", - "marshal_iter_count": 17343483, - "unmarshal_iter_count": 13938565, - "total_iter_count": 31282048, + "marshal_iter_count": 16006568, + "unmarshal_iter_count": 13342214, + "total_iter_count": 29348782, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 67, - "unmarshal_ns_op": 87, - "total_ns_op": 154, + "marshal_ns_op": 73, + "unmarshal_ns_op": 90, + "total_ns_op": 163, "serialization_size": 47, "marshal_alloc_bytes": 48, "unmarshal_alloc_bytes": 32, @@ -1079,14 +1101,14 @@ var data = [ }, { "name": "baseline/unsafe_reuse", - "marshal_iter_count": 31379840, - "unmarshal_iter_count": 45053542, - "total_iter_count": 76433382, + "marshal_iter_count": 31205463, + "unmarshal_iter_count": 40459213, + "total_iter_count": 71664676, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 40, - "unmarshal_ns_op": 29, - "total_ns_op": 69, + "marshal_ns_op": 39, + "unmarshal_ns_op": 31, + "total_ns_op": 70, "serialization_size": 47, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 0, @@ -1101,14 +1123,14 @@ var data = [ }, { "name": "baseline_rw", - "marshal_iter_count": 6461864, - "unmarshal_iter_count": 7061074, - "total_iter_count": 13522938, + "marshal_iter_count": 6351998, + "unmarshal_iter_count": 6965425, + "total_iter_count": 13317423, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 186, - "unmarshal_ns_op": 173, - "total_ns_op": 359, + "marshal_ns_op": 183, + "unmarshal_ns_op": 171, + "total_ns_op": 354, "serialization_size": 47, "marshal_alloc_bytes": 80, "unmarshal_alloc_bytes": 32, @@ -1123,14 +1145,14 @@ var data = [ }, { "name": "baseline_rw/unsafe_reuse", - "marshal_iter_count": 15588740, - "unmarshal_iter_count": 12835321, - "total_iter_count": 28424061, + "marshal_iter_count": 15356613, + "unmarshal_iter_count": 11561896, + "total_iter_count": 26918509, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 81, - "unmarshal_ns_op": 93, - "total_ns_op": 174, + "marshal_ns_op": 82, + "unmarshal_ns_op": 104, + "total_ns_op": 186, "serialization_size": 47, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 0, @@ -1145,14 +1167,14 @@ var data = [ }, { "name": "fastape", - "marshal_iter_count": 11391241, - "unmarshal_iter_count": 24292452, - "total_iter_count": 35683693, + "marshal_iter_count": 10802157, + "unmarshal_iter_count": 22194049, + "total_iter_count": 32996206, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": false, - "marshal_ns_op": 104, - "unmarshal_ns_op": 51, - "total_ns_op": 155, + "marshal_ns_op": 107, + "unmarshal_ns_op": 57, + "total_ns_op": 164, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 0,