21 #ifndef TEST_CPP_MICROBENCHMARKS_FULLSTACK_UNARY_PING_PONG_H
22 #define TEST_CPP_MICROBENCHMARKS_FULLSTACK_UNARY_PING_PONG_H
26 #include <benchmark/benchmark.h>
29 #include "src/proto/grpc/testing/echo.grpc.pb.h"
40 static void*
tag(
intptr_t x) {
return reinterpret_cast<void*
>(
x); }
42 template <
class Fixture,
class ClientContextMutator,
class ServerContextMutator>
44 EchoTestService::AsyncService
service;
47 EchoResponse send_response;
48 EchoResponse recv_response;
49 if (
state.range(0) > 0) {
52 if (
state.range(1) > 0) {
58 EchoRequest recv_request;
60 ServerEnv() : response_writer(&
ctx) {}
62 uint8_t server_env_buffer[2 *
sizeof(ServerEnv)];
63 ServerEnv* server_env[2] = {
64 reinterpret_cast<ServerEnv*
>(server_env_buffer),
65 reinterpret_cast<ServerEnv*
>(server_env_buffer +
sizeof(ServerEnv))};
66 new (server_env[0]) ServerEnv;
67 new (server_env[1]) ServerEnv;
68 service.RequestEcho(&server_env[0]->
ctx, &server_env[0]->recv_request,
69 &server_env[0]->response_writer,
fixture->cq(),
71 service.RequestEcho(&server_env[1]->
ctx, &server_env[1]->recv_request,
72 &server_env[1]->response_writer,
fixture->cq(),
74 std::unique_ptr<EchoTestService::Stub>
stub(
75 EchoTestService::NewStub(
fixture->channel()));
78 recv_response.Clear();
80 ClientContextMutator cli_ctx_mut(&cli_ctx);
81 std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
83 response_reader->Finish(&recv_response, &recv_status,
tag(4));
90 ServerEnv* senv = server_env[slot];
91 ServerContextMutator svr_ctx_mut(&senv->ctx);
92 senv->response_writer.Finish(send_response,
Status::OK,
tag(3));
93 for (
int i = (1 << 3) | (1 << 4);
i != 0;) {
96 int tagnum =
static_cast<int>(
reinterpret_cast<intptr_t>(t));
103 senv =
new (senv) ServerEnv();
104 service.RequestEcho(&senv->ctx, &senv->recv_request, &senv->response_writer,
109 server_env[0]->~ServerEnv();
110 server_env[1]->~ServerEnv();
117 #endif // TEST_CPP_MICROBENCHMARKS_FULLSTACK_UNARY_PING_PONG_H