codec_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. // +build use_codec
  2. package benchmark
  3. import (
  4. "testing"
  5. "github.com/ugorji/go/codec"
  6. )
  7. func BenchmarkCodec_Unmarshal_M(b *testing.B) {
  8. var h codec.Handle = new(codec.JsonHandle)
  9. dec := codec.NewDecoderBytes(nil, h)
  10. b.SetBytes(int64(len(largeStructText)))
  11. for i := 0; i < b.N; i++ {
  12. var s LargeStruct
  13. dec.ResetBytes(largeStructText)
  14. if err := dec.Decode(&s); err != nil {
  15. b.Error(err)
  16. }
  17. }
  18. }
  19. func BenchmarkCodec_Unmarshal_S(b *testing.B) {
  20. var h codec.Handle = new(codec.JsonHandle)
  21. dec := codec.NewDecoderBytes(nil, h)
  22. b.SetBytes(int64(len(smallStructText)))
  23. for i := 0; i < b.N; i++ {
  24. var s LargeStruct
  25. dec.ResetBytes(smallStructText)
  26. if err := dec.Decode(&s); err != nil {
  27. b.Error(err)
  28. }
  29. }
  30. }
  31. func BenchmarkCodec_Marshal_S(b *testing.B) {
  32. var h codec.Handle = new(codec.JsonHandle)
  33. var out []byte
  34. enc := codec.NewEncoderBytes(&out, h)
  35. var l int64
  36. for i := 0; i < b.N; i++ {
  37. enc.ResetBytes(&out)
  38. if err := enc.Encode(&smallStructData); err != nil {
  39. b.Error(err)
  40. }
  41. l = int64(len(out))
  42. out = nil
  43. }
  44. b.SetBytes(l)
  45. }
  46. func BenchmarkCodec_Marshal_M(b *testing.B) {
  47. var h codec.Handle = new(codec.JsonHandle)
  48. var out []byte
  49. enc := codec.NewEncoderBytes(&out, h)
  50. var l int64
  51. for i := 0; i < b.N; i++ {
  52. enc.ResetBytes(&out)
  53. if err := enc.Encode(&largeStructData); err != nil {
  54. b.Error(err)
  55. }
  56. l = int64(len(out))
  57. out = nil
  58. }
  59. b.SetBytes(l)
  60. }
  61. func BenchmarkCodec_Marshal_L(b *testing.B) {
  62. var h codec.Handle = new(codec.JsonHandle)
  63. var out []byte
  64. enc := codec.NewEncoderBytes(&out, h)
  65. var l int64
  66. for i := 0; i < b.N; i++ {
  67. enc.ResetBytes(&out)
  68. if err := enc.Encode(&xlStructData); err != nil {
  69. b.Error(err)
  70. }
  71. l = int64(len(out))
  72. out = nil
  73. }
  74. b.SetBytes(l)
  75. }
  76. func BenchmarkCodec_Marshal_S_Reuse(b *testing.B) {
  77. var h codec.Handle = new(codec.JsonHandle)
  78. var out []byte
  79. enc := codec.NewEncoderBytes(&out, h)
  80. var l int64
  81. for i := 0; i < b.N; i++ {
  82. enc.ResetBytes(&out)
  83. if err := enc.Encode(&smallStructData); err != nil {
  84. b.Error(err)
  85. }
  86. l = int64(len(out))
  87. out = out[:0]
  88. }
  89. b.SetBytes(l)
  90. }
  91. func BenchmarkCodec_Marshal_M_Reuse(b *testing.B) {
  92. var h codec.Handle = new(codec.JsonHandle)
  93. var out []byte
  94. enc := codec.NewEncoderBytes(&out, h)
  95. var l int64
  96. for i := 0; i < b.N; i++ {
  97. enc.ResetBytes(&out)
  98. if err := enc.Encode(&largeStructData); err != nil {
  99. b.Error(err)
  100. }
  101. l = int64(len(out))
  102. out = out[:0]
  103. }
  104. b.SetBytes(l)
  105. }
  106. func BenchmarkCodec_Marshal_L_Reuse(b *testing.B) {
  107. var h codec.Handle = new(codec.JsonHandle)
  108. var out []byte
  109. enc := codec.NewEncoderBytes(&out, h)
  110. var l int64
  111. for i := 0; i < b.N; i++ {
  112. enc.ResetBytes(&out)
  113. if err := enc.Encode(&xlStructData); err != nil {
  114. b.Error(err)
  115. }
  116. l = int64(len(out))
  117. out = out[:0]
  118. }
  119. b.SetBytes(l)
  120. }
  121. func BenchmarkCodec_Marshal_S_Parallel(b *testing.B) {
  122. var l int64
  123. b.RunParallel(func(pb *testing.PB) {
  124. var out []byte
  125. var h codec.Handle = new(codec.JsonHandle)
  126. enc := codec.NewEncoderBytes(&out, h)
  127. for pb.Next() {
  128. enc.ResetBytes(&out)
  129. if err := enc.Encode(&smallStructData); err != nil {
  130. b.Error(err)
  131. }
  132. l = int64(len(out))
  133. out = nil
  134. }
  135. })
  136. b.SetBytes(l)
  137. }
  138. func BenchmarkCodec_Marshal_M_Parallel(b *testing.B) {
  139. var l int64
  140. b.RunParallel(func(pb *testing.PB) {
  141. var h codec.Handle = new(codec.JsonHandle)
  142. var out []byte
  143. enc := codec.NewEncoderBytes(&out, h)
  144. for pb.Next() {
  145. enc.ResetBytes(&out)
  146. if err := enc.Encode(&largeStructData); err != nil {
  147. b.Error(err)
  148. }
  149. l = int64(len(out))
  150. out = nil
  151. }
  152. })
  153. b.SetBytes(l)
  154. }
  155. func BenchmarkCodec_Marshal_L_Parallel(b *testing.B) {
  156. var l int64
  157. b.RunParallel(func(pb *testing.PB) {
  158. var h codec.Handle = new(codec.JsonHandle)
  159. var out []byte
  160. enc := codec.NewEncoderBytes(&out, h)
  161. for pb.Next() {
  162. enc.ResetBytes(&out)
  163. if err := enc.Encode(&xlStructData); err != nil {
  164. b.Error(err)
  165. }
  166. l = int64(len(out))
  167. out = nil
  168. }
  169. })
  170. b.SetBytes(l)
  171. }
  172. func BenchmarkCodec_Marshal_S_Parallel_Reuse(b *testing.B) {
  173. var l int64
  174. b.RunParallel(func(pb *testing.PB) {
  175. var out []byte
  176. var h codec.Handle = new(codec.JsonHandle)
  177. enc := codec.NewEncoderBytes(&out, h)
  178. for pb.Next() {
  179. enc.ResetBytes(&out)
  180. if err := enc.Encode(&smallStructData); err != nil {
  181. b.Error(err)
  182. }
  183. l = int64(len(out))
  184. out = out[:0]
  185. }
  186. })
  187. b.SetBytes(l)
  188. }
  189. func BenchmarkCodec_Marshal_M_Parallel_Reuse(b *testing.B) {
  190. var l int64
  191. b.RunParallel(func(pb *testing.PB) {
  192. var h codec.Handle = new(codec.JsonHandle)
  193. var out []byte
  194. enc := codec.NewEncoderBytes(&out, h)
  195. for pb.Next() {
  196. enc.ResetBytes(&out)
  197. if err := enc.Encode(&largeStructData); err != nil {
  198. b.Error(err)
  199. }
  200. l = int64(len(out))
  201. out = out[:0]
  202. }
  203. })
  204. b.SetBytes(l)
  205. }
  206. func BenchmarkCodec_Marshal_L_Parallel_Reuse(b *testing.B) {
  207. var l int64
  208. b.RunParallel(func(pb *testing.PB) {
  209. var h codec.Handle = new(codec.JsonHandle)
  210. var out []byte
  211. enc := codec.NewEncoderBytes(&out, h)
  212. for pb.Next() {
  213. enc.ResetBytes(&out)
  214. if err := enc.Encode(&xlStructData); err != nil {
  215. b.Error(err)
  216. }
  217. l = int64(len(out))
  218. out = out[:0]
  219. }
  220. })
  221. b.SetBytes(l)
  222. }