69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
|  | #!/usr/bin/env php
 | ||
|  | <?php | ||
|  | 
 | ||
|  | if (file_exists(__DIR__ . '/../vendor/autoload.php')) { | ||
|  |     require __DIR__ . '/../vendor/autoload.php'; | ||
|  | } elseif (file_exists(__DIR__ . '/../../../autoload.php')) { | ||
|  |     require __DIR__ . '/../../../autoload.php'; | ||
|  | } else { | ||
|  |     throw new RuntimeException('Unable to locate autoload.php file.'); | ||
|  | } | ||
|  | 
 | ||
|  | $xdebug = new \Composer\XdebugHandler\XdebugHandler('perf.php'); | ||
|  | $xdebug->check(); | ||
|  | unset($xdebug); | ||
|  | 
 | ||
|  | $dir = isset($argv[1]) ? $argv[1] : __DIR__ . '/../tests/compliance/perf'; | ||
|  | is_dir($dir) or die('Dir not found: ' . $dir); | ||
|  | // Warm up the runner
 | ||
|  | \JmesPath\Env::search('foo', []); | ||
|  | 
 | ||
|  | $total = 0; | ||
|  | foreach (glob($dir . '/*.json') as $file) { | ||
|  |     $total += runSuite($file); | ||
|  | } | ||
|  | echo "\nTotal time: {$total}\n"; | ||
|  | 
 | ||
|  | function runSuite($file) | ||
|  | { | ||
|  |     $contents = file_get_contents($file); | ||
|  |     $json = json_decode($contents, true); | ||
|  |     $total = 0; | ||
|  |     foreach ($json as $suite) { | ||
|  |         foreach ($suite['cases'] as $case) { | ||
|  |             $total += runCase( | ||
|  |                 $suite['given'], | ||
|  |                 $case['expression'], | ||
|  |                 $case['name'] | ||
|  |             ); | ||
|  |         } | ||
|  |     } | ||
|  |     return $total; | ||
|  | } | ||
|  | 
 | ||
|  | function runCase($given, $expression, $name) | ||
|  | { | ||
|  |     $best = 99999; | ||
|  |     $runtime = \JmesPath\Env::createRuntime(); | ||
|  | 
 | ||
|  |     for ($i = 0; $i < 100; $i++) { | ||
|  |         $t = microtime(true); | ||
|  |         $runtime($expression, $given); | ||
|  |         $tryTime = (microtime(true) - $t) * 1000; | ||
|  |         if ($tryTime < $best) { | ||
|  |             $best = $tryTime; | ||
|  |         } | ||
|  |         if (!getenv('CACHE')) { | ||
|  |             $runtime = \JmesPath\Env::createRuntime(); | ||
|  |             // Delete compiled scripts if not caching.
 | ||
|  |             if ($runtime instanceof \JmesPath\CompilerRuntime) { | ||
|  |                 array_map('unlink', glob(sys_get_temp_dir() . '/jmespath_*.php')); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     printf("time: %07.4fms name: %s\n", $best, $name); | ||
|  | 
 | ||
|  |     return $best; | ||
|  | } |