github.com/Finschia/finschia-sdk@v0.48.1/codec/unknownproto/benchmarks_test.go (about)

     1  package unknownproto_test
     2  
     3  import (
     4  	"sync"
     5  	"testing"
     6  
     7  	"github.com/gogo/protobuf/proto"
     8  
     9  	"github.com/Finschia/finschia-sdk/codec/unknownproto"
    10  	"github.com/Finschia/finschia-sdk/testutil/testdata"
    11  )
    12  
    13  var n1BBlob []byte
    14  
    15  func init() {
    16  	n1B := &testdata.Nested1B{
    17  		Id:  1,
    18  		Age: 99,
    19  		Nested: &testdata.Nested2B{
    20  			Id:    2,
    21  			Route: "Wintery route",
    22  			Fee:   99,
    23  			Nested: &testdata.Nested3B{
    24  				Id:   3,
    25  				Name: "3A this one that one there those oens",
    26  				Age:  4588,
    27  				B4: []*testdata.Nested4B{
    28  					{
    29  						Id:   4,
    30  						Age:  88,
    31  						Name: "Nested4B",
    32  					},
    33  				},
    34  			},
    35  		},
    36  	}
    37  
    38  	var err error
    39  	n1BBlob, err = proto.Marshal(n1B)
    40  	if err != nil {
    41  		panic(err)
    42  	}
    43  }
    44  
    45  func BenchmarkRejectUnknownFields_serial(b *testing.B) {
    46  	benchmarkRejectUnknownFields(b, false)
    47  }
    48  
    49  func BenchmarkRejectUnknownFields_parallel(b *testing.B) {
    50  	benchmarkRejectUnknownFields(b, true)
    51  }
    52  
    53  func benchmarkRejectUnknownFields(b *testing.B, parallel bool) {
    54  	b.ReportAllocs()
    55  
    56  	if !parallel {
    57  		b.ResetTimer()
    58  		for i := 0; i < b.N; i++ {
    59  			n1A := new(testdata.Nested1A)
    60  			if err := unknownproto.RejectUnknownFieldsStrict(n1BBlob, n1A, unknownproto.DefaultAnyResolver{}); err == nil {
    61  				b.Fatal("expected an error")
    62  			}
    63  			b.SetBytes(int64(len(n1BBlob)))
    64  		}
    65  	} else {
    66  		var mu sync.Mutex
    67  		b.ResetTimer()
    68  		b.RunParallel(func(pb *testing.PB) {
    69  			for pb.Next() {
    70  				// To simulate the conditions of multiple transactions being processed in parallel.
    71  				n1A := new(testdata.Nested1A)
    72  				if err := unknownproto.RejectUnknownFieldsStrict(n1BBlob, n1A, unknownproto.DefaultAnyResolver{}); err == nil {
    73  					b.Fatal("expected an error")
    74  				}
    75  				mu.Lock()
    76  				b.SetBytes(int64(len(n1BBlob)))
    77  				mu.Unlock()
    78  			}
    79  		})
    80  	}
    81  }
    82  
    83  func BenchmarkProtoUnmarshal_serial(b *testing.B) {
    84  	benchmarkProtoUnmarshal(b, false)
    85  }
    86  
    87  func BenchmarkProtoUnmarshal_parallel(b *testing.B) {
    88  	benchmarkProtoUnmarshal(b, true)
    89  }
    90  
    91  func benchmarkProtoUnmarshal(b *testing.B, parallel bool) {
    92  	b.ReportAllocs()
    93  
    94  	if !parallel {
    95  		for i := 0; i < b.N; i++ {
    96  			n1A := new(testdata.Nested1A)
    97  			if err := proto.Unmarshal(n1BBlob, n1A); err == nil {
    98  				b.Fatal("expected an error")
    99  			}
   100  			b.SetBytes(int64(len(n1BBlob)))
   101  		}
   102  	} else {
   103  		var mu sync.Mutex
   104  		b.RunParallel(func(pb *testing.PB) {
   105  			for pb.Next() {
   106  				n1A := new(testdata.Nested1A)
   107  				if err := proto.Unmarshal(n1BBlob, n1A); err == nil {
   108  					b.Fatal("expected an error")
   109  				}
   110  				mu.Lock()
   111  				b.SetBytes(int64(len(n1BBlob)))
   112  				mu.Unlock()
   113  			}
   114  		})
   115  	}
   116  }