|  | @@ -46,6 +46,24 @@ import performance.scenario_config as scenario_config
 | 
	
		
			
				|  |  |  def _scenario_json_string(scenario_json):
 | 
	
		
			
				|  |  |    return json.dumps(scenario_config.remove_nonproto_fields(scenario_json))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +def threads_of_type(scenario_json, path):
 | 
	
		
			
				|  |  | +  d = scenario_json
 | 
	
		
			
				|  |  | +  for el in path.split('/'):
 | 
	
		
			
				|  |  | +    if el not in d:
 | 
	
		
			
				|  |  | +      return 0
 | 
	
		
			
				|  |  | +    d = d[el]
 | 
	
		
			
				|  |  | +  return d
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def guess_cpu(scenario_json):
 | 
	
		
			
				|  |  | +  client = threads_of_type(scenario_json, 'client_config/async_client_threads')
 | 
	
		
			
				|  |  | +  server = threads_of_type(scenario_json, 'server_config/async_server_threads')
 | 
	
		
			
				|  |  | +  # make an arbitrary guess if set to auto-detect
 | 
	
		
			
				|  |  | +  # about the size of the jenkins instances we have for unit tests
 | 
	
		
			
				|  |  | +  if client == 0: client = 8
 | 
	
		
			
				|  |  | +  if server == 0: server = 8
 | 
	
		
			
				|  |  | +  return (scenario_json['num_clients'] * client +
 | 
	
		
			
				|  |  | +          scenario_json['num_servers'] * server)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  print yaml.dump({
 | 
	
		
			
				|  |  |    'tests': [
 | 
	
		
			
				|  |  |      {
 | 
	
	
		
			
				|  | @@ -59,7 +77,7 @@ print yaml.dump({
 | 
	
		
			
				|  |  |        'language': 'c++',
 | 
	
		
			
				|  |  |        'boringssl': True,
 | 
	
		
			
				|  |  |        'defaults': 'boringssl',
 | 
	
		
			
				|  |  | -      'cpu_cost': 1000.0,
 | 
	
		
			
				|  |  | +      'cpu_cost': guess_cpu(scenario_json),
 | 
	
		
			
				|  |  |        'exclude_configs': []
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      for scenario_json in scenario_config.CXXLanguage().scenarios()
 |