test/cpp/qps/client_callback.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 #include <list>
20 #include <memory>
21 #include <mutex>
22 #include <sstream>
23 #include <string>
24 #include <thread>
25 #include <utility>
26 #include <vector>
27 
28 #include "absl/memory/memory.h"
29 
30 #include <grpc/grpc.h>
31 #include <grpc/support/cpu.h>
32 #include <grpc/support/log.h>
33 #include <grpcpp/alarm.h>
34 #include <grpcpp/channel.h>
35 #include <grpcpp/client_context.h>
36 
37 #include "src/proto/grpc/testing/benchmark_service.grpc.pb.h"
38 #include "test/cpp/qps/client.h"
40 
41 namespace grpc {
42 namespace testing {
43 
48  explicit CallbackClientRpcContext(BenchmarkService::Stub* stub)
49  : alarm_(nullptr), stub_(stub) {}
50 
52 
55  std::unique_ptr<Alarm> alarm_;
56  BenchmarkService::Stub* stub_;
57 };
58 
59 static std::unique_ptr<BenchmarkService::Stub> BenchmarkStubCreator(
60  const std::shared_ptr<Channel>& ch) {
61  return BenchmarkService::NewStub(ch);
62 }
63 
65  : public ClientImpl<BenchmarkService::Stub, SimpleRequest> {
66  public:
68  : ClientImpl<BenchmarkService::Stub, SimpleRequest>(
71  rpcs_done_ = 0;
72 
73  // Don't divide the fixed load among threads as the user threads
74  // only bootstrap the RPCs
77  config.client_channels() * config.outstanding_rpcs_per_channel();
78  }
79 
80  ~CallbackClient() override {}
81 
89  std::lock_guard<std::mutex> l(shutdown_mu_);
90  rpcs_done_++;
92  shutdown_cv_.notify_one();
93  }
94  }
95 
97  std::lock_guard<std::mutex> l(next_issue_time_mu_);
98  return Client::NextIssueTime(0);
99  }
100 
101  protected:
102  size_t num_threads_;
104  // The below mutex and condition variable is used by main benchmark thread to
105  // wait on completion of all RPCs before shutdown
107  std::condition_variable shutdown_cv_;
108  // Number of rpcs done after thread completion
109  size_t rpcs_done_;
110  // Vector of Context data pointers for running a RPC
111  std::vector<std::unique_ptr<CallbackClientRpcContext>> ctx_;
112 
113  virtual void InitThreadFuncImpl(size_t thread_idx) = 0;
114  virtual bool ThreadFuncImpl(Thread* t, size_t thread_idx) = 0;
115 
116  void ThreadFunc(size_t thread_idx, Thread* t) override {
117  InitThreadFuncImpl(thread_idx);
118  ThreadFuncImpl(t, thread_idx);
119  }
120 
121  private:
122  std::mutex next_issue_time_mu_; // Used by next issue time
123 
125  int num_threads = config.async_client_threads();
126  if (num_threads <= 0) { // Use dynamic sizing
128  gpr_log(GPR_INFO, "Sizing callback client to %d threads", num_threads);
129  }
130  return num_threads;
131  }
132 
136  void DestroyMultithreading() final {
137  std::unique_lock<std::mutex> l(shutdown_mu_);
139  shutdown_cv_.wait(l);
140  }
141  EndThreads();
142  }
143 };
144 
145 class CallbackUnaryClient final : public CallbackClient {
146  public:
149  for (int ch = 0; ch < config.client_channels(); ch++) {
150  for (int i = 0; i < config.outstanding_rpcs_per_channel(); i++) {
151  ctx_.emplace_back(
152  new CallbackClientRpcContext(channels_[ch].get_stub()));
153  }
154  }
156  }
157  ~CallbackUnaryClient() override {}
158 
159  protected:
160  bool ThreadFuncImpl(Thread* t, size_t thread_idx) override {
161  for (size_t vector_idx = thread_idx; vector_idx < total_outstanding_rpcs_;
162  vector_idx += num_threads_) {
163  ScheduleRpc(t, vector_idx);
164  }
165  return true;
166  }
167 
168  void InitThreadFuncImpl(size_t /*thread_idx*/) override {}
169 
170  private:
171  void ScheduleRpc(Thread* t, size_t vector_idx) {
172  if (!closed_loop_) {
173  gpr_timespec next_issue_time = NextRPCIssueTime();
174  // Start an alarm callback to run the internal callback after
175  // next_issue_time
176  if (ctx_[vector_idx]->alarm_ == nullptr) {
177  ctx_[vector_idx]->alarm_ = absl::make_unique<Alarm>();
178  }
179  ctx_[vector_idx]->alarm_->Set(next_issue_time,
180  [this, t, vector_idx](bool /*ok*/) {
181  IssueUnaryCallbackRpc(t, vector_idx);
182  });
183  } else {
184  IssueUnaryCallbackRpc(t, vector_idx);
185  }
186  }
187 
188  void IssueUnaryCallbackRpc(Thread* t, size_t vector_idx) {
189  GPR_TIMER_SCOPE("CallbackUnaryClient::ThreadFunc", 0);
190  double start = UsageTimer::Now();
191  ctx_[vector_idx]->stub_->async()->UnaryCall(
192  (&ctx_[vector_idx]->context_), &request_, &ctx_[vector_idx]->response_,
193  [this, t, start, vector_idx](grpc::Status s) {
194  // Update Histogram with data from the callback run
195  HistogramEntry entry;
196  if (s.ok()) {
197  entry.set_value((UsageTimer::Now() - start) * 1e9);
198  }
199  entry.set_status(s.error_code());
200  t->UpdateHistogram(&entry);
201 
202  if (ThreadCompleted() || !s.ok()) {
203  // Notify thread of completion
204  NotifyMainThreadOfThreadCompletion();
205  } else {
206  // Reallocate ctx for next RPC
207  ctx_[vector_idx] = absl::make_unique<CallbackClientRpcContext>(
208  ctx_[vector_idx]->stub_);
209  // Schedule a new RPC
210  ScheduleRpc(t, vector_idx);
211  }
212  });
213  }
214 };
215 
217  public:
221  for (int ch = 0; ch < config.client_channels(); ch++) {
222  for (int i = 0; i < config.outstanding_rpcs_per_channel(); i++) {
223  ctx_.emplace_back(
224  new CallbackClientRpcContext(channels_[ch].get_stub()));
225  }
226  }
228  }
230 
231  void AddHistogramEntry(double start, bool ok, Thread* thread_ptr) {
232  // Update Histogram with data from the callback run
233  HistogramEntry entry;
234  if (ok) {
235  entry.set_value((UsageTimer::Now() - start) * 1e9);
236  }
237  thread_ptr->UpdateHistogram(&entry);
238  }
239 
241 
242  protected:
244 };
245 
247  public:
251 };
252 
254  : public grpc::ClientBidiReactor<SimpleRequest, SimpleResponse> {
255  public:
258  std::unique_ptr<CallbackClientRpcContext> ctx)
260 
261  void StartNewRpc() {
262  ctx_->stub_->async()->StreamingCall(&(ctx_->context_), this);
265  writes_done_started_.clear();
266  StartCall();
267  }
268 
269  void OnWriteDone(bool ok) override {
270  if (!ok) {
271  gpr_log(GPR_ERROR, "Error writing RPC");
272  }
273  if ((!ok || client_->ThreadCompleted()) &&
274  !writes_done_started_.test_and_set()) {
275  StartWritesDone();
276  }
277  StartRead(&ctx_->response_);
278  }
279 
280  void OnReadDone(bool ok) override {
282 
283  if (client_->ThreadCompleted() || !ok ||
284  (client_->messages_per_stream() != 0 &&
286  if (!ok) {
287  gpr_log(GPR_ERROR, "Error reading RPC");
288  }
289  if (!writes_done_started_.test_and_set()) {
290  StartWritesDone();
291  }
292  return;
293  }
294  if (!client_->IsClosedLoop()) {
295  gpr_timespec next_issue_time = client_->NextRPCIssueTime();
296  // Start an alarm callback to run the internal callback after
297  // next_issue_time
298  ctx_->alarm_->Set(next_issue_time, [this](bool /*ok*/) {
301  });
302  } else {
305  }
306  }
307 
308  void OnDone(const Status& s) override {
309  if (client_->ThreadCompleted() || !s.ok()) {
311  return;
312  }
313  ctx_ = absl::make_unique<CallbackClientRpcContext>(ctx_->stub_);
314  ScheduleRpc();
315  }
316 
317  void ScheduleRpc() {
318  if (!client_->IsClosedLoop()) {
319  gpr_timespec next_issue_time = client_->NextRPCIssueTime();
320  // Start an alarm callback to run the internal callback after
321  // next_issue_time
322  if (ctx_->alarm_ == nullptr) {
323  ctx_->alarm_ = absl::make_unique<Alarm>();
324  }
325  ctx_->alarm_->Set(next_issue_time,
326  [this](bool /*ok*/) { StartNewRpc(); });
327  } else {
328  StartNewRpc();
329  }
330  }
331 
333 
335  std::unique_ptr<CallbackClientRpcContext> ctx_;
336  std::atomic_flag writes_done_started_;
337  Client::Thread* thread_ptr_; // Needed to update histogram entries
338  double write_time_; // Track ping-pong round start time
339  int messages_issued_; // Messages issued by this stream
340 };
341 
344  public:
347  for (size_t i = 0; i < total_outstanding_rpcs_; i++) {
348  reactor_.emplace_back(
350  }
351  }
353 
354  bool ThreadFuncImpl(Client::Thread* t, size_t thread_idx) override {
355  for (size_t vector_idx = thread_idx; vector_idx < total_outstanding_rpcs_;
356  vector_idx += num_threads_) {
357  reactor_[vector_idx]->set_thread_ptr(t);
358  reactor_[vector_idx]->ScheduleRpc();
359  }
360  return true;
361  }
362 
363  void InitThreadFuncImpl(size_t /*thread_idx*/) override {}
364 
365  private:
366  std::vector<std::unique_ptr<CallbackStreamingPingPongReactor>> reactor_;
367 };
368 
369 // TODO(mhaidry) : Implement Streaming from client, server and both ways
370 
371 std::unique_ptr<Client> CreateCallbackClient(const ClientConfig& config) {
372  switch (config.rpc_type()) {
373  case UNARY:
374  return std::unique_ptr<Client>(new CallbackUnaryClient(config));
375  case STREAMING:
376  return std::unique_ptr<Client>(
378  case STREAMING_FROM_CLIENT:
379  case STREAMING_FROM_SERVER:
380  case STREAMING_BOTH_WAYS:
381  assert(false);
382  return nullptr;
383  default:
384  assert(false);
385  return nullptr;
386  }
387 }
388 
389 } // namespace testing
390 } // namespace grpc
ptr
char * ptr
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:45
messages_pb2.SimpleRequest
SimpleRequest
Definition: messages_pb2.py:597
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
testing
Definition: aws_request_signer_test.cc:25
grpc::testing::CallbackStreamingClient::messages_per_stream_
const int messages_per_stream_
Definition: test/cpp/qps/client_callback.cc:243
grpc::testing::HistogramEntry::set_status
void set_status(int status)
Definition: client.h:123
grpc::testing::CallbackStreamingClient::~CallbackStreamingClient
~CallbackStreamingClient() override
Definition: test/cpp/qps/client_callback.cc:229
log.h
ctx
Definition: benchmark-async.c:30
response_
grpc_http_response response_
Definition: google_c2p_resolver.cc:101
grpc
Definition: grpcpp/alarm.h:33
grpc::testing::Client::NextIssueTime
gpr_timespec NextIssueTime(int thread_idx)
Definition: client.h:244
mutex
static uv_mutex_t mutex
Definition: threadpool.c:34
GPR_TIMER_SCOPE
#define GPR_TIMER_SCOPE(tag, important)
Definition: src/core/lib/profiling/timers.h:43
grpc::ClientBidiReactor< SimpleRequest, SimpleResponse >::StartCall
void StartCall()
Definition: impl/codegen/client_callback.h:246
grpc::ClientBidiReactor
ClientBidiReactor is the interface for a bidirectional streaming RPC.
Definition: impl/codegen/client_callback.h:151
grpc::testing::CallbackClientRpcContext::alarm_
std::unique_ptr< Alarm > alarm_
Definition: test/cpp/qps/client_callback.cc:55
grpc::testing::CallbackStreamingClient::messages_per_stream
int messages_per_stream()
Definition: test/cpp/qps/client_callback.cc:240
client
Definition: examples/python/async_streaming/client.py:1
grpc::testing::CallbackUnaryClient::InitThreadFuncImpl
void InitThreadFuncImpl(size_t) override
Definition: test/cpp/qps/client_callback.cc:168
grpc::testing::CallbackClient::shutdown_mu_
std::mutex shutdown_mu_
Definition: test/cpp/qps/client_callback.cc:106
grpc::testing::CallbackStreamingPingPongClient::~CallbackStreamingPingPongClient
~CallbackStreamingPingPongClient() override
Definition: test/cpp/qps/client_callback.cc:250
grpc::testing::CallbackStreamingPingPongReactor::write_time_
double write_time_
Definition: test/cpp/qps/client_callback.cc:338
grpc::testing::CallbackStreamingPingPongClientImpl::InitThreadFuncImpl
void InitThreadFuncImpl(size_t) override
Definition: test/cpp/qps/client_callback.cc:363
grpc::testing::CallbackStreamingPingPongClientImpl::reactor_
std::vector< std::unique_ptr< CallbackStreamingPingPongReactor > > reactor_
Definition: test/cpp/qps/client_callback.cc:366
grpc::testing::CallbackStreamingPingPongClientImpl::ThreadFuncImpl
bool ThreadFuncImpl(Client::Thread *t, size_t thread_idx) override
Definition: test/cpp/qps/client_callback.cc:354
grpc::testing::CallbackStreamingPingPongReactor::OnWriteDone
void OnWriteDone(bool ok) override
Definition: test/cpp/qps/client_callback.cc:269
grpc::testing::CallbackUnaryClient
Definition: test/cpp/qps/client_callback.cc:145
grpc::testing::ClientImpl::request
const RequestType * request()
Definition: client.h:445
grpc::testing::Client::SetupLoadTest
void SetupLoadTest(const ClientConfig &config, size_t num_threads)
Definition: client.h:355
grpc::testing::Client::Thread
Definition: client.h:257
grpc::testing::CallbackStreamingPingPongClient::CallbackStreamingPingPongClient
CallbackStreamingPingPongClient(const ClientConfig &config)
Definition: test/cpp/qps/client_callback.cc:248
grpc::ClientBidiReactor< SimpleRequest, SimpleResponse >::StartWrite
void StartWrite(const SimpleRequest *req)
Definition: impl/codegen/client_callback.h:261
grpc::testing::CallbackUnaryClient::~CallbackUnaryClient
~CallbackUnaryClient() override
Definition: test/cpp/qps/client_callback.cc:157
UsageTimer::Now
static double Now()
Definition: usage_timer.cc:38
alarm.h
async_greeter_client.stub
stub
Definition: hellostreamingworld/async_greeter_client.py:26
grpc::testing::CallbackStreamingPingPongClientImpl
Definition: test/cpp/qps/client_callback.cc:342
grpc::testing::CallbackUnaryClient::IssueUnaryCallbackRpc
void IssueUnaryCallbackRpc(Thread *t, size_t vector_idx)
Definition: test/cpp/qps/client_callback.cc:188
grpc::testing::CallbackStreamingClient::CallbackStreamingClient
CallbackStreamingClient(const ClientConfig &config)
Definition: test/cpp/qps/client_callback.cc:218
grpc::testing::CallbackClient::ThreadFuncImpl
virtual bool ThreadFuncImpl(Thread *t, size_t thread_idx)=0
grpc::testing::CallbackClient
Definition: test/cpp/qps/client_callback.cc:64
grpc::testing::CallbackStreamingPingPongClientImpl::CallbackStreamingPingPongClientImpl
CallbackStreamingPingPongClientImpl(const ClientConfig &config)
Definition: test/cpp/qps/client_callback.cc:345
grpc::testing::CallbackStreamingPingPongReactor::StartNewRpc
void StartNewRpc()
Definition: test/cpp/qps/client_callback.cc:261
grpc::testing::BenchmarkStubCreator
static std::unique_ptr< BenchmarkService::Stub > BenchmarkStubCreator(const std::shared_ptr< Channel > &ch)
Definition: client_async.cc:303
grpc::testing::Client::IsClosedLoop
bool IsClosedLoop()
Definition: client.h:242
grpc::testing::CallbackClientRpcContext::CallbackClientRpcContext
CallbackClientRpcContext(BenchmarkService::Stub *stub)
Definition: test/cpp/qps/client_callback.cc:48
grpc::testing::HistogramEntry::set_value
void set_value(double v)
Definition: client.h:117
grpc::testing::CallbackUnaryClient::CallbackUnaryClient
CallbackUnaryClient(const ClientConfig &config)
Definition: test/cpp/qps/client_callback.cc:147
start
static uint64_t start
Definition: benchmark-pound.c:74
grpc::testing::CallbackStreamingPingPongReactor::set_thread_ptr
void set_thread_ptr(Client::Thread *ptr)
Definition: test/cpp/qps/client_callback.cc:332
grpc::testing::CallbackStreamingPingPongClient
Definition: test/cpp/qps/client_callback.cc:246
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
grpc::testing::Client::StartThreads
void StartThreads(size_t num_threads)
Definition: client.h:340
context_
ScopedContext * context_
Definition: filter_fuzzer.cc:559
grpc::testing::CallbackStreamingPingPongReactor::CallbackStreamingPingPongReactor
CallbackStreamingPingPongReactor(CallbackStreamingPingPongClient *client, std::unique_ptr< CallbackClientRpcContext > ctx)
Definition: test/cpp/qps/client_callback.cc:256
grpc::testing::CallbackClientRpcContext::~CallbackClientRpcContext
~CallbackClientRpcContext()
Definition: test/cpp/qps/client_callback.cc:51
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc::ClientBidiReactor< SimpleRequest, SimpleResponse >::StartWritesDone
void StartWritesDone()
Definition: impl/codegen/client_callback.h:291
grpc.h
framework.rpc.grpc_csds.ClientConfig
ClientConfig
Definition: grpc_csds.py:40
grpc::testing::CallbackClient::CallbackClient
CallbackClient(const ClientConfig &config)
Definition: test/cpp/qps/client_callback.cc:67
grpc::testing::CallbackStreamingPingPongReactor::thread_ptr_
Client::Thread * thread_ptr_
Definition: test/cpp/qps/client_callback.cc:337
cpu.h
grpc::testing::ClientImpl< BenchmarkService::Stub, SimpleRequest >::cores_
const int cores_
Definition: client.h:503
channel.h
grpc::testing::CallbackClient::rpcs_done_
size_t rpcs_done_
Definition: test/cpp/qps/client_callback.cc:109
grpc::testing::CallbackClient::next_issue_time_mu_
std::mutex next_issue_time_mu_
Definition: test/cpp/qps/client_callback.cc:122
grpc::testing::CallbackClient::~CallbackClient
~CallbackClient() override
Definition: test/cpp/qps/client_callback.cc:80
grpc::testing::CallbackClient::num_threads_
size_t num_threads_
Definition: test/cpp/qps/client_callback.cc:102
grpc::testing::CallbackClient::total_outstanding_rpcs_
size_t total_outstanding_rpcs_
Definition: test/cpp/qps/client_callback.cc:103
GPR_ERROR
#define GPR_ERROR
Definition: include/grpc/impl/codegen/log.h:57
grpc::testing::CallbackClient::DestroyMultithreading
void DestroyMultithreading() final
Definition: test/cpp/qps/client_callback.cc:136
grpc::testing::CallbackClient::shutdown_cv_
std::condition_variable shutdown_cv_
Definition: test/cpp/qps/client_callback.cc:107
grpc::testing::CallbackStreamingPingPongReactor::client_
CallbackStreamingPingPongClient * client_
Definition: test/cpp/qps/client_callback.cc:334
grpc::ClientBidiReactor< SimpleRequest, SimpleResponse >::StartRead
void StartRead(SimpleResponse *resp)
Definition: impl/codegen/client_callback.h:253
grpc::ClientContext
Definition: grpcpp/impl/codegen/client_context.h:195
grpc::testing::HistogramEntry
Definition: client.h:112
grpc::testing::CallbackClient::ctx_
std::vector< std::unique_ptr< CallbackClientRpcContext > > ctx_
Definition: test/cpp/qps/client_callback.cc:111
grpc::testing::Client::ThreadCompleted
bool ThreadCompleted()
Definition: client.h:253
client_context.h
grpc::testing::CallbackClientRpcContext::stub_
BenchmarkService::Stub * stub_
Definition: test/cpp/qps/client_callback.cc:56
grpc::testing::ClientImpl
Definition: client.h:427
grpc::testing::CallbackClient::NextRPCIssueTime
gpr_timespec NextRPCIssueTime()
Definition: test/cpp/qps/client_callback.cc:96
grpc::testing::ClientImpl< BenchmarkService::Stub, SimpleRequest >::request_
SimpleRequest request_
Definition: client.h:504
grpc::testing::CallbackStreamingPingPongReactor::ctx_
std::unique_ptr< CallbackClientRpcContext > ctx_
Definition: test/cpp/qps/client_callback.cc:335
grpc::testing::CallbackStreamingPingPongReactor::OnDone
void OnDone(const Status &s) override
Definition: test/cpp/qps/client_callback.cc:308
grpc::testing::ClientImpl< BenchmarkService::Stub, SimpleRequest >::channels_
std::vector< ClientChannelInfo > channels_
Definition: client.h:563
std
Definition: grpcpp/impl/codegen/async_unary_call.h:407
num_threads
static volatile int num_threads
Definition: benchmark-thread.c:30
grpc::testing::CallbackStreamingPingPongReactor::OnReadDone
void OnReadDone(bool ok) override
Definition: test/cpp/qps/client_callback.cc:280
grpc::testing::CallbackClient::NumThreads
int NumThreads(const ClientConfig &config)
Definition: test/cpp/qps/client_callback.cc:124
grpc::testing::CallbackClient::ThreadFunc
void ThreadFunc(size_t thread_idx, Thread *t) override
Definition: test/cpp/qps/client_callback.cc:116
grpc::testing::CallbackStreamingClient
Definition: test/cpp/qps/client_callback.cc:216
grpc::testing::CallbackStreamingPingPongReactor::ScheduleRpc
void ScheduleRpc()
Definition: test/cpp/qps/client_callback.cc:317
grpc::testing::Client::Thread::UpdateHistogram
void UpdateHistogram(HistogramEntry *entry)
Definition: client.h:280
grpc::Status
Definition: include/grpcpp/impl/codegen/status.h:35
ok
bool ok
Definition: async_end2end_test.cc:197
grpc::testing::Client::EndThreads
void EndThreads()
Definition: client.h:348
config_s
Definition: bloaty/third_party/zlib/deflate.c:120
grpc::testing::CallbackStreamingPingPongReactor::writes_done_started_
std::atomic_flag writes_done_started_
Definition: test/cpp/qps/client_callback.cc:336
grpc::testing::CallbackClientRpcContext::context_
ClientContext context_
Definition: test/cpp/qps/client_callback.cc:54
grpc::testing::CallbackClient::NotifyMainThreadOfThreadCompletion
void NotifyMainThreadOfThreadCompletion()
Definition: test/cpp/qps/client_callback.cc:88
grpc::testing::CreateCallbackClient
std::unique_ptr< Client > CreateCallbackClient(const ClientConfig &config)
Definition: test/cpp/qps/client_callback.cc:371
grpc::testing::CallbackClient::InitThreadFuncImpl
virtual void InitThreadFuncImpl(size_t thread_idx)=0
grpc::testing::CallbackUnaryClient::ScheduleRpc
void ScheduleRpc(Thread *t, size_t vector_idx)
Definition: test/cpp/qps/client_callback.cc:171
ch
char ch
Definition: bloaty/third_party/googletest/googlemock/test/gmock-matchers_test.cc:3621
gpr_timespec
Definition: gpr_types.h:50
usage_timer.h
messages_pb2.SimpleResponse
SimpleResponse
Definition: messages_pb2.py:604
grpc::testing::CallbackClientRpcContext
Definition: test/cpp/qps/client_callback.cc:47
grpc::testing::Client::closed_loop_
bool closed_loop_
Definition: client.h:336
client.h
grpc::testing::CallbackStreamingPingPongClientImpl::~CallbackStreamingPingPongClientImpl
~CallbackStreamingPingPongClientImpl() override
Definition: test/cpp/qps/client_callback.cc:352
if
if(p->owned &&p->wrapped !=NULL)
Definition: call.c:42
grpc::testing::CallbackStreamingClient::AddHistogramEntry
void AddHistogramEntry(double start, bool ok, Thread *thread_ptr)
Definition: test/cpp/qps/client_callback.cc:231
grpc::testing::CallbackUnaryClient::ThreadFuncImpl
bool ThreadFuncImpl(Thread *t, size_t thread_idx) override
Definition: test/cpp/qps/client_callback.cc:160
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
grpc::testing::CallbackStreamingPingPongReactor::messages_issued_
int messages_issued_
Definition: test/cpp/qps/client_callback.cc:339
grpc::testing::CallbackClientRpcContext::response_
SimpleResponse response_
Definition: test/cpp/qps/client_callback.cc:53
grpc::testing::CallbackStreamingPingPongReactor
Definition: test/cpp/qps/client_callback.cc:253


grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:55