Skip to content

Instantly share code, notes, and snippets.

@mandarjog
Created April 26, 2018 16:27
Show Gist options
  • Save mandarjog/d9fddec3f8ea3610ce748635bc9fa9e0 to your computer and use it in GitHub Desktop.
Save mandarjog/d9fddec3f8ea3610ce748635bc9fa9e0 to your computer and use it in GitHub Desktop.
performance change
func (f fieldEncoder) Encode(bag attribute.Bag, ba []byte, noInterfaceFieldEncode bool) ([]byte, error) {
ba = append(ba, f.protoKey...)
for i := 0; i < len(f.encoder); i++ {
var err error
if !noInterfaceFieldEncode {
ba, err = f.encoder[i].Encode(bag, ba)
if err != nil {
return nil, err
}
continue
}
switch enc := f.encoder[i].(type) {
case *staticEncoder:
ba = append(ba, enc.encodedData...)
case messageEncoder:
ba, err = enc.Encode(bag, ba)
case *eEnumEncoder:
ba, err = enc.Encode(bag, ba)
case *primEvalEncoder:
ba, err = enc.Encode(bag, ba)
default:
fmt.Printf("%T: %v, %v", enc, f, enc)
ba, err = enc.Encode(bag, ba)
}
if err != nil {
return nil, err
}
}
return ba, nil
}
/// -----------------
func benchmarkDynamic(b *testing.B) {
var err error
b.StopTimer()
enc := getEncoder()
// pre-allocate slice ... same for Gogo benchmarks
ba := make([]byte, 0, 1000)
b.StartTimer()
for i := 0; i < b.N; i++ {
ba = ba[0:0]
ba, err = enc.Encode(nil, ba)
if err != nil {
b.Fatalf("failed")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment