static async audit(artifacts, context) {
    const trace = artifacts.Trace;
    const devtoolsLog = artifacts.DevtoolsLog;
    const gatherContext = artifacts.GatherContext;
    const metricComputationData = {
      trace, devtoolsLog, gatherContext,
      settings: context.settings, URL: artifacts.URL,
      SourceMaps: artifacts.SourceMaps, simulator: null,
    };
    if (
      gatherContext.gatherMode === 'timespan' &&
      context.settings.throttlingMethod === 'simulate'
    ) {
      return {score: 1, notApplicable: true};
    }

    const metricResult = await ComputedTBT.request(metricComputationData, context);

    const options = context.options[context.settings.formFactor];


    return {
      score: Audit.computeLogNormalScore(
        options.scoring,
        metricResult.timing
      ),
      scoringOptions: options.scoring,
      numericValue: metricResult.timing,
      numericUnit: 'millisecond',
      displayValue: str_(i18n.UIStrings.ms, {timeInMs: metricResult.timing}),
    };
  }
Audits the page to calculate Total Blocking Time.

We define Blocking Time as any time interval in the loading timeline where task length exceeds
50ms. For example, if there is a 110ms main thread task, the last 60ms of it is blocking time.
Total Blocking Time is the sum of all Blocking Time between First Contentful Paint and
Interactive Time (TTI).

@param {LH.Artifacts} artifacts
@param {LH.Audit.Context} context
@return {Promise<LH.Audit.Product>}