async function _prepareBenchpressSetup()

in bazel/benchmark/driver-utilities/perf_util.ts [70:124]


async function _prepareBenchpressSetup(): Promise<BenchpressSetup> {
  const module = await loadBenchpressModule();
  const {
    SeleniumWebDriverAdapter,
    Options,
    JsonFileReporter,
    RegressionSlopeValidator,
    Validator,
    MultiReporter,
    ConsoleReporter,
    SizeValidator,
    MultiMetric,
    Runner,
  } = module;

  let runId = uuidv1();
  if (process.env.GIT_SHA) {
    runId = process.env.GIT_SHA + ' ' + runId;
  }

  const testOutputDirectory = process.env.TEST_UNDECLARED_OUTPUTS_DIR;

  if (testOutputDirectory === undefined) {
    throw new Error(
      'Unexpected execution outside of a Bazel test. ' +
        'Missing `TEST_UNDECLARED_OUTPUTS_DIR` environment variable.',
    );
  }

  const providers: benchpress.StaticProvider[] = [
    SeleniumWebDriverAdapter.PROTRACTOR_PROVIDERS,
    {provide: Options.FORCE_GC, useValue: globalOptions.forceGc},
    {provide: Options.DEFAULT_DESCRIPTION, useValue: {'runId': runId}},
    JsonFileReporter.PROVIDERS,
    {provide: JsonFileReporter.PATH, useValue: testOutputDirectory},
  ];
  if (!globalOptions.dryRun) {
    providers.push({provide: Validator, useExisting: RegressionSlopeValidator});
    providers.push({
      provide: RegressionSlopeValidator.SAMPLE_SIZE,
      useValue: globalOptions.sampleSize,
    });
    providers.push(MultiReporter.provideWith([ConsoleReporter, JsonFileReporter]));
  } else {
    providers.push({provide: Validator, useExisting: SizeValidator});
    providers.push({provide: SizeValidator.SAMPLE_SIZE, useValue: 1});
    providers.push(MultiReporter.provideWith([]));
    providers.push(MultiMetric.provideWith([]));
  }

  return {
    runner: new Runner(providers),
    module,
  };
}