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);
})
}