static async compute_(MetaElements) {
    const viewportMeta = MetaElements.find(meta => meta.name === 'viewport');

    if (!viewportMeta) {
      return {
        hasViewportTag: false,
        isMobileOptimized: false,
        parserWarnings: [],
        rawContentString: undefined,
      };
    }

    const warnings = [];
    const rawContentString = viewportMeta.content || '';
    const parsedProps = Parser.parseMetaViewPortContent(rawContentString);

    if (Object.keys(parsedProps.unknownProperties).length) {
      warnings.push(`Invalid properties found: ${JSON.stringify(parsedProps.unknownProperties)}`);
    }
    if (Object.keys(parsedProps.invalidValues).length) {
      warnings.push(`Invalid values found: ${JSON.stringify(parsedProps.invalidValues)}`);
    }

    const viewportProps = parsedProps.validProperties;
    const initialScale = Number(viewportProps['initial-scale']);

    if (!isNaN(initialScale) && initialScale < 1) {
      return {
        hasViewportTag: true,
        isMobileOptimized: false,
        parserWarnings: warnings,
        rawContentString,
      };
    }

    const isMobileOptimized = Boolean(viewportProps.width || initialScale);

    return {
      hasViewportTag: true,
      isMobileOptimized,
      parserWarnings: warnings,
      rawContentString,
    };
  }
@param {LH.GathererArtifacts['MetaElements']} MetaElements
@return {Promise<ViewportMetaResult>}