Skip to content

Commit 3104eef

Browse files
committed
don't reset before put, optimize repeated fields
1 parent b0fbdad commit 3104eef

File tree

5 files changed

+21
-72
lines changed

5 files changed

+21
-72
lines changed

tm2/pkg/amino/amino.go

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,7 @@ func (cdc *Codec) MarshalSized(o interface{}) ([]byte, error) {
220220

221221
// Write the bytes here.
222222
buf := poolBytesBuffer.Get()
223-
defer func() {
224-
buf.Reset()
225-
poolBytesBuffer.Put(buf)
226-
}()
223+
defer poolBytesBuffer.Put(buf)
227224

228225
// Write the bz without length-prefixing.
229226
bz, err := cdc.Marshal(o)
@@ -276,11 +273,7 @@ func (cdc *Codec) MarshalAnySized(o interface{}) ([]byte, error) {
276273

277274
// Write the bytes here.
278275
buf := poolBytesBuffer.Get()
279-
defer func() {
280-
buf.Reset()
281-
poolBytesBuffer.Put(buf)
282-
}()
283-
276+
defer poolBytesBuffer.Put(buf)
284277
// Write the bz without length-prefixing.
285278
bz, err := cdc.MarshalAny(o)
286279
if err != nil {
@@ -366,10 +359,7 @@ func (cdc *Codec) MarshalReflect(o interface{}) ([]byte, error) {
366359
// Encode Amino:binary bytes.
367360
var bz []byte
368361
buf := poolBytesBuffer.Get()
369-
defer func() {
370-
buf.Reset()
371-
poolBytesBuffer.Put(buf)
372-
}()
362+
defer poolBytesBuffer.Put(buf)
373363

374364
rt := rv.Type()
375365
info, err := cdc.getTypeInfoWLock(rt)
@@ -457,10 +447,7 @@ func (cdc *Codec) MarshalAny(o interface{}) ([]byte, error) {
457447

458448
// Encode as interface.
459449
buf := poolBytesBuffer.Get()
460-
defer func() {
461-
buf.Reset()
462-
poolBytesBuffer.Put(buf)
463-
}()
450+
defer poolBytesBuffer.Put(buf)
464451
err = cdc.encodeReflectBinaryInterface(buf, iinfo, reflect.ValueOf(&ivar).Elem(), FieldOptions{}, true)
465452
if err != nil {
466453
return nil, err
@@ -788,10 +775,7 @@ func (cdc *Codec) JSONMarshal(o interface{}) ([]byte, error) {
788775
}
789776
rt := rv.Type()
790777
w := poolBytesBuffer.Get()
791-
defer func() {
792-
w.Reset()
793-
poolBytesBuffer.Put(w)
794-
}()
778+
defer poolBytesBuffer.Put(w)
795779
info, err := cdc.getTypeInfoWLock(rt)
796780
if err != nil {
797781
return nil, err
@@ -831,10 +815,7 @@ func (cdc *Codec) MarshalJSONAny(o interface{}) ([]byte, error) {
831815

832816
// Encode as interface.
833817
buf := poolBytesBuffer.Get()
834-
defer func() {
835-
buf.Reset()
836-
poolBytesBuffer.Put(buf)
837-
}()
818+
defer poolBytesBuffer.Put(buf)
838819

839820
err = cdc.encodeReflectJSONInterface(buf, iinfo, reflect.ValueOf(&ivar).Elem(), FieldOptions{})
840821
if err != nil {

tm2/pkg/amino/binary_encode.go

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,7 @@ func (cdc *Codec) encodeReflectBinaryInterface(w io.Writer, iinfo *TypeInfo, rv
254254
// For Proto3 compatibility, encode interfaces as google.protobuf.Any
255255
// Write field #1, TypeURL
256256
buf := poolBytesBuffer.Get()
257-
defer func() {
258-
buf.Reset()
259-
poolBytesBuffer.Put(buf)
260-
}()
257+
defer poolBytesBuffer.Put(buf)
261258

262259
{
263260
fnum := uint32(1)
@@ -278,10 +275,7 @@ func (cdc *Codec) encodeReflectBinaryInterface(w io.Writer, iinfo *TypeInfo, rv
278275
// google.protobuf.Any values must be a struct, or an unpacked list which
279276
// is indistinguishable from a struct.
280277
buf2 := poolBytesBuffer.Get()
281-
defer func() {
282-
buf2.Reset()
283-
poolBytesBuffer.Put(buf2)
284-
}()
278+
defer poolBytesBuffer.Put(buf2)
285279

286280
if !cinfo.IsStructOrUnpacked(fopts) {
287281
writeEmpty := false
@@ -370,10 +364,7 @@ func (cdc *Codec) encodeReflectBinaryList(w io.Writer, info *TypeInfo, rv reflec
370364
// Proto3 byte-length prefixing incurs alloc cost on the encoder.
371365
// Here we incur it for unpacked form for ease of dev.
372366
buf := poolBytesBuffer.Get()
373-
defer func() {
374-
buf.Reset()
375-
poolBytesBuffer.Put(buf)
376-
}()
367+
defer poolBytesBuffer.Put(buf)
377368

378369
// If elem is not already a ByteLength type, write in packed form.
379370
// This is a Proto wart due to Proto backwards compatibility issues.
@@ -410,6 +401,9 @@ func (cdc *Codec) encodeReflectBinaryList(w io.Writer, info *TypeInfo, rv reflec
410401
einfo.Elem.ReprType.Type.Kind() != reflect.Uint8 &&
411402
einfo.Elem.ReprType.GetTyp3(fopts) != Typ3ByteLength
412403

404+
elemBuf := poolBytesBuffer.Get()
405+
defer poolBytesBuffer.Put(elemBuf)
406+
413407
// Write elems in unpacked form.
414408
for i := 0; i < rv.Len(); i++ {
415409
// Write elements as repeated fields of the parent struct.
@@ -448,28 +442,21 @@ func (cdc *Codec) encodeReflectBinaryList(w io.Writer, info *TypeInfo, rv reflec
448442
// form) are represented as lists of implicit structs.
449443
if writeImplicit {
450444
// Write field key for Value field of implicit struct.
451-
buf2 := poolBytesBuffer.Get()
452-
buf2Done := func() {
453-
buf2.Reset()
454-
poolBytesBuffer.Put(buf2)
455-
}
456445

457-
err = encodeFieldNumberAndTyp3(buf2, 1, Typ3ByteLength)
446+
err = encodeFieldNumberAndTyp3(elemBuf, 1, Typ3ByteLength)
458447
if err != nil {
459-
buf2Done()
460448
return
461449
}
462450
// Write field value of implicit struct to buf2.
463451
efopts := fopts
464452
efopts.BinFieldNum = 0 // dontcare
465-
err = cdc.encodeReflectBinary(buf2, einfo, derv, efopts, false, 0)
453+
err = cdc.encodeReflectBinary(elemBuf, einfo, derv, efopts, false, 0)
466454
if err != nil {
467-
buf2Done()
468455
return
469456
}
470457
// Write implicit struct to buf.
471-
err = EncodeByteSlice(buf, buf2.Bytes())
472-
buf2Done()
458+
err = EncodeByteSlice(buf, elemBuf.Bytes())
459+
elemBuf.Reset()
473460
if err != nil {
474461
return
475462
}
@@ -523,10 +510,7 @@ func (cdc *Codec) encodeReflectBinaryStruct(w io.Writer, info *TypeInfo, rv refl
523510
// Proto3 incurs a cost in writing non-root structs.
524511
// Here we incur it for root structs as well for ease of dev.
525512
buf := poolBytesBuffer.Get()
526-
defer func() {
527-
buf.Reset()
528-
poolBytesBuffer.Put(buf)
529-
}()
513+
defer poolBytesBuffer.Put(buf)
530514

531515
for _, field := range info.Fields {
532516
// Get type info for field.
@@ -581,15 +565,8 @@ func encodeFieldNumberAndTyp3(w io.Writer, num uint32, typ Typ3) (err error) {
581565
return
582566
}
583567

584-
type bufLike interface {
585-
io.Writer
586-
Len() int
587-
Bytes() []byte
588-
Set([]byte)
589-
}
590-
591568
func (cdc *Codec) writeFieldIfNotEmpty(
592-
buf bufLike,
569+
buf *bytebufferpool.ByteBuffer,
593570
fieldNum uint32,
594571
finfo *TypeInfo,
595572
structsFopts FieldOptions, // the wrapping struct's FieldOptions if any

tm2/pkg/amino/codec.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,7 @@ func (info *TypeInfo) String() string {
113113
return "<new TypeInfo>"
114114
}
115115
buf := poolBytesBuffer.Get()
116-
defer func() {
117-
buf.Reset()
118-
poolBytesBuffer.Put(buf)
119-
}()
116+
defer poolBytesBuffer.Put(buf)
120117

121118
buf.Write([]byte("TypeInfo{"))
122119
buf.Write([]byte(fmt.Sprintf("Type:%v,", info.Type)))

tm2/pkg/amino/json_encode.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,7 @@ func (cdc *Codec) encodeReflectJSONInterface(w io.Writer, iinfo *TypeInfo, rv re
156156

157157
// Write Value to buffer
158158
buf := poolBytesBuffer.Get()
159-
defer func() {
160-
buf.Reset()
161-
poolBytesBuffer.Put(buf)
162-
}()
159+
defer poolBytesBuffer.Put(buf)
163160

164161
cdc.encodeReflectJSON(buf, cinfo, crv, fopts)
165162
value := buf.Bytes()

tm2/pkg/amino/wellknown.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,7 @@ func encodeReflectBinaryWellKnown(w io.Writer, info *TypeInfo, rv reflect.Value,
342342
// Maybe recurse with length-prefixing.
343343
if !bare {
344344
buf := poolBytesBuffer.Get()
345-
defer func() {
346-
buf.Reset()
347-
poolBytesBuffer.Put(buf)
348-
}()
345+
defer poolBytesBuffer.Put(buf)
349346

350347
ok, err = encodeReflectBinaryWellKnown(buf, info, rv, fopts, true)
351348
if err != nil {

0 commit comments

Comments
 (0)