bytes.rs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #![feature(test)]
  2. #![warn(rust_2018_idioms)]
  3. extern crate test;
  4. use bytes::Bytes;
  5. use test::Bencher;
  6. #[bench]
  7. fn deref_unique(b: &mut Bencher) {
  8. let buf = Bytes::from(vec![0; 1024]);
  9. b.iter(|| {
  10. for _ in 0..1024 {
  11. test::black_box(&buf[..]);
  12. }
  13. })
  14. }
  15. #[bench]
  16. fn deref_shared(b: &mut Bencher) {
  17. let buf = Bytes::from(vec![0; 1024]);
  18. let _b2 = buf.clone();
  19. b.iter(|| {
  20. for _ in 0..1024 {
  21. test::black_box(&buf[..]);
  22. }
  23. })
  24. }
  25. #[bench]
  26. fn deref_static(b: &mut Bencher) {
  27. let buf = Bytes::from_static(b"hello world");
  28. b.iter(|| {
  29. for _ in 0..1024 {
  30. test::black_box(&buf[..]);
  31. }
  32. })
  33. }
  34. #[bench]
  35. fn clone_static(b: &mut Bencher) {
  36. let bytes =
  37. Bytes::from_static("hello world 1234567890 and have a good byte 0987654321".as_bytes());
  38. b.iter(|| {
  39. for _ in 0..1024 {
  40. test::black_box(&bytes.clone());
  41. }
  42. })
  43. }
  44. #[bench]
  45. fn clone_shared(b: &mut Bencher) {
  46. let bytes = Bytes::from(b"hello world 1234567890 and have a good byte 0987654321".to_vec());
  47. b.iter(|| {
  48. for _ in 0..1024 {
  49. test::black_box(&bytes.clone());
  50. }
  51. })
  52. }
  53. #[bench]
  54. fn clone_arc_vec(b: &mut Bencher) {
  55. use std::sync::Arc;
  56. let bytes = Arc::new(b"hello world 1234567890 and have a good byte 0987654321".to_vec());
  57. b.iter(|| {
  58. for _ in 0..1024 {
  59. test::black_box(&bytes.clone());
  60. }
  61. })
  62. }
  63. #[bench]
  64. fn from_long_slice(b: &mut Bencher) {
  65. let data = [0u8; 128];
  66. b.bytes = data.len() as u64;
  67. b.iter(|| {
  68. let buf = Bytes::copy_from_slice(&data[..]);
  69. test::black_box(buf);
  70. })
  71. }
  72. #[bench]
  73. fn slice_empty(b: &mut Bencher) {
  74. b.iter(|| {
  75. // `clone` is to convert to ARC
  76. let b = Bytes::from(vec![17; 1024]).clone();
  77. for i in 0..1000 {
  78. test::black_box(b.slice(i % 100..i % 100));
  79. }
  80. })
  81. }
  82. #[bench]
  83. fn slice_short_from_arc(b: &mut Bencher) {
  84. b.iter(|| {
  85. // `clone` is to convert to ARC
  86. let b = Bytes::from(vec![17; 1024]).clone();
  87. for i in 0..1000 {
  88. test::black_box(b.slice(1..2 + i % 10));
  89. }
  90. })
  91. }
  92. #[bench]
  93. fn split_off_and_drop(b: &mut Bencher) {
  94. b.iter(|| {
  95. for _ in 0..1024 {
  96. let v = vec![10; 200];
  97. let mut b = Bytes::from(v);
  98. test::black_box(b.split_off(100));
  99. test::black_box(b);
  100. }
  101. })
  102. }