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)
IsCallStatusOverrideOnCancellationEnabled()60 inline bool IsCallStatusOverrideOnCancellationEnabled() { return false; }
IsCallV3Enabled()61 inline bool IsCallV3Enabled() { return false; }
IsCanaryClientPrivacyEnabled()62 inline bool IsCanaryClientPrivacyEnabled() { return false; }
IsClientPrivacyEnabled()63 inline bool IsClientPrivacyEnabled() { return false; }
IsEventEngineClientEnabled()64 inline bool IsEventEngineClientEnabled() { return false; }
IsEventEngineDnsEnabled()65 inline bool IsEventEngineDnsEnabled() { return false; }
IsEventEngineListenerEnabled()66 inline bool IsEventEngineListenerEnabled() { return false; }
IsFreeLargeAllocatorEnabled()67 inline bool IsFreeLargeAllocatorEnabled() { return false; }
68 #define GRPC_EXPERIMENT_IS_INCLUDED_HTTP2_STATS_FIX
IsHttp2StatsFixEnabled()69 inline bool IsHttp2StatsFixEnabled() { return true; }
IsKeepaliveFixEnabled()70 inline bool IsKeepaliveFixEnabled() { return false; }
IsKeepaliveServerFixEnabled()71 inline bool IsKeepaliveServerFixEnabled() { return false; }
72 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
IsMonitoringExperimentEnabled()73 inline bool IsMonitoringExperimentEnabled() { return true; }
IsMultipingEnabled()74 inline bool IsMultipingEnabled() { return false; }
IsPeerStateBasedFramingEnabled()75 inline bool IsPeerStateBasedFramingEnabled() { return false; }
76 #define GRPC_EXPERIMENT_IS_INCLUDED_PENDING_QUEUE_CAP
IsPendingQueueCapEnabled()77 inline bool IsPendingQueueCapEnabled() { return true; }
IsPromiseBasedClientCallEnabled()78 inline bool IsPromiseBasedClientCallEnabled() { return false; }
IsPromiseBasedServerCallEnabled()79 inline bool IsPromiseBasedServerCallEnabled() { return false; }
IsChaoticGoodEnabled()80 inline bool IsChaoticGoodEnabled() { return false; }
IsPromiseBasedInprocTransportEnabled()81 inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
IsRstpitEnabled()82 inline bool IsRstpitEnabled() { return false; }
IsScheduleCancellationOverWriteEnabled()83 inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
IsServerPrivacyEnabled()84 inline bool IsServerPrivacyEnabled() { return false; }
IsTcpFrameSizeTuningEnabled()85 inline bool IsTcpFrameSizeTuningEnabled() { return false; }
IsTcpRcvLowatEnabled()86 inline bool IsTcpRcvLowatEnabled() { return false; }
IsTraceRecordCallopsEnabled()87 inline bool IsTraceRecordCallopsEnabled() { return false; }
IsUnconstrainedMaxQuotaBufferSizeEnabled()88 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
89 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
IsWorkSerializerClearsTimeCacheEnabled()90 inline bool IsWorkSerializerClearsTimeCacheEnabled() { return true; }
IsWorkSerializerDispatchEnabled()91 inline bool IsWorkSerializerDispatchEnabled() { return false; }
92
93 #elif defined(GPR_WINDOWS)
94 inline bool IsCallStatusOverrideOnCancellationEnabled() { return false; }
95 inline bool IsCallV3Enabled() { return false; }
96 inline bool IsCanaryClientPrivacyEnabled() { return false; }
97 inline bool IsClientPrivacyEnabled() { return false; }
98 inline bool IsEventEngineClientEnabled() { return false; }
99 inline bool IsEventEngineDnsEnabled() { return false; }
100 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
101 inline bool IsEventEngineListenerEnabled() { return true; }
102 inline bool IsFreeLargeAllocatorEnabled() { return false; }
103 #define GRPC_EXPERIMENT_IS_INCLUDED_HTTP2_STATS_FIX
104 inline bool IsHttp2StatsFixEnabled() { return true; }
105 inline bool IsKeepaliveFixEnabled() { return false; }
106 inline bool IsKeepaliveServerFixEnabled() { return false; }
107 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
108 inline bool IsMonitoringExperimentEnabled() { return true; }
109 inline bool IsMultipingEnabled() { return false; }
110 inline bool IsPeerStateBasedFramingEnabled() { return false; }
111 #define GRPC_EXPERIMENT_IS_INCLUDED_PENDING_QUEUE_CAP
112 inline bool IsPendingQueueCapEnabled() { return true; }
113 inline bool IsPromiseBasedClientCallEnabled() { return false; }
114 inline bool IsPromiseBasedServerCallEnabled() { return false; }
115 inline bool IsChaoticGoodEnabled() { return false; }
116 inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
117 inline bool IsRstpitEnabled() { return false; }
118 inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
119 inline bool IsServerPrivacyEnabled() { return false; }
120 inline bool IsTcpFrameSizeTuningEnabled() { return false; }
121 inline bool IsTcpRcvLowatEnabled() { return false; }
122 inline bool IsTraceRecordCallopsEnabled() { return false; }
123 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
124 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
125 inline bool IsWorkSerializerClearsTimeCacheEnabled() { return true; }
126 inline bool IsWorkSerializerDispatchEnabled() { return false; }
127
128 #else
129 inline bool IsCallStatusOverrideOnCancellationEnabled() { return false; }
130 inline bool IsCallV3Enabled() { return false; }
131 inline bool IsCanaryClientPrivacyEnabled() { return false; }
132 inline bool IsClientPrivacyEnabled() { return false; }
133 inline bool IsEventEngineClientEnabled() { return false; }
134 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
135 inline bool IsEventEngineDnsEnabled() { return true; }
136 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
137 inline bool IsEventEngineListenerEnabled() { return true; }
138 inline bool IsFreeLargeAllocatorEnabled() { return false; }
139 #define GRPC_EXPERIMENT_IS_INCLUDED_HTTP2_STATS_FIX
140 inline bool IsHttp2StatsFixEnabled() { return true; }
141 inline bool IsKeepaliveFixEnabled() { return false; }
142 inline bool IsKeepaliveServerFixEnabled() { return false; }
143 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
144 inline bool IsMonitoringExperimentEnabled() { return true; }
145 inline bool IsMultipingEnabled() { return false; }
146 inline bool IsPeerStateBasedFramingEnabled() { return false; }
147 #define GRPC_EXPERIMENT_IS_INCLUDED_PENDING_QUEUE_CAP
148 inline bool IsPendingQueueCapEnabled() { return true; }
149 inline bool IsPromiseBasedClientCallEnabled() { return false; }
150 inline bool IsPromiseBasedServerCallEnabled() { return false; }
151 inline bool IsChaoticGoodEnabled() { return false; }
152 inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
153 inline bool IsRstpitEnabled() { return false; }
154 inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
155 inline bool IsServerPrivacyEnabled() { return false; }
156 inline bool IsTcpFrameSizeTuningEnabled() { return false; }
157 inline bool IsTcpRcvLowatEnabled() { return false; }
158 inline bool IsTraceRecordCallopsEnabled() { return false; }
159 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
160 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
161 inline bool IsWorkSerializerClearsTimeCacheEnabled() { return true; }
162 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
163 inline bool IsWorkSerializerDispatchEnabled() { return true; }
164 #endif
165
166 #else
167 enum ExperimentIds {
168 kExperimentIdCallStatusOverrideOnCancellation,
169 kExperimentIdCallV3,
170 kExperimentIdCanaryClientPrivacy,
171 kExperimentIdClientPrivacy,
172 kExperimentIdEventEngineClient,
173 kExperimentIdEventEngineDns,
174 kExperimentIdEventEngineListener,
175 kExperimentIdFreeLargeAllocator,
176 kExperimentIdHttp2StatsFix,
177 kExperimentIdKeepaliveFix,
178 kExperimentIdKeepaliveServerFix,
179 kExperimentIdMonitoringExperiment,
180 kExperimentIdMultiping,
181 kExperimentIdPeerStateBasedFraming,
182 kExperimentIdPendingQueueCap,
183 kExperimentIdPromiseBasedClientCall,
184 kExperimentIdPromiseBasedServerCall,
185 kExperimentIdChaoticGood,
186 kExperimentIdPromiseBasedInprocTransport,
187 kExperimentIdRstpit,
188 kExperimentIdScheduleCancellationOverWrite,
189 kExperimentIdServerPrivacy,
190 kExperimentIdTcpFrameSizeTuning,
191 kExperimentIdTcpRcvLowat,
192 kExperimentIdTraceRecordCallops,
193 kExperimentIdUnconstrainedMaxQuotaBufferSize,
194 kExperimentIdWorkSerializerClearsTimeCache,
195 kExperimentIdWorkSerializerDispatch,
196 kNumExperiments
197 };
198 #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_STATUS_OVERRIDE_ON_CANCELLATION
199 inline bool IsCallStatusOverrideOnCancellationEnabled() {
200 return IsExperimentEnabled(kExperimentIdCallStatusOverrideOnCancellation);
201 }
202 #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_V3
203 inline bool IsCallV3Enabled() {
204 return IsExperimentEnabled(kExperimentIdCallV3);
205 }
206 #define GRPC_EXPERIMENT_IS_INCLUDED_CANARY_CLIENT_PRIVACY
207 inline bool IsCanaryClientPrivacyEnabled() {
208 return IsExperimentEnabled(kExperimentIdCanaryClientPrivacy);
209 }
210 #define GRPC_EXPERIMENT_IS_INCLUDED_CLIENT_PRIVACY
211 inline bool IsClientPrivacyEnabled() {
212 return IsExperimentEnabled(kExperimentIdClientPrivacy);
213 }
214 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
215 inline bool IsEventEngineClientEnabled() {
216 return IsExperimentEnabled(kExperimentIdEventEngineClient);
217 }
218 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
219 inline bool IsEventEngineDnsEnabled() {
220 return IsExperimentEnabled(kExperimentIdEventEngineDns);
221 }
222 #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
223 inline bool IsEventEngineListenerEnabled() {
224 return IsExperimentEnabled(kExperimentIdEventEngineListener);
225 }
226 #define GRPC_EXPERIMENT_IS_INCLUDED_FREE_LARGE_ALLOCATOR
227 inline bool IsFreeLargeAllocatorEnabled() {
228 return IsExperimentEnabled(kExperimentIdFreeLargeAllocator);
229 }
230 #define GRPC_EXPERIMENT_IS_INCLUDED_HTTP2_STATS_FIX
231 inline bool IsHttp2StatsFixEnabled() {
232 return IsExperimentEnabled(kExperimentIdHttp2StatsFix);
233 }
234 #define GRPC_EXPERIMENT_IS_INCLUDED_KEEPALIVE_FIX
235 inline bool IsKeepaliveFixEnabled() {
236 return IsExperimentEnabled(kExperimentIdKeepaliveFix);
237 }
238 #define GRPC_EXPERIMENT_IS_INCLUDED_KEEPALIVE_SERVER_FIX
239 inline bool IsKeepaliveServerFixEnabled() {
240 return IsExperimentEnabled(kExperimentIdKeepaliveServerFix);
241 }
242 #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
243 inline bool IsMonitoringExperimentEnabled() {
244 return IsExperimentEnabled(kExperimentIdMonitoringExperiment);
245 }
246 #define GRPC_EXPERIMENT_IS_INCLUDED_MULTIPING
247 inline bool IsMultipingEnabled() {
248 return IsExperimentEnabled(kExperimentIdMultiping);
249 }
250 #define GRPC_EXPERIMENT_IS_INCLUDED_PEER_STATE_BASED_FRAMING
251 inline bool IsPeerStateBasedFramingEnabled() {
252 return IsExperimentEnabled(kExperimentIdPeerStateBasedFraming);
253 }
254 #define GRPC_EXPERIMENT_IS_INCLUDED_PENDING_QUEUE_CAP
255 inline bool IsPendingQueueCapEnabled() {
256 return IsExperimentEnabled(kExperimentIdPendingQueueCap);
257 }
258 #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
259 inline bool IsPromiseBasedClientCallEnabled() {
260 return IsExperimentEnabled(kExperimentIdPromiseBasedClientCall);
261 }
262 #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
263 inline bool IsPromiseBasedServerCallEnabled() {
264 return IsExperimentEnabled(kExperimentIdPromiseBasedServerCall);
265 }
266 #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD
267 inline bool IsChaoticGoodEnabled() {
268 return IsExperimentEnabled(kExperimentIdChaoticGood);
269 }
270 #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_INPROC_TRANSPORT
271 inline bool IsPromiseBasedInprocTransportEnabled() {
272 return IsExperimentEnabled(kExperimentIdPromiseBasedInprocTransport);
273 }
274 #define GRPC_EXPERIMENT_IS_INCLUDED_RSTPIT
275 inline bool IsRstpitEnabled() {
276 return IsExperimentEnabled(kExperimentIdRstpit);
277 }
278 #define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE
279 inline bool IsScheduleCancellationOverWriteEnabled() {
280 return IsExperimentEnabled(kExperimentIdScheduleCancellationOverWrite);
281 }
282 #define GRPC_EXPERIMENT_IS_INCLUDED_SERVER_PRIVACY
283 inline bool IsServerPrivacyEnabled() {
284 return IsExperimentEnabled(kExperimentIdServerPrivacy);
285 }
286 #define GRPC_EXPERIMENT_IS_INCLUDED_TCP_FRAME_SIZE_TUNING
287 inline bool IsTcpFrameSizeTuningEnabled() {
288 return IsExperimentEnabled(kExperimentIdTcpFrameSizeTuning);
289 }
290 #define GRPC_EXPERIMENT_IS_INCLUDED_TCP_RCV_LOWAT
291 inline bool IsTcpRcvLowatEnabled() {
292 return IsExperimentEnabled(kExperimentIdTcpRcvLowat);
293 }
294 #define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
295 inline bool IsTraceRecordCallopsEnabled() {
296 return IsExperimentEnabled(kExperimentIdTraceRecordCallops);
297 }
298 #define GRPC_EXPERIMENT_IS_INCLUDED_UNCONSTRAINED_MAX_QUOTA_BUFFER_SIZE
299 inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
300 return IsExperimentEnabled(kExperimentIdUnconstrainedMaxQuotaBufferSize);
301 }
302 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_CLEARS_TIME_CACHE
303 inline bool IsWorkSerializerClearsTimeCacheEnabled() {
304 return IsExperimentEnabled(kExperimentIdWorkSerializerClearsTimeCache);
305 }
306 #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
307 inline bool IsWorkSerializerDispatchEnabled() {
308 return IsExperimentEnabled(kExperimentIdWorkSerializerDispatch);
309 }
310
311 extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
312
313 #endif
314 } // namespace grpc_core
315
316 #endif // GRPC_SRC_CORE_LIB_EXPERIMENTS_EXPERIMENTS_H
317