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;
    }