/**
* Build the BenchmarkMetadata collection.
*
* @param string $path
* @param array $subjectFilter
* @param array $groupFilter
*/
public function findBenchmarks($path, array $subjectFilter = [], array $groupFilter = [])
{
$finder = new Finder();
$path = PhpBench::normalizePath($path);
if (!file_exists($path)) {
throw new \InvalidArgumentException(sprintf('File or directory "%s" does not exist (cwd: %s)', $path, getcwd()));
}
if (is_dir($path)) {
$finder->in($path)->name('*.php');
} else {
// the path is already a file, just restrict the finder to that.
$finder->in(dirname($path))->depth(0)->name(basename($path));
}
$benchmarks = [];
foreach ($finder as $file) {
if (!is_file($file)) {
continue;
}
$benchmark = $this->factory->getMetadataForFile($file->getPathname());
if (null === $benchmark) {
continue;
}
if ($groupFilter) {
$benchmark->filterSubjectGroups($groupFilter);
}
if ($subjectFilter) {
$benchmark->filterSubjectNames($subjectFilter);
}
if (false === $benchmark->hasSubjects()) {
continue;
}
$benchmarks[] = $benchmark;
}
return $benchmarks;
}