| 379 | } |
| 380 | |
| 381 | func benchmarkCompression(b *testing.B, codec pkg.Codec, buf *bytes.Buffer, payload []byte) float64 { |
| 382 | // In case only the decompression benchmark are run, we use this flags to |
| 383 | // detect whether we have to compress the payload before the decompression |
| 384 | // benchmarks. |
| 385 | compressed := false |
| 386 | |
| 387 | b.Run("compress", func(b *testing.B) { |
| 388 | compressed = true |
| 389 | r := bytes.NewReader(payload) |
| 390 | b.ReportAllocs() |
| 391 | |
| 392 | for i := 0; i < b.N; i++ { |
| 393 | buf.Reset() |
| 394 | r.Reset(payload) |
| 395 | w := codec.NewWriter(buf) |
| 396 | |
| 397 | _, err := io.Copy(w, r) |
| 398 | if err != nil { |
| 399 | b.Fatal(err) |
| 400 | } |
| 401 | if err := w.Close(); err != nil { |
| 402 | b.Fatal(err) |
| 403 | } |
| 404 | } |
| 405 | |
| 406 | b.SetBytes(int64(buf.Len())) |
| 407 | }) |
| 408 | |
| 409 | if !compressed { |
| 410 | r := bytes.NewReader(payload) |
| 411 | w := codec.NewWriter(buf) |
| 412 | |
| 413 | _, err := io.Copy(w, r) |
| 414 | if err != nil { |
| 415 | b.Fatal(err) |
| 416 | } |
| 417 | if err := w.Close(); err != nil { |
| 418 | b.Fatal(err) |
| 419 | } |
| 420 | } |
| 421 | |
| 422 | b.Run("decompress", func(b *testing.B) { |
| 423 | c := bytes.NewReader(buf.Bytes()) |
| 424 | b.ReportAllocs() |
| 425 | for i := 0; i < b.N; i++ { |
| 426 | c.Reset(buf.Bytes()) |
| 427 | r := codec.NewReader(c) |
| 428 | |
| 429 | n, err := io.Copy(ioutil.Discard, r) |
| 430 | if err != nil { |
| 431 | b.Fatal(err) |
| 432 | } |
| 433 | if err := r.Close(); err != nil { |
| 434 | b.Fatal(err) |
| 435 | } |
| 436 | |
| 437 | b.SetBytes(n) |
| 438 | } |