INCLUDE PERFETTO MODULE slices.with_context;
CREATE PERFETTO VIEW _fcp_metrics AS
SELECT
ts,
dur,
extract_arg(arg_set_id, 'page_load.navigation_id') AS navigation_id,
extract_arg(arg_set_id, 'page_load.url') AS url,
upid AS browser_upid
FROM process_slice
WHERE
name = 'PageLoadMetrics.NavigationToFirstContentfulPaint';
CREATE PERFETTO FUNCTION _page_load_metrics(
event_name STRING
)
RETURNS TABLE (
ts TIMESTAMP,
dur DURATION,
navigation_id LONG,
browser_upid LONG
) AS
SELECT
ts,
dur,
extract_arg(arg_set_id, 'page_load.navigation_id') AS navigation_id,
upid AS browser_upid
FROM process_slice
WHERE
name = $event_name;
CREATE PERFETTO TABLE chrome_page_loads (
id LONG,
navigation_id LONG,
navigation_start_ts TIMESTAMP,
fcp LONG,
fcp_ts TIMESTAMP,
lcp LONG,
lcp_ts TIMESTAMP,
dom_content_loaded_event_ts TIMESTAMP,
load_event_ts TIMESTAMP,
mark_fully_loaded_ts TIMESTAMP,
mark_fully_visible_ts TIMESTAMP,
mark_interactive_ts TIMESTAMP,
url STRING,
browser_upid LONG
) AS
SELECT
row_number() OVER (ORDER BY fcp.ts) AS id,
fcp.navigation_id,
fcp.ts AS navigation_start_ts,
fcp.dur AS fcp,
fcp.ts + fcp.dur AS fcp_ts,
lcp.dur AS lcp,
lcp.dur + lcp.ts AS lcp_ts,
load_fired.ts AS dom_content_loaded_event_ts,
start_load.ts AS load_event_ts,
timing_loaded.ts AS mark_fully_loaded_ts,
timing_visible.ts AS mark_fully_visible_ts,
timing_interactive.ts AS mark_interactive_ts,
fcp.url,
fcp.browser_upid
FROM _fcp_metrics AS fcp
LEFT JOIN _page_load_metrics('PageLoadMetrics.NavigationToLargestContentfulPaint') AS lcp
USING (navigation_id, browser_upid)
LEFT JOIN _page_load_metrics('PageLoadMetrics.NavigationToDOMContentLoadedEventFired') AS load_fired
USING (navigation_id, browser_upid)
LEFT JOIN _page_load_metrics('PageLoadMetrics.NavigationToMainFrameOnLoad') AS start_load
USING (navigation_id, browser_upid)
LEFT JOIN _page_load_metrics('PageLoadMetrics.UserTimingMarkFullyLoaded') AS timing_loaded
USING (navigation_id, browser_upid)
LEFT JOIN _page_load_metrics('PageLoadMetrics.UserTimingMarkFullyVisible') AS timing_visible
USING (navigation_id, browser_upid)
LEFT JOIN _page_load_metrics('PageLoadMetrics.UserTimingMarkInteractive') AS timing_interactive
USING (navigation_id, browser_upid);