private LCP()

in src/performance/index.ts [170:201]


  private LCP() {
    if (!isLargestContentfulPaintSupported()) {
      return this.coreWebMetrics.lcpTime = -1;
    }
    prerenderChangeListener(() => {
      const visibilityObserver = getVisibilityObserver();
      const processEntries = (entries: LCPMetric['entries']) => {
        entries = entries.slice(-1);
        for (const entry of entries) {
          if (entry.startTime < visibilityObserver.firstHiddenTime) {
            this.coreWebMetrics.lcpTime = Math.floor(Math.max(entry.startTime - getActivationStart(), 0));
          }
        }
      };
  
      const obs = observe('largest-contentful-paint', processEntries);
      if (!obs) {
        return;
      }
      const disconnect = runOnce(() => {
        if (!reportedMetricNames['lcp']) {
          processEntries(obs!.takeRecords() as LCPMetric['entries']);
          obs!.disconnect();
          reportedMetricNames['lcp'] = true;
        }
      });
      ['keydown', 'click'].forEach((type) => {
        addEventListener(type, () => idlePeriod(disconnect), true);
      });
      onHidden(disconnect);
    })
  }