24 'tpl': [
'fixture',
'client_mutator',
'server_mutator'],
25 'dyn': [
'request_size',
'response_size'],
27 'BM_PumpStreamClientToServer': {
29 'dyn': [
'request_size'],
31 'BM_PumpStreamServerToClient': {
33 'dyn': [
'request_size'],
35 'BM_StreamingPingPong': {
36 'tpl': [
'fixture',
'client_mutator',
'server_mutator'],
37 'dyn': [
'request_size',
'request_count'],
39 'BM_StreamingPingPongMsgs': {
40 'tpl': [
'fixture',
'client_mutator',
'server_mutator'],
41 'dyn': [
'request_size'],
43 'BM_PumpStreamServerToClient_Trickle': {
45 'dyn': [
'request_size',
'bandwidth_kilobits'],
47 'BM_PumpUnbalancedUnary_Trickle': {
49 'dyn': [
'cli_req_size',
'svr_req_size',
'bandwidth_kilobits'],
51 'BM_ErrorStringOnNewError': {
55 'BM_ErrorStringRepeatedly': {
59 'BM_ErrorGetStatus': {
63 'BM_ErrorGetStatusCode': {
67 'BM_ErrorHttpError': {
71 'BM_HasClearGrpcStatus': {
75 'BM_IsolatedFilter': {
76 'tpl': [
'fixture',
'client_mutator'],
79 'BM_HpackEncoderEncodeHeader': {
81 'dyn': [
'end_of_stream',
'request_size'],
83 'BM_HpackParserParseHeader': {
87 'BM_CallCreateDestroy': {
93 'dyn': [
'request_size'],
95 'BM_PollEmptyPollset_SpeedOfLight': {
97 'dyn': [
'request_size',
'request_count'],
99 'BM_StreamCreateSendInitialMetadataDestroy': {
103 'BM_TransportStreamSend': {
105 'dyn': [
'request_size'],
107 'BM_TransportStreamRecv': {
109 'dyn': [
'request_size'],
111 'BM_StreamingPingPongWithCoalescingApi': {
112 'tpl': [
'fixture',
'client_mutator',
'server_mutator'],
113 'dyn': [
'request_size',
'request_count',
'end_of_stream'],
115 'BM_Base16SomeStuff': {
117 'dyn': [
'request_size'],
123 """Convert abbreviations like '100M' or '10k' to a number."""
127 return float(s[:-1]) * 1024
129 return float(s[:-1]) * 1024 * 1024
130 if 0 <= (
ord(s[-1]) -
ord(
'0')) <= 9:
132 assert 'not a number: %s' % s
137 if '<' not in name
and '/' not in name
and name
not in _BM_SPECS:
138 return {
'name': name,
'cpp_name': name}
144 tpl_bit = rest[rest.find(
'<') + 1:rest.rfind(
'>')]
156 tpl_args.append(arg.strip())
162 tpl_args.append(arg.strip())
163 rest = rest[:rest.find(
'<')] + rest[rest.rfind(
'>') + 1:]
169 assert name
in _BM_SPECS,
'_BM_SPECS needs to be expanded for %s' % name
170 assert len(dyn_args) ==
len(_BM_SPECS[name][
'dyn'])
171 assert len(tpl_args) ==
len(_BM_SPECS[name][
'tpl'])
173 out[
'cpp_name'] = cpp_name
176 for k, v
in zip(_BM_SPECS[name][
'dyn'], dyn_args)))
177 out.update(dict(zip(_BM_SPECS[name][
'tpl'], tpl_args)))
182 if not js
and not js2:
183 raise StopIteration()
186 for bm
in js[
'benchmarks']:
187 if bm[
'name'].endswith(
'_stddev')
or bm[
'name'].endswith(
'_mean'):
189 context = js[
'context']
193 for s
in bm[
'label'].strip().
split(
' ')
194 if len(s)
and s[0] !=
'#'
196 for el
in labels_list:
197 el[0] = el[0].replace(
'/iter',
'_per_iteration')
198 labels = dict(labels_list)
206 'jenkins_build': os.environ.get(
'KOKORO_BUILD_NUMBER',
''),
207 'jenkins_job': os.environ.get(
'KOKORO_JOB_NAME',
''),
219 for bm2
in js2[
'benchmarks']:
220 if bm[
'name'] == bm2[
'name']
and 'already_used' not in bm2:
221 row[
'cpu_time'] = bm2[
'cpu_time']
222 row[
'real_time'] = bm2[
'real_time']
223 row[
'iterations'] = bm2[
'iterations']
224 bm2[
'already_used'] =
True