func BenchmarkUnmarshalByAvro(b *testing.B) { codec, err := goavro.NewCodec(avroSchema) if err != nil { panic(err) } someRecord, err := goavro.NewRecord(goavro.RecordSchema(avroSchema)) someRecord.Set("id", int32(1)) someRecord.Set("name", "Reds") colors := []string{"Crimson", "Red", "Ruby", "Maroon"} s := make([]interface{}, len(colors)) for i, v := range colors { s[i] = v } someRecord.Set("colors", s) buf := new(bytes.Buffer) err = codec.Encode(buf, someRecord) if err != nil { panic(err) } objectBytes := buf.Bytes() b.ResetTimer() for i := 0; i < b.N; i++ { _, err = codec.Decode(bytes.NewReader(objectBytes)) if err != nil { panic(err) } } }
func BenchmarkDecodeCodec(b *testing.B) { codec := testapi.Default.Codec() items := benchmarkItems() width := len(items) encoded := make([][]byte, width) for i := range items { data, err := codec.Encode(&items[i]) if err != nil { b.Fatal(err) } encoded[i] = data } b.ResetTimer() for i := 0; i < b.N; i++ { if _, err := codec.Decode(encoded[i%width]); err != nil { b.Fatal(err) } } b.StopTimer() }
// BenchmarkDecodeJSON provides a baseline for regular JSON decode performance func BenchmarkDecodeIntoJSON(b *testing.B) { codec := testapi.Default.Codec() items := benchmarkItems() width := len(items) encoded := make([][]byte, width) for i := range items { data, err := codec.Encode(&items[i]) if err != nil { b.Fatal(err) } encoded[i] = data } b.ResetTimer() for i := 0; i < b.N; i++ { obj := v1.Pod{} if err := json.Unmarshal(encoded[i%width], &obj); err != nil { b.Fatal(err) } } b.StopTimer() }