xref: /aosp_15_r20/external/grpc-grpc/src/proto/grpc/testing/control.proto (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker// Copyright 2015 gRPC authors.
2*cc02d7e2SAndroid Build Coastguard Worker//
3*cc02d7e2SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*cc02d7e2SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*cc02d7e2SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*cc02d7e2SAndroid Build Coastguard Worker//
7*cc02d7e2SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*cc02d7e2SAndroid Build Coastguard Worker//
9*cc02d7e2SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*cc02d7e2SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*cc02d7e2SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cc02d7e2SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*cc02d7e2SAndroid Build Coastguard Worker// limitations under the License.
14*cc02d7e2SAndroid Build Coastguard Worker
15*cc02d7e2SAndroid Build Coastguard Workersyntax = "proto3";
16*cc02d7e2SAndroid Build Coastguard Worker
17*cc02d7e2SAndroid Build Coastguard Workerimport "src/proto/grpc/testing/payloads.proto";
18*cc02d7e2SAndroid Build Coastguard Workerimport "src/proto/grpc/testing/stats.proto";
19*cc02d7e2SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto";
20*cc02d7e2SAndroid Build Coastguard Worker
21*cc02d7e2SAndroid Build Coastguard Workerpackage grpc.testing;
22*cc02d7e2SAndroid Build Coastguard Worker
23*cc02d7e2SAndroid Build Coastguard Workerenum ClientType {
24*cc02d7e2SAndroid Build Coastguard Worker  // Many languages support a basic distinction between using
25*cc02d7e2SAndroid Build Coastguard Worker  // sync or async client, and this allows the specification
26*cc02d7e2SAndroid Build Coastguard Worker  SYNC_CLIENT = 0;
27*cc02d7e2SAndroid Build Coastguard Worker  ASYNC_CLIENT = 1;
28*cc02d7e2SAndroid Build Coastguard Worker  OTHER_CLIENT = 2; // used for some language-specific variants
29*cc02d7e2SAndroid Build Coastguard Worker  CALLBACK_CLIENT = 3;
30*cc02d7e2SAndroid Build Coastguard Worker}
31*cc02d7e2SAndroid Build Coastguard Worker
32*cc02d7e2SAndroid Build Coastguard Workerenum ServerType {
33*cc02d7e2SAndroid Build Coastguard Worker  SYNC_SERVER = 0;
34*cc02d7e2SAndroid Build Coastguard Worker  ASYNC_SERVER = 1;
35*cc02d7e2SAndroid Build Coastguard Worker  ASYNC_GENERIC_SERVER = 2;
36*cc02d7e2SAndroid Build Coastguard Worker  OTHER_SERVER = 3; // used for some language-specific variants
37*cc02d7e2SAndroid Build Coastguard Worker  CALLBACK_SERVER = 4;
38*cc02d7e2SAndroid Build Coastguard Worker}
39*cc02d7e2SAndroid Build Coastguard Worker
40*cc02d7e2SAndroid Build Coastguard Workerenum RpcType {
41*cc02d7e2SAndroid Build Coastguard Worker  UNARY = 0;
42*cc02d7e2SAndroid Build Coastguard Worker  STREAMING = 1;
43*cc02d7e2SAndroid Build Coastguard Worker  STREAMING_FROM_CLIENT = 2;
44*cc02d7e2SAndroid Build Coastguard Worker  STREAMING_FROM_SERVER = 3;
45*cc02d7e2SAndroid Build Coastguard Worker  STREAMING_BOTH_WAYS = 4;
46*cc02d7e2SAndroid Build Coastguard Worker}
47*cc02d7e2SAndroid Build Coastguard Worker
48*cc02d7e2SAndroid Build Coastguard Worker// Parameters of poisson process distribution, which is a good representation
49*cc02d7e2SAndroid Build Coastguard Worker// of activity coming in from independent identical stationary sources.
50*cc02d7e2SAndroid Build Coastguard Workermessage PoissonParams {
51*cc02d7e2SAndroid Build Coastguard Worker  // The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
52*cc02d7e2SAndroid Build Coastguard Worker  double offered_load = 1;
53*cc02d7e2SAndroid Build Coastguard Worker}
54*cc02d7e2SAndroid Build Coastguard Worker
55*cc02d7e2SAndroid Build Coastguard Worker// Once an RPC finishes, immediately start a new one.
56*cc02d7e2SAndroid Build Coastguard Worker// No configuration parameters needed.
57*cc02d7e2SAndroid Build Coastguard Workermessage ClosedLoopParams {}
58*cc02d7e2SAndroid Build Coastguard Worker
59*cc02d7e2SAndroid Build Coastguard Workermessage LoadParams {
60*cc02d7e2SAndroid Build Coastguard Worker  oneof load {
61*cc02d7e2SAndroid Build Coastguard Worker    ClosedLoopParams closed_loop = 1;
62*cc02d7e2SAndroid Build Coastguard Worker    PoissonParams poisson = 2;
63*cc02d7e2SAndroid Build Coastguard Worker  };
64*cc02d7e2SAndroid Build Coastguard Worker}
65*cc02d7e2SAndroid Build Coastguard Worker
66*cc02d7e2SAndroid Build Coastguard Worker// presence of SecurityParams implies use of TLS
67*cc02d7e2SAndroid Build Coastguard Workermessage SecurityParams {
68*cc02d7e2SAndroid Build Coastguard Worker  bool use_test_ca = 1;
69*cc02d7e2SAndroid Build Coastguard Worker  string server_host_override = 2;
70*cc02d7e2SAndroid Build Coastguard Worker  string cred_type = 3;
71*cc02d7e2SAndroid Build Coastguard Worker}
72*cc02d7e2SAndroid Build Coastguard Worker
73*cc02d7e2SAndroid Build Coastguard Workermessage ChannelArg {
74*cc02d7e2SAndroid Build Coastguard Worker  string name = 1;
75*cc02d7e2SAndroid Build Coastguard Worker  oneof value {
76*cc02d7e2SAndroid Build Coastguard Worker    string str_value = 2;
77*cc02d7e2SAndroid Build Coastguard Worker    int32 int_value = 3;
78*cc02d7e2SAndroid Build Coastguard Worker  }
79*cc02d7e2SAndroid Build Coastguard Worker}
80*cc02d7e2SAndroid Build Coastguard Worker
81*cc02d7e2SAndroid Build Coastguard Workermessage ClientConfig {
82*cc02d7e2SAndroid Build Coastguard Worker  // List of targets to connect to. At least one target needs to be specified.
83*cc02d7e2SAndroid Build Coastguard Worker  repeated string server_targets = 1;
84*cc02d7e2SAndroid Build Coastguard Worker  ClientType client_type = 2;
85*cc02d7e2SAndroid Build Coastguard Worker  SecurityParams security_params = 3;
86*cc02d7e2SAndroid Build Coastguard Worker  // How many concurrent RPCs to start for each channel.
87*cc02d7e2SAndroid Build Coastguard Worker  // For synchronous client, use a separate thread for each outstanding RPC.
88*cc02d7e2SAndroid Build Coastguard Worker  int32 outstanding_rpcs_per_channel = 4;
89*cc02d7e2SAndroid Build Coastguard Worker  // Number of independent client channels to create.
90*cc02d7e2SAndroid Build Coastguard Worker  // i-th channel will connect to server_target[i % server_targets.size()]
91*cc02d7e2SAndroid Build Coastguard Worker  int32 client_channels = 5;
92*cc02d7e2SAndroid Build Coastguard Worker  // Only for async client. Number of threads to use to start/manage RPCs.
93*cc02d7e2SAndroid Build Coastguard Worker  int32 async_client_threads = 7;
94*cc02d7e2SAndroid Build Coastguard Worker  RpcType rpc_type = 8;
95*cc02d7e2SAndroid Build Coastguard Worker  // The requested load for the entire client (aggregated over all the threads).
96*cc02d7e2SAndroid Build Coastguard Worker  LoadParams load_params = 10;
97*cc02d7e2SAndroid Build Coastguard Worker  PayloadConfig payload_config = 11;
98*cc02d7e2SAndroid Build Coastguard Worker  HistogramParams histogram_params = 12;
99*cc02d7e2SAndroid Build Coastguard Worker
100*cc02d7e2SAndroid Build Coastguard Worker  // Specify the cores we should run the client on, if desired
101*cc02d7e2SAndroid Build Coastguard Worker  repeated int32 core_list = 13;
102*cc02d7e2SAndroid Build Coastguard Worker  int32 core_limit = 14;
103*cc02d7e2SAndroid Build Coastguard Worker
104*cc02d7e2SAndroid Build Coastguard Worker  // If we use an OTHER_CLIENT client_type, this string gives more detail
105*cc02d7e2SAndroid Build Coastguard Worker  string other_client_api = 15;
106*cc02d7e2SAndroid Build Coastguard Worker
107*cc02d7e2SAndroid Build Coastguard Worker  repeated ChannelArg channel_args = 16;
108*cc02d7e2SAndroid Build Coastguard Worker
109*cc02d7e2SAndroid Build Coastguard Worker  // Number of threads that share each completion queue
110*cc02d7e2SAndroid Build Coastguard Worker  int32 threads_per_cq = 17;
111*cc02d7e2SAndroid Build Coastguard Worker
112*cc02d7e2SAndroid Build Coastguard Worker  // Number of messages on a stream before it gets finished/restarted
113*cc02d7e2SAndroid Build Coastguard Worker  int32 messages_per_stream = 18;
114*cc02d7e2SAndroid Build Coastguard Worker
115*cc02d7e2SAndroid Build Coastguard Worker  // Use coalescing API when possible.
116*cc02d7e2SAndroid Build Coastguard Worker  bool use_coalesce_api = 19;
117*cc02d7e2SAndroid Build Coastguard Worker
118*cc02d7e2SAndroid Build Coastguard Worker  // If 0, disabled. Else, specifies the period between gathering latency
119*cc02d7e2SAndroid Build Coastguard Worker  // medians in milliseconds.
120*cc02d7e2SAndroid Build Coastguard Worker  int32 median_latency_collection_interval_millis = 20;
121*cc02d7e2SAndroid Build Coastguard Worker
122*cc02d7e2SAndroid Build Coastguard Worker  // Number of client processes. 0 indicates no restriction.
123*cc02d7e2SAndroid Build Coastguard Worker  int32 client_processes = 21;
124*cc02d7e2SAndroid Build Coastguard Worker}
125*cc02d7e2SAndroid Build Coastguard Worker
126*cc02d7e2SAndroid Build Coastguard Workermessage ClientStatus { ClientStats stats = 1; }
127*cc02d7e2SAndroid Build Coastguard Worker
128*cc02d7e2SAndroid Build Coastguard Worker// Request current stats
129*cc02d7e2SAndroid Build Coastguard Workermessage Mark {
130*cc02d7e2SAndroid Build Coastguard Worker  // if true, the stats will be reset after taking their snapshot.
131*cc02d7e2SAndroid Build Coastguard Worker  bool reset = 1;
132*cc02d7e2SAndroid Build Coastguard Worker}
133*cc02d7e2SAndroid Build Coastguard Worker
134*cc02d7e2SAndroid Build Coastguard Workermessage ClientArgs {
135*cc02d7e2SAndroid Build Coastguard Worker  oneof argtype {
136*cc02d7e2SAndroid Build Coastguard Worker    ClientConfig setup = 1;
137*cc02d7e2SAndroid Build Coastguard Worker    Mark mark = 2;
138*cc02d7e2SAndroid Build Coastguard Worker  }
139*cc02d7e2SAndroid Build Coastguard Worker}
140*cc02d7e2SAndroid Build Coastguard Worker
141*cc02d7e2SAndroid Build Coastguard Workermessage ServerConfig {
142*cc02d7e2SAndroid Build Coastguard Worker  ServerType server_type = 1;
143*cc02d7e2SAndroid Build Coastguard Worker  SecurityParams security_params = 2;
144*cc02d7e2SAndroid Build Coastguard Worker  // Port on which to listen. Zero means pick unused port.
145*cc02d7e2SAndroid Build Coastguard Worker  int32 port = 4;
146*cc02d7e2SAndroid Build Coastguard Worker  // Only for async server. Number of threads used to serve the requests.
147*cc02d7e2SAndroid Build Coastguard Worker  int32 async_server_threads = 7;
148*cc02d7e2SAndroid Build Coastguard Worker  // Specify the number of cores to limit server to, if desired
149*cc02d7e2SAndroid Build Coastguard Worker  int32 core_limit = 8;
150*cc02d7e2SAndroid Build Coastguard Worker  // payload config, used in generic server.
151*cc02d7e2SAndroid Build Coastguard Worker  // Note this must NOT be used in proto (non-generic) servers. For proto servers,
152*cc02d7e2SAndroid Build Coastguard Worker  // 'response sizes' must be configured from the 'response_size' field of the
153*cc02d7e2SAndroid Build Coastguard Worker  // 'SimpleRequest' objects in RPC requests.
154*cc02d7e2SAndroid Build Coastguard Worker  PayloadConfig payload_config = 9;
155*cc02d7e2SAndroid Build Coastguard Worker
156*cc02d7e2SAndroid Build Coastguard Worker  // Specify the cores we should run the server on, if desired
157*cc02d7e2SAndroid Build Coastguard Worker  repeated int32 core_list = 10;
158*cc02d7e2SAndroid Build Coastguard Worker
159*cc02d7e2SAndroid Build Coastguard Worker  // If we use an OTHER_SERVER client_type, this string gives more detail
160*cc02d7e2SAndroid Build Coastguard Worker  string other_server_api = 11;
161*cc02d7e2SAndroid Build Coastguard Worker
162*cc02d7e2SAndroid Build Coastguard Worker  // Number of threads that share each completion queue
163*cc02d7e2SAndroid Build Coastguard Worker  int32 threads_per_cq = 12;
164*cc02d7e2SAndroid Build Coastguard Worker
165*cc02d7e2SAndroid Build Coastguard Worker  // c++-only options (for now) --------------------------------
166*cc02d7e2SAndroid Build Coastguard Worker
167*cc02d7e2SAndroid Build Coastguard Worker  // Buffer pool size (no buffer pool specified if unset)
168*cc02d7e2SAndroid Build Coastguard Worker  int32 resource_quota_size = 1001;
169*cc02d7e2SAndroid Build Coastguard Worker  repeated ChannelArg channel_args = 1002;
170*cc02d7e2SAndroid Build Coastguard Worker
171*cc02d7e2SAndroid Build Coastguard Worker  // Number of server processes. 0 indicates no restriction.
172*cc02d7e2SAndroid Build Coastguard Worker  int32 server_processes = 21;
173*cc02d7e2SAndroid Build Coastguard Worker}
174*cc02d7e2SAndroid Build Coastguard Worker
175*cc02d7e2SAndroid Build Coastguard Workermessage ServerArgs {
176*cc02d7e2SAndroid Build Coastguard Worker  oneof argtype {
177*cc02d7e2SAndroid Build Coastguard Worker    ServerConfig setup = 1;
178*cc02d7e2SAndroid Build Coastguard Worker    Mark mark = 2;
179*cc02d7e2SAndroid Build Coastguard Worker  }
180*cc02d7e2SAndroid Build Coastguard Worker}
181*cc02d7e2SAndroid Build Coastguard Worker
182*cc02d7e2SAndroid Build Coastguard Workermessage ServerStatus {
183*cc02d7e2SAndroid Build Coastguard Worker  ServerStats stats = 1;
184*cc02d7e2SAndroid Build Coastguard Worker  // the port bound by the server
185*cc02d7e2SAndroid Build Coastguard Worker  int32 port = 2;
186*cc02d7e2SAndroid Build Coastguard Worker  // Number of cores available to the server
187*cc02d7e2SAndroid Build Coastguard Worker  int32 cores = 3;
188*cc02d7e2SAndroid Build Coastguard Worker}
189*cc02d7e2SAndroid Build Coastguard Worker
190*cc02d7e2SAndroid Build Coastguard Workermessage CoreRequest {
191*cc02d7e2SAndroid Build Coastguard Worker}
192*cc02d7e2SAndroid Build Coastguard Worker
193*cc02d7e2SAndroid Build Coastguard Workermessage CoreResponse {
194*cc02d7e2SAndroid Build Coastguard Worker  // Number of cores available on the server
195*cc02d7e2SAndroid Build Coastguard Worker  int32 cores = 1;
196*cc02d7e2SAndroid Build Coastguard Worker}
197*cc02d7e2SAndroid Build Coastguard Worker
198*cc02d7e2SAndroid Build Coastguard Workermessage Void {
199*cc02d7e2SAndroid Build Coastguard Worker}
200*cc02d7e2SAndroid Build Coastguard Worker
201*cc02d7e2SAndroid Build Coastguard Worker// A single performance scenario: input to qps_json_driver
202*cc02d7e2SAndroid Build Coastguard Workermessage Scenario {
203*cc02d7e2SAndroid Build Coastguard Worker  // Human readable name for this scenario
204*cc02d7e2SAndroid Build Coastguard Worker  string name = 1;
205*cc02d7e2SAndroid Build Coastguard Worker  // Client configuration
206*cc02d7e2SAndroid Build Coastguard Worker  ClientConfig client_config = 2;
207*cc02d7e2SAndroid Build Coastguard Worker  // Number of clients to start for the test
208*cc02d7e2SAndroid Build Coastguard Worker  int32 num_clients = 3;
209*cc02d7e2SAndroid Build Coastguard Worker  // Server configuration
210*cc02d7e2SAndroid Build Coastguard Worker  ServerConfig server_config = 4;
211*cc02d7e2SAndroid Build Coastguard Worker  // Number of servers to start for the test
212*cc02d7e2SAndroid Build Coastguard Worker  int32 num_servers = 5;
213*cc02d7e2SAndroid Build Coastguard Worker  // Warmup period, in seconds
214*cc02d7e2SAndroid Build Coastguard Worker  int32 warmup_seconds = 6;
215*cc02d7e2SAndroid Build Coastguard Worker  // Benchmark time, in seconds
216*cc02d7e2SAndroid Build Coastguard Worker  int32 benchmark_seconds = 7;
217*cc02d7e2SAndroid Build Coastguard Worker  // Number of workers to spawn locally (usually zero)
218*cc02d7e2SAndroid Build Coastguard Worker  int32 spawn_local_worker_count = 8;
219*cc02d7e2SAndroid Build Coastguard Worker}
220*cc02d7e2SAndroid Build Coastguard Worker
221*cc02d7e2SAndroid Build Coastguard Worker// A set of scenarios to be run with qps_json_driver
222*cc02d7e2SAndroid Build Coastguard Workermessage Scenarios {
223*cc02d7e2SAndroid Build Coastguard Worker  repeated Scenario scenarios = 1;
224*cc02d7e2SAndroid Build Coastguard Worker}
225*cc02d7e2SAndroid Build Coastguard Worker
226*cc02d7e2SAndroid Build Coastguard Worker// Basic summary that can be computed from ClientStats and ServerStats
227*cc02d7e2SAndroid Build Coastguard Worker// once the scenario has finished.
228*cc02d7e2SAndroid Build Coastguard Workermessage ScenarioResultSummary
229*cc02d7e2SAndroid Build Coastguard Worker{
230*cc02d7e2SAndroid Build Coastguard Worker  // Total number of operations per second over all clients. What is counted as 1 'operation' depends on the benchmark scenarios:
231*cc02d7e2SAndroid Build Coastguard Worker  // For unary benchmarks, an operation is processing of a single unary RPC.
232*cc02d7e2SAndroid Build Coastguard Worker  // For streaming benchmarks, an operation is processing of a single ping pong of request and response.
233*cc02d7e2SAndroid Build Coastguard Worker  double qps = 1;
234*cc02d7e2SAndroid Build Coastguard Worker  // QPS per server core.
235*cc02d7e2SAndroid Build Coastguard Worker  double qps_per_server_core = 2;
236*cc02d7e2SAndroid Build Coastguard Worker  // The total server cpu load based on system time across all server processes, expressed as percentage of a single cpu core.
237*cc02d7e2SAndroid Build Coastguard Worker  // For example, 85 implies 85% of a cpu core, 125 implies 125% of a cpu core. Since we are accumulating the cpu load across all the server
238*cc02d7e2SAndroid Build Coastguard Worker  // processes, the value could > 100 when there are multiple servers or a single server using multiple threads and cores.
239*cc02d7e2SAndroid Build Coastguard Worker  // Same explanation for the total client cpu load below.
240*cc02d7e2SAndroid Build Coastguard Worker  double server_system_time = 3;
241*cc02d7e2SAndroid Build Coastguard Worker  // The total server cpu load based on user time across all server processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%)
242*cc02d7e2SAndroid Build Coastguard Worker  double server_user_time = 4;
243*cc02d7e2SAndroid Build Coastguard Worker  // The total client cpu load based on system time across all client processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%)
244*cc02d7e2SAndroid Build Coastguard Worker  double client_system_time = 5;
245*cc02d7e2SAndroid Build Coastguard Worker  // The total client cpu load based on user time across all client processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%)
246*cc02d7e2SAndroid Build Coastguard Worker  double client_user_time = 6;
247*cc02d7e2SAndroid Build Coastguard Worker
248*cc02d7e2SAndroid Build Coastguard Worker  // X% latency percentiles (in nanoseconds)
249*cc02d7e2SAndroid Build Coastguard Worker  double latency_50 = 7;
250*cc02d7e2SAndroid Build Coastguard Worker  double latency_90 = 8;
251*cc02d7e2SAndroid Build Coastguard Worker  double latency_95 = 9;
252*cc02d7e2SAndroid Build Coastguard Worker  double latency_99 = 10;
253*cc02d7e2SAndroid Build Coastguard Worker  double latency_999 = 11;
254*cc02d7e2SAndroid Build Coastguard Worker
255*cc02d7e2SAndroid Build Coastguard Worker  // server cpu usage percentage
256*cc02d7e2SAndroid Build Coastguard Worker  double server_cpu_usage = 12;
257*cc02d7e2SAndroid Build Coastguard Worker
258*cc02d7e2SAndroid Build Coastguard Worker  // Number of requests that succeeded/failed
259*cc02d7e2SAndroid Build Coastguard Worker  double successful_requests_per_second = 13;
260*cc02d7e2SAndroid Build Coastguard Worker  double failed_requests_per_second = 14;
261*cc02d7e2SAndroid Build Coastguard Worker
262*cc02d7e2SAndroid Build Coastguard Worker  // Number of polls called inside completion queue per request
263*cc02d7e2SAndroid Build Coastguard Worker  double client_polls_per_request = 15;
264*cc02d7e2SAndroid Build Coastguard Worker  double server_polls_per_request = 16;
265*cc02d7e2SAndroid Build Coastguard Worker
266*cc02d7e2SAndroid Build Coastguard Worker  // Queries per CPU-sec over all servers or clients
267*cc02d7e2SAndroid Build Coastguard Worker  double server_queries_per_cpu_sec = 17;
268*cc02d7e2SAndroid Build Coastguard Worker  double client_queries_per_cpu_sec = 18;
269*cc02d7e2SAndroid Build Coastguard Worker
270*cc02d7e2SAndroid Build Coastguard Worker
271*cc02d7e2SAndroid Build Coastguard Worker  // Start and end time for the test scenario
272*cc02d7e2SAndroid Build Coastguard Worker  google.protobuf.Timestamp start_time = 19;
273*cc02d7e2SAndroid Build Coastguard Worker  google.protobuf.Timestamp end_time =20;
274*cc02d7e2SAndroid Build Coastguard Worker}
275*cc02d7e2SAndroid Build Coastguard Worker
276*cc02d7e2SAndroid Build Coastguard Worker// Results of a single benchmark scenario.
277*cc02d7e2SAndroid Build Coastguard Workermessage ScenarioResult {
278*cc02d7e2SAndroid Build Coastguard Worker  // Inputs used to run the scenario.
279*cc02d7e2SAndroid Build Coastguard Worker  Scenario scenario = 1;
280*cc02d7e2SAndroid Build Coastguard Worker  // Histograms from all clients merged into one histogram.
281*cc02d7e2SAndroid Build Coastguard Worker  HistogramData latencies = 2;
282*cc02d7e2SAndroid Build Coastguard Worker  // Client stats for each client
283*cc02d7e2SAndroid Build Coastguard Worker  repeated ClientStats client_stats = 3;
284*cc02d7e2SAndroid Build Coastguard Worker  // Server stats for each server
285*cc02d7e2SAndroid Build Coastguard Worker  repeated ServerStats server_stats = 4;
286*cc02d7e2SAndroid Build Coastguard Worker  // Number of cores available to each server
287*cc02d7e2SAndroid Build Coastguard Worker  repeated int32 server_cores = 5;
288*cc02d7e2SAndroid Build Coastguard Worker  // An after-the-fact computed summary
289*cc02d7e2SAndroid Build Coastguard Worker  ScenarioResultSummary summary = 6;
290*cc02d7e2SAndroid Build Coastguard Worker  // Information on success or failure of each worker
291*cc02d7e2SAndroid Build Coastguard Worker  repeated bool client_success = 7;
292*cc02d7e2SAndroid Build Coastguard Worker  repeated bool server_success = 8;
293*cc02d7e2SAndroid Build Coastguard Worker  // Number of failed requests (one row per status code seen)
294*cc02d7e2SAndroid Build Coastguard Worker  repeated RequestResultCount request_results = 9;
295*cc02d7e2SAndroid Build Coastguard Worker}
296