• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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