xref: /aosp_15_r20/external/grpc-grpc/test/cpp/microbenchmarks/fullstack_fixtures.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker //
3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2017 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker //
5*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker //
9*cc02d7e2SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker //
11*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker //
17*cc02d7e2SAndroid Build Coastguard Worker //
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_FULLSTACK_FIXTURES_H
20*cc02d7e2SAndroid Build Coastguard Worker #define GRPC_TEST_CPP_MICROBENCHMARKS_FULLSTACK_FIXTURES_H
21*cc02d7e2SAndroid Build Coastguard Worker 
22*cc02d7e2SAndroid Build Coastguard Worker #include <grpc/grpc.h>
23*cc02d7e2SAndroid Build Coastguard Worker #include <grpc/support/atm.h>
24*cc02d7e2SAndroid Build Coastguard Worker #include <grpc/support/log.h>
25*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/channel.h>
26*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/create_channel.h>
27*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/security/credentials.h>
28*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/security/server_credentials.h>
29*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/server.h>
30*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/server_builder.h>
31*cc02d7e2SAndroid Build Coastguard Worker 
32*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
33*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/channel/channel_args.h"
34*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/config/core_configuration.h"
35*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/gprpp/crash.h"
36*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/iomgr/endpoint.h"
37*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/iomgr/endpoint_pair.h"
38*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/iomgr/exec_ctx.h"
39*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/iomgr/tcp_posix.h"
40*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/surface/channel.h"
41*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/surface/channel_create.h"
42*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/surface/completion_queue.h"
43*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/surface/server.h"
44*cc02d7e2SAndroid Build Coastguard Worker #include "src/cpp/client/create_channel_internal.h"
45*cc02d7e2SAndroid Build Coastguard Worker #include "test/core/util/port.h"
46*cc02d7e2SAndroid Build Coastguard Worker #include "test/core/util/test_config.h"
47*cc02d7e2SAndroid Build Coastguard Worker #include "test/cpp/microbenchmarks/helpers.h"
48*cc02d7e2SAndroid Build Coastguard Worker 
49*cc02d7e2SAndroid Build Coastguard Worker namespace grpc {
50*cc02d7e2SAndroid Build Coastguard Worker namespace testing {
51*cc02d7e2SAndroid Build Coastguard Worker 
52*cc02d7e2SAndroid Build Coastguard Worker class FixtureConfiguration {
53*cc02d7e2SAndroid Build Coastguard Worker  public:
~FixtureConfiguration()54*cc02d7e2SAndroid Build Coastguard Worker   virtual ~FixtureConfiguration() {}
ApplyCommonChannelArguments(ChannelArguments * c)55*cc02d7e2SAndroid Build Coastguard Worker   virtual void ApplyCommonChannelArguments(ChannelArguments* c) const {
56*cc02d7e2SAndroid Build Coastguard Worker     c->SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, INT_MAX);
57*cc02d7e2SAndroid Build Coastguard Worker     c->SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, INT_MAX);
58*cc02d7e2SAndroid Build Coastguard Worker     c->SetInt(GRPC_ARG_ENABLE_RETRIES, 0);
59*cc02d7e2SAndroid Build Coastguard Worker     c->SetResourceQuota(ResourceQuota());
60*cc02d7e2SAndroid Build Coastguard Worker   }
61*cc02d7e2SAndroid Build Coastguard Worker 
ApplyCommonServerBuilderConfig(ServerBuilder * b)62*cc02d7e2SAndroid Build Coastguard Worker   virtual void ApplyCommonServerBuilderConfig(ServerBuilder* b) const {
63*cc02d7e2SAndroid Build Coastguard Worker     b->SetMaxReceiveMessageSize(INT_MAX);
64*cc02d7e2SAndroid Build Coastguard Worker     b->SetMaxSendMessageSize(INT_MAX);
65*cc02d7e2SAndroid Build Coastguard Worker   }
66*cc02d7e2SAndroid Build Coastguard Worker };
67*cc02d7e2SAndroid Build Coastguard Worker 
68*cc02d7e2SAndroid Build Coastguard Worker class BaseFixture {
69*cc02d7e2SAndroid Build Coastguard Worker  public:
70*cc02d7e2SAndroid Build Coastguard Worker   virtual ~BaseFixture() = default;
71*cc02d7e2SAndroid Build Coastguard Worker };
72*cc02d7e2SAndroid Build Coastguard Worker 
73*cc02d7e2SAndroid Build Coastguard Worker class FullstackFixture : public BaseFixture {
74*cc02d7e2SAndroid Build Coastguard Worker  public:
FullstackFixture(Service * service,const FixtureConfiguration & config,const std::string & address)75*cc02d7e2SAndroid Build Coastguard Worker   FullstackFixture(Service* service, const FixtureConfiguration& config,
76*cc02d7e2SAndroid Build Coastguard Worker                    const std::string& address) {
77*cc02d7e2SAndroid Build Coastguard Worker     ServerBuilder b;
78*cc02d7e2SAndroid Build Coastguard Worker     if (address.length() > 0) {
79*cc02d7e2SAndroid Build Coastguard Worker       b.AddListeningPort(address, InsecureServerCredentials());
80*cc02d7e2SAndroid Build Coastguard Worker     }
81*cc02d7e2SAndroid Build Coastguard Worker     cq_ = b.AddCompletionQueue(true);
82*cc02d7e2SAndroid Build Coastguard Worker     b.RegisterService(service);
83*cc02d7e2SAndroid Build Coastguard Worker     config.ApplyCommonServerBuilderConfig(&b);
84*cc02d7e2SAndroid Build Coastguard Worker     server_ = b.BuildAndStart();
85*cc02d7e2SAndroid Build Coastguard Worker     ChannelArguments args;
86*cc02d7e2SAndroid Build Coastguard Worker     config.ApplyCommonChannelArguments(&args);
87*cc02d7e2SAndroid Build Coastguard Worker     if (address.length() > 0) {
88*cc02d7e2SAndroid Build Coastguard Worker       channel_ = grpc::CreateCustomChannel(address,
89*cc02d7e2SAndroid Build Coastguard Worker                                            InsecureChannelCredentials(), args);
90*cc02d7e2SAndroid Build Coastguard Worker     } else {
91*cc02d7e2SAndroid Build Coastguard Worker       channel_ = server_->InProcessChannel(args);
92*cc02d7e2SAndroid Build Coastguard Worker     }
93*cc02d7e2SAndroid Build Coastguard Worker   }
94*cc02d7e2SAndroid Build Coastguard Worker 
~FullstackFixture()95*cc02d7e2SAndroid Build Coastguard Worker   ~FullstackFixture() override {
96*cc02d7e2SAndroid Build Coastguard Worker     server_->Shutdown(grpc_timeout_milliseconds_to_deadline(0));
97*cc02d7e2SAndroid Build Coastguard Worker     cq_->Shutdown();
98*cc02d7e2SAndroid Build Coastguard Worker     void* tag;
99*cc02d7e2SAndroid Build Coastguard Worker     bool ok;
100*cc02d7e2SAndroid Build Coastguard Worker     while (cq_->Next(&tag, &ok)) {
101*cc02d7e2SAndroid Build Coastguard Worker     }
102*cc02d7e2SAndroid Build Coastguard Worker   }
103*cc02d7e2SAndroid Build Coastguard Worker 
cq()104*cc02d7e2SAndroid Build Coastguard Worker   ServerCompletionQueue* cq() { return cq_.get(); }
channel()105*cc02d7e2SAndroid Build Coastguard Worker   std::shared_ptr<Channel> channel() { return channel_; }
106*cc02d7e2SAndroid Build Coastguard Worker 
107*cc02d7e2SAndroid Build Coastguard Worker  private:
108*cc02d7e2SAndroid Build Coastguard Worker   std::unique_ptr<Server> server_;
109*cc02d7e2SAndroid Build Coastguard Worker   std::unique_ptr<ServerCompletionQueue> cq_;
110*cc02d7e2SAndroid Build Coastguard Worker   std::shared_ptr<Channel> channel_;
111*cc02d7e2SAndroid Build Coastguard Worker };
112*cc02d7e2SAndroid Build Coastguard Worker 
113*cc02d7e2SAndroid Build Coastguard Worker class TCP : public FullstackFixture {
114*cc02d7e2SAndroid Build Coastguard Worker  public:
115*cc02d7e2SAndroid Build Coastguard Worker   explicit TCP(Service* service,
116*cc02d7e2SAndroid Build Coastguard Worker                const FixtureConfiguration& fixture_configuration =
117*cc02d7e2SAndroid Build Coastguard Worker                    FixtureConfiguration())
FullstackFixture(service,fixture_configuration,MakeAddress (& port_))118*cc02d7e2SAndroid Build Coastguard Worker       : FullstackFixture(service, fixture_configuration, MakeAddress(&port_)) {}
119*cc02d7e2SAndroid Build Coastguard Worker 
~TCP()120*cc02d7e2SAndroid Build Coastguard Worker   ~TCP() override { grpc_recycle_unused_port(port_); }
121*cc02d7e2SAndroid Build Coastguard Worker 
122*cc02d7e2SAndroid Build Coastguard Worker  private:
123*cc02d7e2SAndroid Build Coastguard Worker   int port_;
124*cc02d7e2SAndroid Build Coastguard Worker 
MakeAddress(int * port)125*cc02d7e2SAndroid Build Coastguard Worker   static std::string MakeAddress(int* port) {
126*cc02d7e2SAndroid Build Coastguard Worker     *port = grpc_pick_unused_port_or_die();
127*cc02d7e2SAndroid Build Coastguard Worker     std::stringstream addr;
128*cc02d7e2SAndroid Build Coastguard Worker     addr << "localhost:" << *port;
129*cc02d7e2SAndroid Build Coastguard Worker     return addr.str();
130*cc02d7e2SAndroid Build Coastguard Worker   }
131*cc02d7e2SAndroid Build Coastguard Worker };
132*cc02d7e2SAndroid Build Coastguard Worker 
133*cc02d7e2SAndroid Build Coastguard Worker class UDS : public FullstackFixture {
134*cc02d7e2SAndroid Build Coastguard Worker  public:
135*cc02d7e2SAndroid Build Coastguard Worker   explicit UDS(Service* service,
136*cc02d7e2SAndroid Build Coastguard Worker                const FixtureConfiguration& fixture_configuration =
137*cc02d7e2SAndroid Build Coastguard Worker                    FixtureConfiguration())
FullstackFixture(service,fixture_configuration,MakeAddress (& port_))138*cc02d7e2SAndroid Build Coastguard Worker       : FullstackFixture(service, fixture_configuration, MakeAddress(&port_)) {}
139*cc02d7e2SAndroid Build Coastguard Worker 
~UDS()140*cc02d7e2SAndroid Build Coastguard Worker   ~UDS() override { grpc_recycle_unused_port(port_); }
141*cc02d7e2SAndroid Build Coastguard Worker 
142*cc02d7e2SAndroid Build Coastguard Worker  private:
143*cc02d7e2SAndroid Build Coastguard Worker   int port_;
144*cc02d7e2SAndroid Build Coastguard Worker 
MakeAddress(int * port)145*cc02d7e2SAndroid Build Coastguard Worker   static std::string MakeAddress(int* port) {
146*cc02d7e2SAndroid Build Coastguard Worker     *port = grpc_pick_unused_port_or_die();  // just for a unique id - not a
147*cc02d7e2SAndroid Build Coastguard Worker                                              // real port
148*cc02d7e2SAndroid Build Coastguard Worker     std::stringstream addr;
149*cc02d7e2SAndroid Build Coastguard Worker     addr << "unix:/tmp/bm_fullstack." << *port;
150*cc02d7e2SAndroid Build Coastguard Worker     return addr.str();
151*cc02d7e2SAndroid Build Coastguard Worker   }
152*cc02d7e2SAndroid Build Coastguard Worker };
153*cc02d7e2SAndroid Build Coastguard Worker 
154*cc02d7e2SAndroid Build Coastguard Worker class InProcess : public FullstackFixture {
155*cc02d7e2SAndroid Build Coastguard Worker  public:
156*cc02d7e2SAndroid Build Coastguard Worker   explicit InProcess(Service* service,
157*cc02d7e2SAndroid Build Coastguard Worker                      const FixtureConfiguration& fixture_configuration =
158*cc02d7e2SAndroid Build Coastguard Worker                          FixtureConfiguration())
159*cc02d7e2SAndroid Build Coastguard Worker       : FullstackFixture(service, fixture_configuration, "") {}
~InProcess()160*cc02d7e2SAndroid Build Coastguard Worker   ~InProcess() override {}
161*cc02d7e2SAndroid Build Coastguard Worker };
162*cc02d7e2SAndroid Build Coastguard Worker 
163*cc02d7e2SAndroid Build Coastguard Worker class EndpointPairFixture : public BaseFixture {
164*cc02d7e2SAndroid Build Coastguard Worker  public:
EndpointPairFixture(Service * service,grpc_endpoint_pair endpoints,const FixtureConfiguration & fixture_configuration)165*cc02d7e2SAndroid Build Coastguard Worker   EndpointPairFixture(Service* service, grpc_endpoint_pair endpoints,
166*cc02d7e2SAndroid Build Coastguard Worker                       const FixtureConfiguration& fixture_configuration)
167*cc02d7e2SAndroid Build Coastguard Worker       : endpoint_pair_(endpoints) {
168*cc02d7e2SAndroid Build Coastguard Worker     ServerBuilder b;
169*cc02d7e2SAndroid Build Coastguard Worker     cq_ = b.AddCompletionQueue(true);
170*cc02d7e2SAndroid Build Coastguard Worker     b.RegisterService(service);
171*cc02d7e2SAndroid Build Coastguard Worker     fixture_configuration.ApplyCommonServerBuilderConfig(&b);
172*cc02d7e2SAndroid Build Coastguard Worker     server_ = b.BuildAndStart();
173*cc02d7e2SAndroid Build Coastguard Worker     grpc_core::ExecCtx exec_ctx;
174*cc02d7e2SAndroid Build Coastguard Worker     // add server endpoint to server_
175*cc02d7e2SAndroid Build Coastguard Worker     //
176*cc02d7e2SAndroid Build Coastguard Worker     {
177*cc02d7e2SAndroid Build Coastguard Worker       grpc_core::Server* core_server =
178*cc02d7e2SAndroid Build Coastguard Worker           grpc_core::Server::FromC(server_->c_server());
179*cc02d7e2SAndroid Build Coastguard Worker       grpc_core::ChannelArgs server_args = core_server->channel_args();
180*cc02d7e2SAndroid Build Coastguard Worker       server_transport_ = grpc_create_chttp2_transport(
181*cc02d7e2SAndroid Build Coastguard Worker           server_args, endpoints.server, false /* is_client */);
182*cc02d7e2SAndroid Build Coastguard Worker       for (grpc_pollset* pollset : core_server->pollsets()) {
183*cc02d7e2SAndroid Build Coastguard Worker         grpc_endpoint_add_to_pollset(endpoints.server, pollset);
184*cc02d7e2SAndroid Build Coastguard Worker       }
185*cc02d7e2SAndroid Build Coastguard Worker 
186*cc02d7e2SAndroid Build Coastguard Worker       GPR_ASSERT(GRPC_LOG_IF_ERROR(
187*cc02d7e2SAndroid Build Coastguard Worker           "SetupTransport",
188*cc02d7e2SAndroid Build Coastguard Worker           core_server->SetupTransport(server_transport_, nullptr, server_args,
189*cc02d7e2SAndroid Build Coastguard Worker                                       nullptr)));
190*cc02d7e2SAndroid Build Coastguard Worker       grpc_chttp2_transport_start_reading(server_transport_, nullptr, nullptr,
191*cc02d7e2SAndroid Build Coastguard Worker                                           nullptr);
192*cc02d7e2SAndroid Build Coastguard Worker     }
193*cc02d7e2SAndroid Build Coastguard Worker 
194*cc02d7e2SAndroid Build Coastguard Worker     // create channel
195*cc02d7e2SAndroid Build Coastguard Worker     {
196*cc02d7e2SAndroid Build Coastguard Worker       grpc_core::ChannelArgs c_args;
197*cc02d7e2SAndroid Build Coastguard Worker       {
198*cc02d7e2SAndroid Build Coastguard Worker         ChannelArguments args;
199*cc02d7e2SAndroid Build Coastguard Worker         args.SetString(GRPC_ARG_DEFAULT_AUTHORITY, "test.authority");
200*cc02d7e2SAndroid Build Coastguard Worker         fixture_configuration.ApplyCommonChannelArguments(&args);
201*cc02d7e2SAndroid Build Coastguard Worker         // precondition
202*cc02d7e2SAndroid Build Coastguard Worker         grpc_channel_args tmp_args;
203*cc02d7e2SAndroid Build Coastguard Worker         args.SetChannelArgs(&tmp_args);
204*cc02d7e2SAndroid Build Coastguard Worker         c_args = grpc_core::CoreConfiguration::Get()
205*cc02d7e2SAndroid Build Coastguard Worker                      .channel_args_preconditioning()
206*cc02d7e2SAndroid Build Coastguard Worker                      .PreconditionChannelArgs(&tmp_args);
207*cc02d7e2SAndroid Build Coastguard Worker       }
208*cc02d7e2SAndroid Build Coastguard Worker       client_transport_ =
209*cc02d7e2SAndroid Build Coastguard Worker           grpc_create_chttp2_transport(c_args, endpoints.client, true);
210*cc02d7e2SAndroid Build Coastguard Worker       GPR_ASSERT(client_transport_);
211*cc02d7e2SAndroid Build Coastguard Worker       grpc_channel* channel =
212*cc02d7e2SAndroid Build Coastguard Worker           grpc_core::ChannelCreate("target", c_args, GRPC_CLIENT_DIRECT_CHANNEL,
213*cc02d7e2SAndroid Build Coastguard Worker                                    client_transport_)
214*cc02d7e2SAndroid Build Coastguard Worker               ->release()
215*cc02d7e2SAndroid Build Coastguard Worker               ->c_ptr();
216*cc02d7e2SAndroid Build Coastguard Worker       grpc_chttp2_transport_start_reading(client_transport_, nullptr, nullptr,
217*cc02d7e2SAndroid Build Coastguard Worker                                           nullptr);
218*cc02d7e2SAndroid Build Coastguard Worker 
219*cc02d7e2SAndroid Build Coastguard Worker       channel_ = grpc::CreateChannelInternal(
220*cc02d7e2SAndroid Build Coastguard Worker           "", channel,
221*cc02d7e2SAndroid Build Coastguard Worker           std::vector<std::unique_ptr<
222*cc02d7e2SAndroid Build Coastguard Worker               experimental::ClientInterceptorFactoryInterface>>());
223*cc02d7e2SAndroid Build Coastguard Worker     }
224*cc02d7e2SAndroid Build Coastguard Worker   }
225*cc02d7e2SAndroid Build Coastguard Worker 
~EndpointPairFixture()226*cc02d7e2SAndroid Build Coastguard Worker   ~EndpointPairFixture() override {
227*cc02d7e2SAndroid Build Coastguard Worker     server_->Shutdown(grpc_timeout_milliseconds_to_deadline(0));
228*cc02d7e2SAndroid Build Coastguard Worker     cq_->Shutdown();
229*cc02d7e2SAndroid Build Coastguard Worker     void* tag;
230*cc02d7e2SAndroid Build Coastguard Worker     bool ok;
231*cc02d7e2SAndroid Build Coastguard Worker     while (cq_->Next(&tag, &ok)) {
232*cc02d7e2SAndroid Build Coastguard Worker     }
233*cc02d7e2SAndroid Build Coastguard Worker   }
234*cc02d7e2SAndroid Build Coastguard Worker 
cq()235*cc02d7e2SAndroid Build Coastguard Worker   ServerCompletionQueue* cq() { return cq_.get(); }
channel()236*cc02d7e2SAndroid Build Coastguard Worker   std::shared_ptr<Channel> channel() { return channel_; }
237*cc02d7e2SAndroid Build Coastguard Worker 
238*cc02d7e2SAndroid Build Coastguard Worker  protected:
239*cc02d7e2SAndroid Build Coastguard Worker   grpc_endpoint_pair endpoint_pair_;
240*cc02d7e2SAndroid Build Coastguard Worker   grpc_core::Transport* client_transport_;
241*cc02d7e2SAndroid Build Coastguard Worker   grpc_core::Transport* server_transport_;
242*cc02d7e2SAndroid Build Coastguard Worker 
243*cc02d7e2SAndroid Build Coastguard Worker  private:
244*cc02d7e2SAndroid Build Coastguard Worker   std::unique_ptr<Server> server_;
245*cc02d7e2SAndroid Build Coastguard Worker   std::unique_ptr<ServerCompletionQueue> cq_;
246*cc02d7e2SAndroid Build Coastguard Worker   std::shared_ptr<Channel> channel_;
247*cc02d7e2SAndroid Build Coastguard Worker };
248*cc02d7e2SAndroid Build Coastguard Worker 
249*cc02d7e2SAndroid Build Coastguard Worker class SockPair : public EndpointPairFixture {
250*cc02d7e2SAndroid Build Coastguard Worker  public:
251*cc02d7e2SAndroid Build Coastguard Worker   explicit SockPair(Service* service,
252*cc02d7e2SAndroid Build Coastguard Worker                     const FixtureConfiguration& fixture_configuration =
253*cc02d7e2SAndroid Build Coastguard Worker                         FixtureConfiguration())
254*cc02d7e2SAndroid Build Coastguard Worker       : EndpointPairFixture(service,
255*cc02d7e2SAndroid Build Coastguard Worker                             grpc_iomgr_create_endpoint_pair("test", nullptr),
256*cc02d7e2SAndroid Build Coastguard Worker                             fixture_configuration) {}
257*cc02d7e2SAndroid Build Coastguard Worker };
258*cc02d7e2SAndroid Build Coastguard Worker 
259*cc02d7e2SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
260*cc02d7e2SAndroid Build Coastguard Worker // Minimal stack fixtures
261*cc02d7e2SAndroid Build Coastguard Worker 
262*cc02d7e2SAndroid Build Coastguard Worker class MinStackConfiguration : public FixtureConfiguration {
ApplyCommonChannelArguments(ChannelArguments * a)263*cc02d7e2SAndroid Build Coastguard Worker   void ApplyCommonChannelArguments(ChannelArguments* a) const override {
264*cc02d7e2SAndroid Build Coastguard Worker     a->SetInt(GRPC_ARG_MINIMAL_STACK, 1);
265*cc02d7e2SAndroid Build Coastguard Worker     FixtureConfiguration::ApplyCommonChannelArguments(a);
266*cc02d7e2SAndroid Build Coastguard Worker   }
267*cc02d7e2SAndroid Build Coastguard Worker 
ApplyCommonServerBuilderConfig(ServerBuilder * b)268*cc02d7e2SAndroid Build Coastguard Worker   void ApplyCommonServerBuilderConfig(ServerBuilder* b) const override {
269*cc02d7e2SAndroid Build Coastguard Worker     b->AddChannelArgument(GRPC_ARG_MINIMAL_STACK, 1);
270*cc02d7e2SAndroid Build Coastguard Worker     FixtureConfiguration::ApplyCommonServerBuilderConfig(b);
271*cc02d7e2SAndroid Build Coastguard Worker   }
272*cc02d7e2SAndroid Build Coastguard Worker };
273*cc02d7e2SAndroid Build Coastguard Worker 
274*cc02d7e2SAndroid Build Coastguard Worker template <class Base>
275*cc02d7e2SAndroid Build Coastguard Worker class MinStackize : public Base {
276*cc02d7e2SAndroid Build Coastguard Worker  public:
MinStackize(Service * service)277*cc02d7e2SAndroid Build Coastguard Worker   explicit MinStackize(Service* service)
278*cc02d7e2SAndroid Build Coastguard Worker       : Base(service, MinStackConfiguration()) {}
279*cc02d7e2SAndroid Build Coastguard Worker };
280*cc02d7e2SAndroid Build Coastguard Worker 
281*cc02d7e2SAndroid Build Coastguard Worker typedef MinStackize<TCP> MinTCP;
282*cc02d7e2SAndroid Build Coastguard Worker typedef MinStackize<UDS> MinUDS;
283*cc02d7e2SAndroid Build Coastguard Worker typedef MinStackize<InProcess> MinInProcess;
284*cc02d7e2SAndroid Build Coastguard Worker typedef MinStackize<SockPair> MinSockPair;
285*cc02d7e2SAndroid Build Coastguard Worker 
286*cc02d7e2SAndroid Build Coastguard Worker }  // namespace testing
287*cc02d7e2SAndroid Build Coastguard Worker }  // namespace grpc
288*cc02d7e2SAndroid Build Coastguard Worker 
289*cc02d7e2SAndroid Build Coastguard Worker #endif  // GRPC_TEST_CPP_MICROBENCHMARKS_FULLSTACK_FIXTURES_H
290