"""Under time.sleep the handlers run late. Does the browser's own clock still hold the true times?"""
import time
from playwright.sync_api import sync_playwright
URL = "https://example.com/"
with sync_playwright() as p:
    for how in ("sleep", "wait_for_timeout"):
        b = p.chromium.launch(); page = b.new_page()
        heard = {}
        page.on("load", lambda: heard.setdefault("load", time.time()))
        t0 = time.time()
        page.goto(URL, wait_until="commit")
        time.sleep(5) if how == "sleep" else page.wait_for_timeout(5000)
        nav = page.evaluate("() => { const n = performance.getEntriesByType('navigation')[0];"
                            " return {start: performance.timeOrigin, loadEventStart: n.loadEventStart} }")
        heard_ms = round((heard["load"] - t0) * 1000)
        true_ms = round(nav["start"] + nav["loadEventStart"] - t0 * 1000)
        print(f"{how:17s} handler heard load at {heard_ms:5d} ms | browser says load began at {true_ms:5d} ms (both from the goto call)")
        b.close()
