bm_byte_buffer.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 /* This benchmark exists to show that byte-buffer copy is size-independent */
20 
21 #include <memory>
22 
23 #include <benchmark/benchmark.h>
24 
27 
31 
32 namespace grpc {
33 namespace testing {
34 
36  int num_slices = state.range(0);
37  size_t slice_size = state.range(1);
38  std::vector<grpc::Slice> slices;
39  while (num_slices > 0) {
40  num_slices--;
41  std::unique_ptr<char[]> buf(new char[slice_size]);
42  memset(buf.get(), 0, slice_size);
43  slices.emplace_back(buf.get(), slice_size);
44  }
45  grpc::ByteBuffer bb(slices.data(), num_slices);
46  for (auto _ : state) {
47  grpc::ByteBuffer cc(bb);
48  }
49 }
50 BENCHMARK(BM_ByteBuffer_Copy)->Ranges({{1, 64}, {1, 1024 * 1024}});
51 
53  const int num_slices = state.range(0);
54  constexpr size_t kSliceSize = 16;
55  std::vector<grpc_slice> slices;
56  for (int i = 0; i < num_slices; ++i) {
57  std::unique_ptr<char[]> buf(new char[kSliceSize]);
59  buf.get(), kSliceSize));
60  }
62  slices.data(), num_slices);
64  GPR_ASSERT(
66  for (auto _ : state) {
69  &reader, &slice))) {
71  GPR_ASSERT(
73  continue;
74  }
75  }
76 
79  for (auto& slice : slices) {
81  }
82 }
83 BENCHMARK(BM_ByteBufferReader_Next)->Ranges({{64 * 1024, 1024 * 1024}});
84 
86  const int num_slices = state.range(0);
87  constexpr size_t kSliceSize = 16;
88  std::vector<grpc_slice> slices;
89  for (int i = 0; i < num_slices; ++i) {
90  std::unique_ptr<char[]> buf(new char[kSliceSize]);
92  buf.get(), kSliceSize));
93  }
95  slices.data(), num_slices);
97  GPR_ASSERT(
99  for (auto _ : state) {
100  grpc_slice* slice;
102  &reader, &slice))) {
104  GPR_ASSERT(
106  continue;
107  }
108  }
109 
112  for (auto& slice : slices) {
114  }
115 }
116 BENCHMARK(BM_ByteBufferReader_Peek)->Ranges({{64 * 1024, 1024 * 1024}});
117 
118 } // namespace testing
119 } // namespace grpc
120 
121 // Some distros have RunSpecifiedBenchmarks under the benchmark namespace,
122 // and others do not. This allows us to support both modes.
123 namespace benchmark {
125 } // namespace benchmark
126 
127 int main(int argc, char** argv) {
128  grpc::testing::TestEnvironment env(&argc, argv);
129  LibraryInitializer libInit;
130  ::benchmark::Initialize(&argc, argv);
131  grpc::testing::InitTest(&argc, &argv, false);
132 
134  return 0;
135 }
grpc::testing::InitTest
void InitTest(int *argc, char ***argv, bool remove_flags)
Definition: test_config_cc.cc:28
testing
Definition: aws_request_signer_test.cc:25
benchmark
Definition: bm_alarm.cc:55
generate.env
env
Definition: generate.py:37
memset
return memset(p, 0, total)
grpc::CoreCodegenInterface::grpc_slice_unref
virtual void grpc_slice_unref(grpc_slice slice)=0
grpc
Definition: grpcpp/alarm.h:33
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
grpc::testing::BM_ByteBufferReader_Next
static void BM_ByteBufferReader_Next(benchmark::State &state)
Definition: bm_byte_buffer.cc:52
benchmark::RunTheBenchmarksNamespaced
void RunTheBenchmarksNamespaced()
Definition: bm_alarm.cc:56
grpc::g_core_codegen_interface
CoreCodegenInterface * g_core_codegen_interface
Definition: include/grpcpp/impl/codegen/completion_queue.h:98
benchmark::RunSpecifiedBenchmarks
size_t RunSpecifiedBenchmarks()
Definition: benchmark/src/benchmark.cc:437
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc::CoreCodegenInterface::grpc_raw_byte_buffer_create
virtual grpc_byte_buffer * grpc_raw_byte_buffer_create(grpc_slice *slice, size_t nslices)=0
slice
grpc_slice slice
Definition: src/core/lib/surface/server.cc:467
grpc::CoreCodegenInterface::grpc_byte_buffer_reader_peek
virtual int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader *reader, grpc_slice **slice)=0
GPR_UNLIKELY
#define GPR_UNLIKELY(x)
Definition: impl/codegen/port_platform.h:770
gmock_output_test._
_
Definition: bloaty/third_party/googletest/googlemock/test/gmock_output_test.py:175
grpc_byte_buffer
Definition: grpc_types.h:43
grpc::CoreCodegenInterface::grpc_slice_from_copied_buffer
virtual grpc_slice grpc_slice_from_copied_buffer(const void *buffer, size_t length)=0
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
grpc::ByteBuffer
A sequence of bytes.
Definition: include/grpcpp/impl/codegen/byte_buffer.h:61
benchmark::Initialize
void Initialize(int *argc, char **argv)
Definition: benchmark/src/benchmark.cc:602
grpc::testing::BM_ByteBuffer_Copy
static void BM_ByteBuffer_Copy(benchmark::State &state)
Definition: bm_byte_buffer.cc:35
helpers.h
LibraryInitializer
Definition: helpers.h:33
grpc::CoreCodegenInterface::grpc_byte_buffer_destroy
virtual void grpc_byte_buffer_destroy(grpc_byte_buffer *bb)=0
test_config.h
grpc::testing::BM_ByteBufferReader_Peek
static void BM_ByteBufferReader_Peek(benchmark::State &state)
Definition: bm_byte_buffer.cc:85
grpc_library.h
grpc::testing::BENCHMARK
static const int BENCHMARK
Definition: inproc_sync_unary_ping_pong_test.cc:35
benchmark::State
Definition: benchmark/include/benchmark/benchmark.h:503
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
slices
SliceBuffer * slices
Definition: retry_filter.cc:631
state
Definition: bloaty/third_party/zlib/contrib/blast/blast.c:41
test_config.h
grpc::CoreCodegenInterface::grpc_byte_buffer_reader_init
virtual int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader, grpc_byte_buffer *buffer) GRPC_MUST_USE_RESULT=0
main
int main(int argc, char **argv)
Definition: bm_byte_buffer.cc:127
grpc::CoreCodegenInterface::grpc_byte_buffer_reader_destroy
virtual void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader)=0
grpc_byte_buffer_reader
Definition: impl/codegen/byte_buffer_reader.h:30
reader
void reader(void *n)
Definition: libuv/docs/code/locks/main.c:8
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
byte_buffer.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:39