static makeBottomUpTable(insight) {
    /** @type {LH.Audit.Details.Table['headings']} */
    const headings = [
      {key: 'source', valueType: 'source-location', label: str_(i18n.UIStrings.columnSource)},
      {key: 'reflowTime', valueType: 'ms', granularity: 1, label: str_(UIStrings.totalReflowTime)},
    ];
    /** @type {LH.Audit.Details.Table['items']} */
    const items = insight.aggregatedBottomUpData.map((data) => {
      const {bottomUpData, totalTime} = data;

      const source = bottomUpData ? Audit.makeSourceLocation(
        bottomUpData.url,
        bottomUpData.lineNumber,
        bottomUpData.columnNumber
      ) : {
        type: /** @type {const} */ ('text'),
        value: str_(UIStrings.unattributed),
      };

      return {
        source,
        reflowTime: totalTime / 1000,
      };
    });
    return Audit.makeTableDetails(headings, items);
  }
@param {import('@paulirish/trace_engine/models/trace/insights/ForcedReflow.js').ForcedReflowInsightModel} insight
@returns {LH.Audit.Details.Table}