1 // Copyright 2023 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 // Auto generated by tools/codegen/core/gen_experiments.py
16 //
17 // This file contains the autogenerated parts of the experiments API.
18 //
19 // It generates two symbols for each experiment.
20 //
21 // For the experiment named new_car_project, it generates:
22 //
23 // - a function IsNewCarProjectEnabled() that returns true if the experiment
24 // should be enabled at runtime.
25 //
26 // - a macro GRPC_EXPERIMENT_IS_INCLUDED_NEW_CAR_PROJECT that is defined if the
27 // experiment *could* be enabled at runtime.
28 //
29 // The function is used to determine whether to run the experiment or
30 // non-experiment code path.
31 //
32 // If the experiment brings significant bloat, the macro can be used to avoid
33 // including the experiment code path in the binary for binaries that are size
34 // sensitive.
35 //
36 // By default that includes our iOS and Android builds.
37 //
38 // Finally, a small array is included that contains the metadata for each
39 // experiment.
40 //
41 // A macro, GRPC_EXPERIMENTS_ARE_FINAL, controls whether we fix experiment
42 // configuration at build time (if it's defined) or allow it to be tuned at
43 // runtime (if it's disabled).
44 //
45 // If you are using the Bazel build system, that macro can be configured with
46 // --define=grpc_experiments_are_final=true
47
48 #ifndef GRPC_SRC_CORE_LIB_EXPERIMENTS_EXPERIMENTS_H
49 #define GRPC_SRC_CORE_LIB_EXPERIMENTS_EXPERIMENTS_H
50
51 #include <grpc/support/port_platform.h>
52
53 #include "src/core/lib/experiments/config.h"
54
55 namespace grpc_core {
56
57 #ifdef GRPC_EXPERIMENTS_ARE_FINAL
58
59 #if defined(GRPC_CFSTREAM)
60 #define GRPC_EXPERIMENT_IS_INCLUDED_BACKOFF_CAP_INITIAL_AT_MAX
IsBackoffCapInitialAtMaxEnabled()61 inline bool IsBackoffCapInitialAtMaxEnabled() { return true; }
62 #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
IsCallTracerInTransportEnabled()63 inline bool IsCallTracerInTransportEnabled() { return true; }
IsChaoticGoodLegacyProtocolEnabled()64 inline bool IsChaoticGoodLegacyProtocolEnabled() { return false; }
IsDisableBufferHintOnHighMemoryPressureEnabled()65 inline bool IsDisableBufferHintOnHighMemoryPressureEnabled() { return false; }
66 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_APPLICATION_CALLBACKS
IsEventEngineApplicationCallbacksEnabled()67 inline bool IsEventEngineApplicationCallbacksEnabled() { return true; }
68 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ
IsEventEngineCallbackCqEnabled()69 inline bool IsEventEngineCallbackCqEnabled() { return true; }
IsEventEngineClientEnabled()70 inline bool IsEventEngineClientEnabled() { return false; }
IsEventEngineDnsEnabled()71 inline bool IsEventEngineDnsEnabled() { return false; }
IsEventEngineDnsNonClientChannelEnabled()72 inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
IsEventEngineListenerEnabled()73 inline bool IsEventEngineListenerEnabled() { return false; }
IsFreeLargeAllocatorEnabled()74 inline bool IsFreeLargeAllocatorEnabled() { return false; }
IsLocalConnectorSecureEnabled()75 inline bool IsLocalConnectorSecureEnabled() { return false; }
IsMaxPingsWoDataThrottleEnabled()76 inline bool IsMaxPingsWoDataThrottleEnabled() { return false; }
77 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
IsMonitoringExperimentEnabled()78 inline bool IsMonitoringExperimentEnabled() { return true; }
IsMultipingEnabled()79 inline bool IsMultipingEnabled() { return false; }
80 #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW
IsPickFirstNewEnabled()81 inline bool IsPickFirstNewEnabled() { return true; }
IsPosixEeSkipGrpcInitEnabled()82 inline bool IsPosixEeSkipGrpcInitEnabled() { return false; }
IsPrioritizeFinishedRequestsEnabled()83 inline bool IsPrioritizeFinishedRequestsEnabled() { return false; }
IsPromiseBasedHttp2ClientTransportEnabled()84 inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; }
IsPromiseBasedHttp2ServerTransportEnabled()85 inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; }
IsPromiseBasedInprocTransportEnabled()86 inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
IsRetryInCallv3Enabled()87 inline bool IsRetryInCallv3Enabled() { return false; }
IsRqFastRejectEnabled()88 inline bool IsRqFastRejectEnabled() { return false; }
IsScheduleCancellationOverWriteEnabled()89 inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
IsTcpFrameSizeTuningEnabled()90 inline bool IsTcpFrameSizeTuningEnabled() { return false; }
IsTcpRcvLowatEnabled()91 inline bool IsTcpRcvLowatEnabled() { return false; }
92 #define GRPC_EXPERIMENT_IS_INCLUDED_TIME_CACHING_IN_PARTY
IsTimeCachingInPartyEnabled()93 inline bool IsTimeCachingInPartyEnabled() { return true; }
94 #define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
IsTraceRecordCallopsEnabled()95 inline bool IsTraceRecordCallopsEnabled() { return true; }
IsUnconstrainedMaxQuotaBufferSizeEnabled()96 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
97 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
IsWorkSerializerDispatchEnabled()98 inline bool IsWorkSerializerDispatchEnabled() { return true; }
IsServerListenerEnabled()99 inline bool IsServerListenerEnabled() { return false; }
100
101 #elif defined(GPR_WINDOWS)
102 #define GRPC_EXPERIMENT_IS_INCLUDED_BACKOFF_CAP_INITIAL_AT_MAX
103 inline bool IsBackoffCapInitialAtMaxEnabled() { return true; }
104 #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
105 inline bool IsCallTracerInTransportEnabled() { return true; }
106 inline bool IsChaoticGoodLegacyProtocolEnabled() { return false; }
107 inline bool IsDisableBufferHintOnHighMemoryPressureEnabled() { return false; }
108 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_APPLICATION_CALLBACKS
109 inline bool IsEventEngineApplicationCallbacksEnabled() { return true; }
110 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ
111 inline bool IsEventEngineCallbackCqEnabled() { return true; }
112 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
113 inline bool IsEventEngineClientEnabled() { return true; }
114 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
115 inline bool IsEventEngineDnsEnabled() { return true; }
116 inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
117 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
118 inline bool IsEventEngineListenerEnabled() { return true; }
119 inline bool IsFreeLargeAllocatorEnabled() { return false; }
120 inline bool IsLocalConnectorSecureEnabled() { return false; }
121 inline bool IsMaxPingsWoDataThrottleEnabled() { return false; }
122 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
123 inline bool IsMonitoringExperimentEnabled() { return true; }
124 inline bool IsMultipingEnabled() { return false; }
125 #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW
126 inline bool IsPickFirstNewEnabled() { return true; }
127 inline bool IsPosixEeSkipGrpcInitEnabled() { return false; }
128 inline bool IsPrioritizeFinishedRequestsEnabled() { return false; }
129 inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; }
130 inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; }
131 inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
132 inline bool IsRetryInCallv3Enabled() { return false; }
133 inline bool IsRqFastRejectEnabled() { return false; }
134 inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
135 inline bool IsTcpFrameSizeTuningEnabled() { return false; }
136 inline bool IsTcpRcvLowatEnabled() { return false; }
137 #define GRPC_EXPERIMENT_IS_INCLUDED_TIME_CACHING_IN_PARTY
138 inline bool IsTimeCachingInPartyEnabled() { return true; }
139 #define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
140 inline bool IsTraceRecordCallopsEnabled() { return true; }
141 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
142 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
143 inline bool IsWorkSerializerDispatchEnabled() { return true; }
144 inline bool IsServerListenerEnabled() { return false; }
145
146 #else
147 #define GRPC_EXPERIMENT_IS_INCLUDED_BACKOFF_CAP_INITIAL_AT_MAX
148 inline bool IsBackoffCapInitialAtMaxEnabled() { return true; }
149 #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
150 inline bool IsCallTracerInTransportEnabled() { return true; }
151 inline bool IsChaoticGoodLegacyProtocolEnabled() { return false; }
152 inline bool IsDisableBufferHintOnHighMemoryPressureEnabled() { return false; }
153 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_APPLICATION_CALLBACKS
154 inline bool IsEventEngineApplicationCallbacksEnabled() { return true; }
155 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ
156 inline bool IsEventEngineCallbackCqEnabled() { return true; }
157 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
158 inline bool IsEventEngineClientEnabled() { return true; }
159 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
160 inline bool IsEventEngineDnsEnabled() { return true; }
161 inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
162 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
163 inline bool IsEventEngineListenerEnabled() { return true; }
164 inline bool IsFreeLargeAllocatorEnabled() { return false; }
165 inline bool IsLocalConnectorSecureEnabled() { return false; }
166 inline bool IsMaxPingsWoDataThrottleEnabled() { return false; }
167 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
168 inline bool IsMonitoringExperimentEnabled() { return true; }
169 inline bool IsMultipingEnabled() { return false; }
170 #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW
171 inline bool IsPickFirstNewEnabled() { return true; }
172 inline bool IsPosixEeSkipGrpcInitEnabled() { return false; }
173 inline bool IsPrioritizeFinishedRequestsEnabled() { return false; }
174 inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; }
175 inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; }
176 inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
177 inline bool IsRetryInCallv3Enabled() { return false; }
178 inline bool IsRqFastRejectEnabled() { return false; }
179 inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
180 inline bool IsTcpFrameSizeTuningEnabled() { return false; }
181 inline bool IsTcpRcvLowatEnabled() { return false; }
182 #define GRPC_EXPERIMENT_IS_INCLUDED_TIME_CACHING_IN_PARTY
183 inline bool IsTimeCachingInPartyEnabled() { return true; }
184 #define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
185 inline bool IsTraceRecordCallopsEnabled() { return true; }
186 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
187 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
188 inline bool IsWorkSerializerDispatchEnabled() { return true; }
189 inline bool IsServerListenerEnabled() { return false; }
190 #endif
191
192 #else
193 enum ExperimentIds {
194 kExperimentIdBackoffCapInitialAtMax,
195 kExperimentIdCallTracerInTransport,
196 kExperimentIdChaoticGoodLegacyProtocol,
197 kExperimentIdDisableBufferHintOnHighMemoryPressure,
198 kExperimentIdEventEngineApplicationCallbacks,
199 kExperimentIdEventEngineCallbackCq,
200 kExperimentIdEventEngineClient,
201 kExperimentIdEventEngineDns,
202 kExperimentIdEventEngineDnsNonClientChannel,
203 kExperimentIdEventEngineListener,
204 kExperimentIdFreeLargeAllocator,
205 kExperimentIdLocalConnectorSecure,
206 kExperimentIdMaxPingsWoDataThrottle,
207 kExperimentIdMonitoringExperiment,
208 kExperimentIdMultiping,
209 kExperimentIdPickFirstNew,
210 kExperimentIdPosixEeSkipGrpcInit,
211 kExperimentIdPrioritizeFinishedRequests,
212 kExperimentIdPromiseBasedHttp2ClientTransport,
213 kExperimentIdPromiseBasedHttp2ServerTransport,
214 kExperimentIdPromiseBasedInprocTransport,
215 kExperimentIdRetryInCallv3,
216 kExperimentIdRqFastReject,
217 kExperimentIdScheduleCancellationOverWrite,
218 kExperimentIdTcpFrameSizeTuning,
219 kExperimentIdTcpRcvLowat,
220 kExperimentIdTimeCachingInParty,
221 kExperimentIdTraceRecordCallops,
222 kExperimentIdUnconstrainedMaxQuotaBufferSize,
223 kExperimentIdWorkSerializerDispatch,
224 kExperimentIdServerListener,
225 kNumExperiments
226 };
227 #define GRPC_EXPERIMENT_IS_INCLUDED_BACKOFF_CAP_INITIAL_AT_MAX
228 inline bool IsBackoffCapInitialAtMaxEnabled() {
229 return IsExperimentEnabled<kExperimentIdBackoffCapInitialAtMax>();
230 }
231 #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
232 inline bool IsCallTracerInTransportEnabled() {
233 return IsExperimentEnabled<kExperimentIdCallTracerInTransport>();
234 }
235 #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_LEGACY_PROTOCOL
236 inline bool IsChaoticGoodLegacyProtocolEnabled() {
237 return IsExperimentEnabled<kExperimentIdChaoticGoodLegacyProtocol>();
238 }
239 #define GRPC_EXPERIMENT_IS_INCLUDED_DISABLE_BUFFER_HINT_ON_HIGH_MEMORY_PRESSURE
240 inline bool IsDisableBufferHintOnHighMemoryPressureEnabled() {
241 return IsExperimentEnabled<
242 kExperimentIdDisableBufferHintOnHighMemoryPressure>();
243 }
244 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_APPLICATION_CALLBACKS
245 inline bool IsEventEngineApplicationCallbacksEnabled() {
246 return IsExperimentEnabled<kExperimentIdEventEngineApplicationCallbacks>();
247 }
248 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CALLBACK_CQ
249 inline bool IsEventEngineCallbackCqEnabled() {
250 return IsExperimentEnabled<kExperimentIdEventEngineCallbackCq>();
251 }
252 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
253 inline bool IsEventEngineClientEnabled() {
254 return IsExperimentEnabled<kExperimentIdEventEngineClient>();
255 }
256 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
257 inline bool IsEventEngineDnsEnabled() {
258 return IsExperimentEnabled<kExperimentIdEventEngineDns>();
259 }
260 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS_NON_CLIENT_CHANNEL
261 inline bool IsEventEngineDnsNonClientChannelEnabled() {
262 return IsExperimentEnabled<kExperimentIdEventEngineDnsNonClientChannel>();
263 }
264 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
265 inline bool IsEventEngineListenerEnabled() {
266 return IsExperimentEnabled<kExperimentIdEventEngineListener>();
267 }
268 #define GRPC_EXPERIMENT_IS_INCLUDED_FREE_LARGE_ALLOCATOR
269 inline bool IsFreeLargeAllocatorEnabled() {
270 return IsExperimentEnabled<kExperimentIdFreeLargeAllocator>();
271 }
272 #define GRPC_EXPERIMENT_IS_INCLUDED_LOCAL_CONNECTOR_SECURE
273 inline bool IsLocalConnectorSecureEnabled() {
274 return IsExperimentEnabled<kExperimentIdLocalConnectorSecure>();
275 }
276 #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_PINGS_WO_DATA_THROTTLE
277 inline bool IsMaxPingsWoDataThrottleEnabled() {
278 return IsExperimentEnabled<kExperimentIdMaxPingsWoDataThrottle>();
279 }
280 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
281 inline bool IsMonitoringExperimentEnabled() {
282 return IsExperimentEnabled<kExperimentIdMonitoringExperiment>();
283 }
284 #define GRPC_EXPERIMENT_IS_INCLUDED_MULTIPING
285 inline bool IsMultipingEnabled() {
286 return IsExperimentEnabled<kExperimentIdMultiping>();
287 }
288 #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW
289 inline bool IsPickFirstNewEnabled() {
290 return IsExperimentEnabled<kExperimentIdPickFirstNew>();
291 }
292 #define GRPC_EXPERIMENT_IS_INCLUDED_POSIX_EE_SKIP_GRPC_INIT
293 inline bool IsPosixEeSkipGrpcInitEnabled() {
294 return IsExperimentEnabled<kExperimentIdPosixEeSkipGrpcInit>();
295 }
296 #define GRPC_EXPERIMENT_IS_INCLUDED_PRIORITIZE_FINISHED_REQUESTS
297 inline bool IsPrioritizeFinishedRequestsEnabled() {
298 return IsExperimentEnabled<kExperimentIdPrioritizeFinishedRequests>();
299 }
300 #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_HTTP2_CLIENT_TRANSPORT
301 inline bool IsPromiseBasedHttp2ClientTransportEnabled() {
302 return IsExperimentEnabled<kExperimentIdPromiseBasedHttp2ClientTransport>();
303 }
304 #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_HTTP2_SERVER_TRANSPORT
305 inline bool IsPromiseBasedHttp2ServerTransportEnabled() {
306 return IsExperimentEnabled<kExperimentIdPromiseBasedHttp2ServerTransport>();
307 }
308 #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_INPROC_TRANSPORT
309 inline bool IsPromiseBasedInprocTransportEnabled() {
310 return IsExperimentEnabled<kExperimentIdPromiseBasedInprocTransport>();
311 }
312 #define GRPC_EXPERIMENT_IS_INCLUDED_RETRY_IN_CALLV3
313 inline bool IsRetryInCallv3Enabled() {
314 return IsExperimentEnabled<kExperimentIdRetryInCallv3>();
315 }
316 #define GRPC_EXPERIMENT_IS_INCLUDED_RQ_FAST_REJECT
317 inline bool IsRqFastRejectEnabled() {
318 return IsExperimentEnabled<kExperimentIdRqFastReject>();
319 }
320 #define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE
321 inline bool IsScheduleCancellationOverWriteEnabled() {
322 return IsExperimentEnabled<kExperimentIdScheduleCancellationOverWrite>();
323 }
324 #define GRPC_EXPERIMENT_IS_INCLUDED_TCP_FRAME_SIZE_TUNING
325 inline bool IsTcpFrameSizeTuningEnabled() {
326 return IsExperimentEnabled<kExperimentIdTcpFrameSizeTuning>();
327 }
328 #define GRPC_EXPERIMENT_IS_INCLUDED_TCP_RCV_LOWAT
329 inline bool IsTcpRcvLowatEnabled() {
330 return IsExperimentEnabled<kExperimentIdTcpRcvLowat>();
331 }
332 #define GRPC_EXPERIMENT_IS_INCLUDED_TIME_CACHING_IN_PARTY
333 inline bool IsTimeCachingInPartyEnabled() {
334 return IsExperimentEnabled<kExperimentIdTimeCachingInParty>();
335 }
336 #define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
337 inline bool IsTraceRecordCallopsEnabled() {
338 return IsExperimentEnabled<kExperimentIdTraceRecordCallops>();
339 }
340 #define GRPC_EXPERIMENT_IS_INCLUDED_UNCONSTRAINED_MAX_QUOTA_BUFFER_SIZE
341 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
342 return IsExperimentEnabled<kExperimentIdUnconstrainedMaxQuotaBufferSize>();
343 }
344 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
345 inline bool IsWorkSerializerDispatchEnabled() {
346 return IsExperimentEnabled<kExperimentIdWorkSerializerDispatch>();
347 }
348 #define GRPC_EXPERIMENT_IS_INCLUDED_SERVER_LISTENER
349 inline bool IsServerListenerEnabled() {
350 return IsExperimentEnabled<kExperimentIdServerListener>();
351 }
352
353 extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
354
355 #endif
356 } // namespace grpc_core
357
358 #endif // GRPC_SRC_CORE_LIB_EXPERIMENTS_EXPERIMENTS_H
359