1INCLUDE PERFETTO MODULE ext.loading_interesting_intervals; 2 3DROP VIEW IF EXISTS resource_metric; 4 5CREATE VIEW resource_metric 6AS 7WITH 8 request AS ( 9 SELECT 10 EXTRACT_ARG(arg_set_id, 'debug.data.requestId') AS id, 11 EXTRACT_ARG(arg_set_id, 'debug.data.url') AS url, 12 ts 13 FROM slice 14 WHERE name = 'ResourceSendRequest' 15 ), 16 response AS ( 17 SELECT 18 EXTRACT_ARG(arg_set_id, 'debug.data.requestId') AS id, 19 EXTRACT_ARG(arg_set_id, 'debug.data.mimeType') AS mime, 20 ts 21 FROM slice 22 WHERE name = 'ResourceReceiveResponse' 23 ), 24 finish AS ( 25 SELECT 26 EXTRACT_ARG(arg_set_id, 'debug.data.requestId') AS id, 27 EXTRACT_ARG(arg_set_id, 'debug.data.decodedBodyLength') AS len, 28 EXTRACT_ARG(arg_set_id, 'debug.data.encodedDataLength') AS data_len, 29 ts 30 FROM slice 31 WHERE name = 'ResourceFinish' 32 ), 33 resource AS ( 34 SELECT 35 request.ts, 36 finish.ts - request.ts AS dur, 37 finish.ts - response.ts AS download_dur, 38 len, 39 CASE 40 WHEN url LIKE "data:%" THEN length(url) 41 ELSE data_len 42 END AS data_len, 43 mime, 44 CASE 45 WHEN mime LIKE '%css%' THEN 'css' 46 WHEN mime LIKE '%htm%' THEN 'html' 47 WHEN mime LIKE '%html%' THEN 'html' 48 WHEN mime LIKE '%json%' THEN 'json' 49 WHEN mime LIKE '%font%' THEN 'font' 50 WHEN mime LIKE '%audio%' THEN 'audio' 51 WHEN mime LIKE '%video%' THEN 'video' 52 WHEN mime LIKE '%image%' THEN 'image' 53 WHEN mime LIKE 'application/wasm' THEN 'javascript' 54 WHEN mime LIKE '%javascript%' THEN 'javascript' 55 WHEN mime LIKE '%ecmascript%' THEN 'javascript' 56 WHEN mime LIKE '%xml%' THEN 'xml' 57 ELSE 'other' 58 END AS mime_category, 59 CASE 60 WHEN length(url) > 100 THEN SUBSTR(url, 1, 90) || '<TRUNCATED>' 61 ELSE url 62 END AS url 63 FROM request, response 64 USING (id), 65 finish USING (id) 66 ) 67SELECT interval_id, resource.*, resource.ts - navigation_start_ts AS nav_rel_ts 68FROM resource, interesting_interval 69ON resource.ts BETWEEN interesting_interval.ts AND interesting_interval.end - 1; 70 71SELECT * FROM resource_metric; 72