INCLUDE PERFETTO MODULE slices.with_context;
CREATE PERFETTO FUNCTION _chrome_get_next_presentation_time_by_pid(
ts TIMESTAMP, pid LONG)
RETURNS TIMESTAMP
AS
SELECT MIN(a.ts + a.dur) AS ts
FROM process_slice s, ancestor_slice(s.id) a
WHERE
s.name = 'Commit'
AND a.name = 'PipelineReporter'
AND s.depth - 1 = a.depth
AND s.ts > $ts
AND s.pid = $pid
AND COALESCE(
EXTRACT_ARG(a.arg_set_id, 'frame_reporter.state'),
EXTRACT_ARG(a.arg_set_id, 'chrome_frame_reporter.state')
) = 'STATE_PRESENTED_ALL';
CREATE PERFETTO VIEW _chrome_loadline2_marks_with_pid (
ts TIMESTAMP,
page STRING,
mark STRING,
pid LONG
) AS
SELECT
ts,
STR_SPLIT(s.name, '/', 1) AS page,
STR_SPLIT(s.name, '/', 2) AS mark,
pid
FROM slice s
LEFT JOIN thread_track tt ON s.track_id = tt.id
LEFT JOIN process_track pt ON s.track_id = pt.id
LEFT JOIN thread t ON tt.utid = t.utid
JOIN process p ON p.upid = COALESCE(t.upid, pt.upid)
WHERE s.category = 'blink.user_timing' AND s.name GLOB 'LoadLine2/*/*';
CREATE PERFETTO TABLE _chrome_loadline2_story_start (
page STRING,
story_start TIMESTAMP
) AS
SELECT
page,
ts AS story_start
FROM _chrome_loadline2_marks_with_pid
WHERE mark = 'start';
CREATE PERFETTO TABLE _chrome_loadline2_story_pid (
page STRING,
pid LONG
) AS
SELECT
page,
pid
FROM _chrome_loadline2_marks_with_pid
WHERE mark = 'finish';
CREATE PERFETTO TABLE _chrome_loadline2_story_start_with_pid (
page STRING,
story_start TIMESTAMP,
pid LONG
) AS
SELECT
page,
story_start,
pid
FROM _chrome_loadline2_story_start JOIN _chrome_loadline2_story_pid USING (page);
CREATE PERFETTO TABLE _chrome_loadline2_start_request (
page STRING,
start_request TIMESTAMP
) AS
SELECT
page,
MIN(ts) AS start_request
FROM slice, _chrome_loadline2_story_start_with_pid
WHERE
name = 'WillStartRequest'
AND ts >= story_start
GROUP BY page;
CREATE PERFETTO TABLE _chrome_loadline2_end_request (
page STRING,
end_request TIMESTAMP
) AS
SELECT
page,
MIN(ts) AS end_request
FROM slice, _chrome_loadline2_story_start_with_pid
WHERE
name = 'CommitSentToFirstSubresourceLoadStart'
AND ts >= story_start
GROUP BY page;
CREATE PERFETTO TABLE _chrome_loadline2_renderer_ready (
page STRING,
renderer_ready TIMESTAMP
) AS
SELECT
page,
MIN(ts) AS renderer_ready
FROM thread_slice
JOIN _chrome_loadline2_story_start_with_pid USING (pid)
WHERE
name = 'DocumentLoader::CommitNavigation'
AND ts >= story_start
GROUP BY page;
CREATE PERFETTO TABLE _chrome_loadline2_visual_mark (
page STRING,
visual_mark TIMESTAMP,
pid LONG
) AS
SELECT
page,
ts AS visual_mark,
pid
FROM _chrome_loadline2_marks_with_pid
WHERE mark = 'visual';
CREATE PERFETTO TABLE _chrome_loadline2_visual_raf (
page STRING,
visual_raf TIMESTAMP
) AS
SELECT
page,
ts AS visual_raf
FROM _chrome_loadline2_marks_with_pid
WHERE mark = 'visual_raf';
CREATE PERFETTO TABLE _chrome_loadline2_visual_presentation (
page STRING,
visual_presentation TIMESTAMP
) AS
SELECT
page,
_chrome_get_next_presentation_time_by_pid(visual_mark, pid) AS visual_presentation
FROM _chrome_loadline2_visual_mark;
CREATE PERFETTO TABLE _chrome_loadline2_interactive_mark (
page STRING,
interactive_mark TIMESTAMP,
pid LONG
) AS
SELECT
page,
ts AS interactive_mark,
pid
FROM _chrome_loadline2_marks_with_pid
WHERE mark = 'interactive';
CREATE PERFETTO TABLE _chrome_loadline2_interactive_raf (
page STRING,
interactive_raf TIMESTAMP
) AS
SELECT
page,
ts AS interactive_raf
FROM _chrome_loadline2_marks_with_pid
WHERE mark = 'interactive_raf';
CREATE PERFETTO TABLE _chrome_loadline2_interactive_presentation (
page STRING,
interactive_presentation TIMESTAMP
) AS
SELECT
page,
_chrome_get_next_presentation_time_by_pid(interactive_mark, pid) AS interactive_presentation
FROM _chrome_loadline2_interactive_mark;
CREATE PERFETTO TABLE _chrome_loadline2_story_finish (
page STRING,
story_finish TIMESTAMP
) AS
SELECT
page,
ts AS story_finish
FROM _chrome_loadline2_marks_with_pid
WHERE mark = 'finish';
CREATE PERFETTO TABLE chrome_loadline2_stages (
page STRING,
story_start TIMESTAMP,
start_request TIMESTAMP,
end_request TIMESTAMP,
renderer_ready TIMESTAMP,
visual_mark TIMESTAMP,
visual_raf TIMESTAMP,
visual_presentation TIMESTAMP,
interactive_mark TIMESTAMP,
interactive_raf TIMESTAMP,
interactive_presentation TIMESTAMP,
story_finish TIMESTAMP
) AS
SELECT
page,
story_start,
start_request,
end_request,
renderer_ready,
visual_mark,
visual_raf,
visual_presentation,
interactive_mark,
interactive_raf,
interactive_presentation,
story_finish
FROM _chrome_loadline2_story_start_with_pid
LEFT JOIN _chrome_loadline2_start_request USING (page)
LEFT JOIN _chrome_loadline2_end_request USING (page)
LEFT JOIN _chrome_loadline2_renderer_ready USING (page)
LEFT JOIN _chrome_loadline2_visual_mark USING (page)
LEFT JOIN _chrome_loadline2_visual_raf USING (page)
LEFT JOIN _chrome_loadline2_visual_presentation USING (page)
LEFT JOIN _chrome_loadline2_interactive_mark USING (page)
LEFT JOIN _chrome_loadline2_interactive_raf USING (page)
LEFT JOIN _chrome_loadline2_interactive_presentation USING (page)
LEFT JOIN _chrome_loadline2_story_finish USING (page);