|  | @@ -94,6 +94,13 @@ def remove_nonproto_fields(scenario):
 | 
	
		
			
				|  |  |    return scenario
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +def geometric_progression(start, stop, step):
 | 
	
		
			
				|  |  | +  n = start
 | 
	
		
			
				|  |  | +  while n < stop:
 | 
	
		
			
				|  |  | +    yield int(round(n))
 | 
	
		
			
				|  |  | +    n *= step
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def _ping_pong_scenario(name, rpc_type,
 | 
	
		
			
				|  |  |                          client_type, server_type,
 | 
	
		
			
				|  |  |                          secure=True,
 | 
	
	
		
			
				|  | @@ -105,7 +112,9 @@ def _ping_pong_scenario(name, rpc_type,
 | 
	
		
			
				|  |  |                          async_server_threads=0,
 | 
	
		
			
				|  |  |                          warmup_seconds=WARMUP_SECONDS,
 | 
	
		
			
				|  |  |                          categories=[],
 | 
	
		
			
				|  |  | -                        channels=None):
 | 
	
		
			
				|  |  | +                        channels=None,
 | 
	
		
			
				|  |  | +                        outstanding=None,
 | 
	
		
			
				|  |  | +                        payload_size=None):
 | 
	
		
			
				|  |  |    """Creates a basic ping pong scenario."""
 | 
	
		
			
				|  |  |    scenario = {
 | 
	
		
			
				|  |  |      'name': name,
 | 
	
	
		
			
				|  | @@ -245,13 +254,18 @@ class CXXLanguage:
 | 
	
		
			
				|  |  |              secure=secure,
 | 
	
		
			
				|  |  |              categories=[SCALABLE])
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        for channels in [1, 3, 10, 31, 100, 316, 1000]:
 | 
	
		
			
				|  |  | -          yield _ping_pong_scenario(
 | 
	
		
			
				|  |  | -              'cpp_protobuf_%s_unary_qps_unconstrained_%s_%d_channels' % (synchronicity, secstr, channels),
 | 
	
		
			
				|  |  | -              rpc_type='UNARY',
 | 
	
		
			
				|  |  | -              client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | -              unconstrained_client=synchronicity, secure=secure,
 | 
	
		
			
				|  |  | -              categories=[SWEEP], channels=channels)
 | 
	
		
			
				|  |  | +        for channels in geometric_progression(1, 500, math.sqrt(10)):
 | 
	
		
			
				|  |  | +          for outstanding in geometric_progression(1, 20000, math.sqrt(10)):
 | 
	
		
			
				|  |  | +            for payload in geometric_progression(1, 1024*1024, 10):
 | 
	
		
			
				|  |  | +              if synchronicity == 'sync' and outstanding > 1000: continue
 | 
	
		
			
				|  |  | +              if payload * outstanding > 1024*1024*1024: continue
 | 
	
		
			
				|  |  | +              if outstanding < channels: continue
 | 
	
		
			
				|  |  | +              yield _ping_pong_scenario(
 | 
	
		
			
				|  |  | +                  'cpp_protobuf_%s_unary_qps_unconstrained_%s_%d_channels_%d_outstanding_%d_payload' % (synchronicity, secstr, channels, outstanding, payload),
 | 
	
		
			
				|  |  | +                  rpc_type='UNARY',
 | 
	
		
			
				|  |  | +                  client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | +                  unconstrained_client=synchronicity, secure=secure,
 | 
	
		
			
				|  |  | +                  categories=[SWEEP], channels=channels, outstanding=outstanding)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    def __str__(self):
 | 
	
		
			
				|  |  |      return 'c++'
 |