class LCPUser(PlaywrightUser):
    LCP_THRESHOLD = 1200  # ms
    @task
    @pw
    async def check_lcp(self, page: PageWithRetry):
        cdp = await self.browser_context.new_cdp_session(page)
        await cdp.send('Network.enable')
        await cdp.send('Network.emulateNetworkConditions', {
            'offline': False,
            'downloadThroughput': (1*1024*1024)/8,
            'uploadThroughput':   (1*1024*1024)/8,
            'latency': 50,
        })
        start = time.time()
        async with event(self, "Load home"):
            await page.goto("/")
        await page.wait_for_timeout(1000)
        lcp = await page.evaluate("""
            new Promise(r => {
              new PerformanceObserver(l => r(l.getEntries().at(-1).startTime))
              .observe({type:'largest-contentful-paint', buffered:true});
            })
        """)
        self.environment.events.request.fire(
            request_type="LCP",
            name=f"LCP {'PASS' if lcp<=self.LCP_THRESHOLD else 'FAIL'}",
            start_time=start,
            response_time=lcp,
            response_length=0,
            context={**self.context()},
            url="lcp_metric",
            exception=None if lcp<=self.LCP_THRESHOLD else Exception(f"LCP {lcp:.0f}ms > {self.LCP_THRESHOLD}ms"),
        )