1*6777b538SAndroid Build Coastguard Worker-- Copyright 2023 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker-- Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker-- found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker-- Checks if slice has an ancestor with provided name. 6*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _has_parent_slice_with_name( 7*6777b538SAndroid Build Coastguard Worker -- Id of the slice to check parents of. 8*6777b538SAndroid Build Coastguard Worker id INT, 9*6777b538SAndroid Build Coastguard Worker -- Name of potential ancestor slice. 10*6777b538SAndroid Build Coastguard Worker parent_name STRING) 11*6777b538SAndroid Build Coastguard Worker-- Whether `parent_name` is a name of an ancestor slice. 12*6777b538SAndroid Build Coastguard WorkerRETURNS BOOL AS 13*6777b538SAndroid Build Coastguard WorkerSELECT EXISTS( 14*6777b538SAndroid Build Coastguard Worker SELECT 1 15*6777b538SAndroid Build Coastguard Worker FROM ancestor_slice($id) 16*6777b538SAndroid Build Coastguard Worker WHERE name = $parent_name 17*6777b538SAndroid Build Coastguard Worker LIMIT 1 18*6777b538SAndroid Build Coastguard Worker); 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker-- Returns the mojo ipc hash for a given task, looking it up from the 21*6777b538SAndroid Build Coastguard Worker-- argument of descendant ScopedSetIpcHash slice. 22*6777b538SAndroid Build Coastguard Worker-- This is relevant only for the older Chrome traces, where mojo IPC 23*6777b538SAndroid Build Coastguard Worker-- hash was reported in a separate ScopedSetIpcHash slice. 24*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _extract_mojo_ipc_hash(slice_id INT) 25*6777b538SAndroid Build Coastguard WorkerRETURNS INT AS 26*6777b538SAndroid Build Coastguard WorkerSELECT EXTRACT_ARG(arg_set_id, "chrome_mojo_event_info.ipc_hash") 27*6777b538SAndroid Build Coastguard WorkerFROM descendant_slice($slice_id) 28*6777b538SAndroid Build Coastguard WorkerWHERE name="ScopedSetIpcHash" 29*6777b538SAndroid Build Coastguard WorkerORDER BY id 30*6777b538SAndroid Build Coastguard WorkerLIMIT 1; 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker-- Returns the frame type (main frame vs subframe) for key navigation tasks 33*6777b538SAndroid Build Coastguard Worker-- which capture the associated RenderFrameHost in an argument. 34*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _extract_frame_type(slice_id INT) 35*6777b538SAndroid Build Coastguard WorkerRETURNS INT AS 36*6777b538SAndroid Build Coastguard WorkerSELECT EXTRACT_ARG(arg_set_id, "render_frame_host.frame_type") 37*6777b538SAndroid Build Coastguard WorkerFROM descendant_slice($slice_id) 38*6777b538SAndroid Build Coastguard WorkerWHERE name IN ( 39*6777b538SAndroid Build Coastguard Worker "RenderFrameHostImpl::BeginNavigation", 40*6777b538SAndroid Build Coastguard Worker "RenderFrameHostImpl::DidCommitProvisionalLoad", 41*6777b538SAndroid Build Coastguard Worker "RenderFrameHostImpl::DidCommitSameDocumentNavigation", 42*6777b538SAndroid Build Coastguard Worker "RenderFrameHostImpl::DidStopLoading" 43*6777b538SAndroid Build Coastguard Worker) 44*6777b538SAndroid Build Coastguard WorkerLIMIT 1; 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker-- Human-readable aliases for a few key navigation tasks. 47*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _human_readable_navigation_task_name( 48*6777b538SAndroid Build Coastguard Worker task_name STRING) 49*6777b538SAndroid Build Coastguard WorkerRETURNS STRING AS 50*6777b538SAndroid Build Coastguard WorkerSELECT 51*6777b538SAndroid Build Coastguard Worker CASE 52*6777b538SAndroid Build Coastguard Worker WHEN $task_name = "content.mojom.FrameHost message (hash=2168461044)" 53*6777b538SAndroid Build Coastguard Worker THEN "FrameHost::BeginNavigation" 54*6777b538SAndroid Build Coastguard Worker WHEN $task_name = "content.mojom.FrameHost message (hash=3561497419)" 55*6777b538SAndroid Build Coastguard Worker THEN "FrameHost::DidCommitProvisionalLoad" 56*6777b538SAndroid Build Coastguard Worker WHEN $task_name = "content.mojom.FrameHost message (hash=1421450774)" 57*6777b538SAndroid Build Coastguard Worker THEN "FrameHost::DidCommitSameDocumentNavigation" 58*6777b538SAndroid Build Coastguard Worker WHEN $task_name = "content.mojom.FrameHost message (hash=368650583)" 59*6777b538SAndroid Build Coastguard Worker THEN "FrameHost::DidStopLoading" 60*6777b538SAndroid Build Coastguard Worker END; 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker-- Takes a task name and formats it correctly for scheduler tasks. 63*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _format_scheduler_task_name(task_name STRING) 64*6777b538SAndroid Build Coastguard WorkerRETURNS STRING AS 65*6777b538SAndroid Build Coastguard WorkerSELECT printf("RunTask(posted_from=%s)", $task_name); 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker-- Takes the category and determines whether it is "Java" only, as opposed to 68*6777b538SAndroid Build Coastguard Worker-- "toplevel,Java". 69*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _java_not_top_level_category(category STRING) 70*6777b538SAndroid Build Coastguard WorkerRETURNS BOOL AS 71*6777b538SAndroid Build Coastguard WorkerSELECT $category GLOB "*Java*" AND $category not GLOB "*toplevel*"; 72*6777b538SAndroid Build Coastguard Worker 73*6777b538SAndroid Build Coastguard Worker-- Takes the category and determines whether is any valid 74*6777b538SAndroid Build Coastguard Worker-- toplevel category or combination of categories. 75*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _any_top_level_category(category STRING) 76*6777b538SAndroid Build Coastguard WorkerRETURNS BOOL AS 77*6777b538SAndroid Build Coastguard WorkerSELECT $category IN ("toplevel", "toplevel,viz", "toplevel,Java"); 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker-- TODO(altimin): the situations with kinds in this file is a bit of a mess. 80*6777b538SAndroid Build Coastguard Worker-- The idea is that it should work as `type` in the `slice` table, pointing to 81*6777b538SAndroid Build Coastguard Worker-- a "child" table with more information about the task (e.g. posted_from for 82*6777b538SAndroid Build Coastguard Worker-- scheduler tasks). Currently this is not the case and needs a cleanup. 83*6777b538SAndroid Build Coastguard Worker-- Also we should align this with how table inheritance should work for 84*6777b538SAndroid Build Coastguard Worker-- `CREATE PERFETTO TABLE`. 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Worker-- Get task type for a given task kind. 87*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _get_java_views_task_type(kind STRING) 88*6777b538SAndroid Build Coastguard WorkerRETURNS STRING AS 89*6777b538SAndroid Build Coastguard WorkerSELECT 90*6777b538SAndroid Build Coastguard Worker CASE $kind 91*6777b538SAndroid Build Coastguard Worker WHEN "Choreographer" THEN "choreographer" 92*6777b538SAndroid Build Coastguard Worker WHEN "SingleThreadProxy::BeginMainFrame" THEN "ui_thread_begin_main_frame" 93*6777b538SAndroid Build Coastguard Worker END; 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker-- All slices corresponding to receiving mojo messages. 96*6777b538SAndroid Build Coastguard Worker-- On the newer Chrome versions, it's just "Receive mojo message" and 97*6777b538SAndroid Build Coastguard Worker-- "Receive mojo reply" slices (or "Receive {mojo_message_name}" if 98*6777b538SAndroid Build Coastguard Worker-- built with `extended_tracing_enabled`. On legacy Chrome versions, 99*6777b538SAndroid Build Coastguard Worker-- other appropriate messages (like "Connector::DispatchMessage") are used. 100*6777b538SAndroid Build Coastguard Worker-- 101*6777b538SAndroid Build Coastguard Worker-- @column STRING interface_name Name of the IPC interface. 102*6777b538SAndroid Build Coastguard Worker-- @column INT ipc_hash Hash of a message name. 103*6777b538SAndroid Build Coastguard Worker-- @column STRING message_type Either 'message' or 'reply'. 104*6777b538SAndroid Build Coastguard Worker-- @column INT id Slice id. 105*6777b538SAndroid Build Coastguard Worker-- 106*6777b538SAndroid Build Coastguard Worker-- Note: this might include messages received within a sync mojo call. 107*6777b538SAndroid Build Coastguard Worker-- TODO(altimin): This should use EXTEND_TABLE when it becomes available. 108*6777b538SAndroid Build Coastguard WorkerCREATE TABLE _chrome_mojo_slices AS 109*6777b538SAndroid Build Coastguard WorkerWITH 110*6777b538SAndroid Build Coastguard Worker-- Select all new-style (post crrev.com/c/3270337) mojo slices and 111*6777b538SAndroid Build Coastguard Worker-- generate |task_name| for them. 112*6777b538SAndroid Build Coastguard Worker-- If extended tracing is enabled, the slice name will have the full method 113*6777b538SAndroid Build Coastguard Worker-- name (i.e. "Receive content::mojom::FrameHost::DidStopLoading") and we 114*6777b538SAndroid Build Coastguard Worker-- should use it as a full name. 115*6777b538SAndroid Build Coastguard Worker-- If extended tracing is not enabled, we should include the interface name 116*6777b538SAndroid Build Coastguard Worker-- and method hash into the full name. 117*6777b538SAndroid Build Coastguard Workernew_mojo_slices AS ( 118*6777b538SAndroid Build Coastguard Worker SELECT 119*6777b538SAndroid Build Coastguard Worker EXTRACT_ARG(arg_set_id, "chrome_mojo_event_info.mojo_interface_tag") AS interface_name, 120*6777b538SAndroid Build Coastguard Worker EXTRACT_ARG(arg_set_id, "chrome_mojo_event_info.ipc_hash") AS ipc_hash, 121*6777b538SAndroid Build Coastguard Worker CASE name 122*6777b538SAndroid Build Coastguard Worker WHEN "Receive mojo message" THEN "message" 123*6777b538SAndroid Build Coastguard Worker WHEN "Receive mojo reply" THEN "reply" 124*6777b538SAndroid Build Coastguard Worker END AS message_type, 125*6777b538SAndroid Build Coastguard Worker id 126*6777b538SAndroid Build Coastguard Worker FROM slice 127*6777b538SAndroid Build Coastguard Worker WHERE 128*6777b538SAndroid Build Coastguard Worker category GLOB '*toplevel*' 129*6777b538SAndroid Build Coastguard Worker AND name GLOB 'Receive *' 130*6777b538SAndroid Build Coastguard Worker), 131*6777b538SAndroid Build Coastguard Worker-- Select old-style slices for channel-associated mojo events. 132*6777b538SAndroid Build Coastguard Workerold_associated_mojo_slices AS ( 133*6777b538SAndroid Build Coastguard Worker SELECT 134*6777b538SAndroid Build Coastguard Worker name AS interface_name, 135*6777b538SAndroid Build Coastguard Worker _extract_mojo_ipc_hash(id) AS ipc_hash, 136*6777b538SAndroid Build Coastguard Worker "message" AS message_type, 137*6777b538SAndroid Build Coastguard Worker id 138*6777b538SAndroid Build Coastguard Worker FROM slice 139*6777b538SAndroid Build Coastguard Worker WHERE 140*6777b538SAndroid Build Coastguard Worker category GLOB "*mojom*" 141*6777b538SAndroid Build Coastguard Worker AND name GLOB '*.mojom.*' 142*6777b538SAndroid Build Coastguard Worker), 143*6777b538SAndroid Build Coastguard Worker-- Select old-style slices for non-(channel-associated) mojo events. 144*6777b538SAndroid Build Coastguard Workerold_non_associated_mojo_slices AS ( 145*6777b538SAndroid Build Coastguard Worker SELECT 146*6777b538SAndroid Build Coastguard Worker COALESCE( 147*6777b538SAndroid Build Coastguard Worker EXTRACT_ARG(arg_set_id, "chrome_mojo_event_info.watcher_notify_interface_tag"), 148*6777b538SAndroid Build Coastguard Worker EXTRACT_ARG(arg_set_id, "chrome_mojo_event_info.mojo_interface_tag") 149*6777b538SAndroid Build Coastguard Worker ) AS interface_name, 150*6777b538SAndroid Build Coastguard Worker _extract_mojo_ipc_hash(id) AS ipc_hash, 151*6777b538SAndroid Build Coastguard Worker "message" AS message_type, 152*6777b538SAndroid Build Coastguard Worker id 153*6777b538SAndroid Build Coastguard Worker FROM slice 154*6777b538SAndroid Build Coastguard Worker WHERE 155*6777b538SAndroid Build Coastguard Worker category GLOB "*toplevel*" AND name = "Connector::DispatchMessage" 156*6777b538SAndroid Build Coastguard Worker) 157*6777b538SAndroid Build Coastguard Worker-- Merge all mojo slices. 158*6777b538SAndroid Build Coastguard WorkerSELECT * FROM new_mojo_slices 159*6777b538SAndroid Build Coastguard WorkerUNION ALL 160*6777b538SAndroid Build Coastguard WorkerSELECT * FROM old_associated_mojo_slices 161*6777b538SAndroid Build Coastguard WorkerUNION ALL 162*6777b538SAndroid Build Coastguard WorkerSELECT * FROM old_non_associated_mojo_slices; 163*6777b538SAndroid Build Coastguard Worker 164*6777b538SAndroid Build Coastguard Worker-- As we lookup by ID on |_chrome_mojo_slices| table, add an index on 165*6777b538SAndroid Build Coastguard Worker-- id to make lookups fast. 166*6777b538SAndroid Build Coastguard WorkerCREATE INDEX _chrome_mojo_slices_idx ON _chrome_mojo_slices(id); 167*6777b538SAndroid Build Coastguard Worker 168*6777b538SAndroid Build Coastguard Worker-- This table contains a list of slices corresponding to the _representative_ 169*6777b538SAndroid Build Coastguard Worker-- Chrome Java view operations. 170*6777b538SAndroid Build Coastguard Worker-- These are the outermost Java view slices after filtering out generic framework views 171*6777b538SAndroid Build Coastguard Worker-- (like FitWindowsLinearLayout) and selecting the outermost slices from the remaining ones. 172*6777b538SAndroid Build Coastguard Worker-- 173*6777b538SAndroid Build Coastguard Worker-- @column id INT Slice id. 174*6777b538SAndroid Build Coastguard Worker-- @column ts INT Timestamp. 175*6777b538SAndroid Build Coastguard Worker-- @column dur INT Duration. 176*6777b538SAndroid Build Coastguard Worker-- @column name STRING Name of the view. 177*6777b538SAndroid Build Coastguard Worker-- @column is_software_screenshot BOOL Whether this slice is a part of non-accelerated 178*6777b538SAndroid Build Coastguard Worker-- capture toolbar screenshot. 179*6777b538SAndroid Build Coastguard Worker-- @column is_hardware_screenshot BOOL Whether this slice is a part of accelerated 180*6777b538SAndroid Build Coastguard Worker-- capture toolbar screenshot. 181*6777b538SAndroid Build Coastguard WorkerCREATE TABLE _chrome_java_views AS 182*6777b538SAndroid Build Coastguard WorkerWITH 183*6777b538SAndroid Build Coastguard Worker-- .draw, .onLayout and .onMeasure parts of the java view names don't add much, strip them. 184*6777b538SAndroid Build Coastguard Workerjava_slices_with_trimmed_names AS ( 185*6777b538SAndroid Build Coastguard Worker SELECT 186*6777b538SAndroid Build Coastguard Worker id, 187*6777b538SAndroid Build Coastguard Worker REPLACE( 188*6777b538SAndroid Build Coastguard Worker REPLACE( 189*6777b538SAndroid Build Coastguard Worker REPLACE( 190*6777b538SAndroid Build Coastguard Worker REPLACE( 191*6777b538SAndroid Build Coastguard Worker REPLACE( 192*6777b538SAndroid Build Coastguard Worker s1.name, 193*6777b538SAndroid Build Coastguard Worker ".draw", ""), 194*6777b538SAndroid Build Coastguard Worker ".onLayout", ""), 195*6777b538SAndroid Build Coastguard Worker ".onMeasure", ""), 196*6777b538SAndroid Build Coastguard Worker ".Layout", ""), 197*6777b538SAndroid Build Coastguard Worker ".Measure", "") AS name, 198*6777b538SAndroid Build Coastguard Worker ts, 199*6777b538SAndroid Build Coastguard Worker dur 200*6777b538SAndroid Build Coastguard Worker FROM 201*6777b538SAndroid Build Coastguard Worker slice s1 202*6777b538SAndroid Build Coastguard Worker -- Ensure that toplevel Java slices are not included, as they may be logged 203*6777b538SAndroid Build Coastguard Worker -- with either category = "toplevel" or category = "toplevel,Java". 204*6777b538SAndroid Build Coastguard Worker -- Also filter out the zero duration slices as an attempt to reduce noise as 205*6777b538SAndroid Build Coastguard Worker -- "Java" category contains misc events (as it's hard to add new categories). 206*6777b538SAndroid Build Coastguard Worker WHERE _java_not_top_level_category(category) AND dur > 0 207*6777b538SAndroid Build Coastguard Worker ), 208*6777b538SAndroid Build Coastguard Worker -- We filter out generic slices from various UI frameworks which don't tell us much about 209*6777b538SAndroid Build Coastguard Worker -- what exactly this view is doing. 210*6777b538SAndroid Build Coastguard Worker interesting_java_slices AS ( 211*6777b538SAndroid Build Coastguard Worker SELECT 212*6777b538SAndroid Build Coastguard Worker id, name, ts, dur 213*6777b538SAndroid Build Coastguard Worker FROM java_slices_with_trimmed_names 214*6777b538SAndroid Build Coastguard Worker WHERE NOT name IN ( 215*6777b538SAndroid Build Coastguard Worker -- AndroidX. 216*6777b538SAndroid Build Coastguard Worker "FitWindowsFrameLayout", 217*6777b538SAndroid Build Coastguard Worker "FitWindowsLinearLayout", 218*6777b538SAndroid Build Coastguard Worker "ContentFrameLayout", 219*6777b538SAndroid Build Coastguard Worker "CoordinatorLayout", 220*6777b538SAndroid Build Coastguard Worker -- Other non-Chrome UI libraries. 221*6777b538SAndroid Build Coastguard Worker "ComponentHost", 222*6777b538SAndroid Build Coastguard Worker -- Generic Chrome frameworks. 223*6777b538SAndroid Build Coastguard Worker "CompositorView:finalizeLayers", 224*6777b538SAndroid Build Coastguard Worker "CompositorViewHolder", 225*6777b538SAndroid Build Coastguard Worker "CompositorViewHolder:layout", 226*6777b538SAndroid Build Coastguard Worker "CompositorViewHolder:updateContentViewChildrenDimension", 227*6777b538SAndroid Build Coastguard Worker "CoordinatorLayoutForPointer", 228*6777b538SAndroid Build Coastguard Worker "OptimizedFrameLayout", 229*6777b538SAndroid Build Coastguard Worker "ViewResourceAdapter:getBitmap", 230*6777b538SAndroid Build Coastguard Worker "ViewResourceFrameLayout", 231*6777b538SAndroid Build Coastguard Worker -- Non-specific Chrome slices. 232*6777b538SAndroid Build Coastguard Worker "AppCompatImageButton", 233*6777b538SAndroid Build Coastguard Worker "ScrollingBottomViewResourceFrameLayout", 234*6777b538SAndroid Build Coastguard Worker -- Screenshots get their custom annotations below. 235*6777b538SAndroid Build Coastguard Worker "ViewResourceAdapter:captureWithHardwareDraw", 236*6777b538SAndroid Build Coastguard Worker "ViewResourceAdapter:captureWithSoftwareDraw", 237*6777b538SAndroid Build Coastguard Worker -- Non-bytecode generated slices. 238*6777b538SAndroid Build Coastguard Worker "LayoutDriver:onUpdate" 239*6777b538SAndroid Build Coastguard Worker ) 240*6777b538SAndroid Build Coastguard Worker) 241*6777b538SAndroid Build Coastguard WorkerSELECT 242*6777b538SAndroid Build Coastguard Worker s1.*, 243*6777b538SAndroid Build Coastguard Worker -- While the parent slices are too generic to be used by themselves, 244*6777b538SAndroid Build Coastguard Worker -- they can provide some useful metadata. 245*6777b538SAndroid Build Coastguard Worker _has_parent_slice_with_name( 246*6777b538SAndroid Build Coastguard Worker s1.id, 247*6777b538SAndroid Build Coastguard Worker "ViewResourceAdapter:captureWithSoftwareDraw" 248*6777b538SAndroid Build Coastguard Worker ) AS is_software_screenshot, 249*6777b538SAndroid Build Coastguard Worker _has_parent_slice_with_name( 250*6777b538SAndroid Build Coastguard Worker s1.id, 251*6777b538SAndroid Build Coastguard Worker "ViewResourceAdapter:captureWithHardwareDraw" 252*6777b538SAndroid Build Coastguard Worker ) AS is_hardware_screenshot 253*6777b538SAndroid Build Coastguard WorkerFROM interesting_java_slices s1 254*6777b538SAndroid Build Coastguard Worker-- We select "outermost" interesting slices: interesting slices which 255*6777b538SAndroid Build Coastguard Worker-- do not another interesting slice in their parent chain. 256*6777b538SAndroid Build Coastguard WorkerWHERE (SELECT count() 257*6777b538SAndroid Build Coastguard Worker FROM ancestor_slice(s1.id) s2 258*6777b538SAndroid Build Coastguard Worker JOIN interesting_java_slices s3 ON s2.id = s3.id) = 0; 259*6777b538SAndroid Build Coastguard Worker 260*6777b538SAndroid Build Coastguard Worker-- A list of slices corresponding to operations on interesting (non-generic) 261*6777b538SAndroid Build Coastguard Worker-- Chrome Java views. The view is considered interested if it's not a system 262*6777b538SAndroid Build Coastguard Worker-- (ContentFrameLayout) or generic library (CompositorViewHolder) views. 263*6777b538SAndroid Build Coastguard Worker-- 264*6777b538SAndroid Build Coastguard Worker-- TODO(altimin): Add "columns_from slice" annotation. 265*6777b538SAndroid Build Coastguard Worker-- TODO(altimin): convert this to EXTEND_TABLE when it becomes available. 266*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO VIEW chrome_java_views( 267*6777b538SAndroid Build Coastguard Worker -- Name of the view. 268*6777b538SAndroid Build Coastguard Worker filtered_name STRING, 269*6777b538SAndroid Build Coastguard Worker -- Whether this slice is a part of non-accelerated capture toolbar screenshot. 270*6777b538SAndroid Build Coastguard Worker is_software_screenshot BOOL, 271*6777b538SAndroid Build Coastguard Worker -- Whether this slice is a part of accelerated capture toolbar screenshot. 272*6777b538SAndroid Build Coastguard Worker is_hardware_screenshot BOOL, 273*6777b538SAndroid Build Coastguard Worker -- Slice id. 274*6777b538SAndroid Build Coastguard Worker slice_id INT 275*6777b538SAndroid Build Coastguard Worker) AS 276*6777b538SAndroid Build Coastguard WorkerSELECT 277*6777b538SAndroid Build Coastguard Worker java_view.name AS filtered_name, 278*6777b538SAndroid Build Coastguard Worker java_view.is_software_screenshot, 279*6777b538SAndroid Build Coastguard Worker java_view.is_hardware_screenshot, 280*6777b538SAndroid Build Coastguard Worker slice.id as slice_id 281*6777b538SAndroid Build Coastguard WorkerFROM _chrome_java_views java_view 282*6777b538SAndroid Build Coastguard WorkerJOIN slice USING (id); 283*6777b538SAndroid Build Coastguard Worker 284*6777b538SAndroid Build Coastguard Worker-- A list of Choreographer tasks (Android frame generation) in Chrome. 285*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO VIEW _chrome_choreographer_tasks 286*6777b538SAndroid Build Coastguard WorkerAS 287*6777b538SAndroid Build Coastguard WorkerSELECT 288*6777b538SAndroid Build Coastguard Worker id, 289*6777b538SAndroid Build Coastguard Worker "Choreographer" AS kind, 290*6777b538SAndroid Build Coastguard Worker ts, 291*6777b538SAndroid Build Coastguard Worker dur, 292*6777b538SAndroid Build Coastguard Worker name 293*6777b538SAndroid Build Coastguard WorkerFROM slice 294*6777b538SAndroid Build Coastguard WorkerWHERE name GLOB "Looper.dispatch: android.view.Choreographer$FrameHandler*"; 295*6777b538SAndroid Build Coastguard Worker 296*6777b538SAndroid Build Coastguard Worker-- Extract task's posted_from information from task's arguments. 297*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _get_posted_from(arg_set_id INT) 298*6777b538SAndroid Build Coastguard WorkerRETURNS STRING AS 299*6777b538SAndroid Build Coastguard WorkerWITH posted_from as ( 300*6777b538SAndroid Build Coastguard Worker SELECT 301*6777b538SAndroid Build Coastguard Worker EXTRACT_ARG($arg_set_id, "task.posted_from.file_name") AS file_name, 302*6777b538SAndroid Build Coastguard Worker EXTRACT_ARG($arg_set_id, "task.posted_from.function_name") AS function_name 303*6777b538SAndroid Build Coastguard Worker) 304*6777b538SAndroid Build Coastguard WorkerSELECT file_name || ":" || function_name as posted_from 305*6777b538SAndroid Build Coastguard WorkerFROM posted_from; 306*6777b538SAndroid Build Coastguard Worker 307*6777b538SAndroid Build Coastguard Worker-- Selects the BeginMainFrame slices (which as posted from ScheduledActionSendBeginMainFrame), 308*6777b538SAndroid Build Coastguard Worker-- used for root-level processing. In top-level/Java based slices, these will correspond to the 309*6777b538SAndroid Build Coastguard Worker-- ancestor of descendant slices; in long-task tracking, these tasks will be 310*6777b538SAndroid Build Coastguard Worker-- on a custom track and will need to be associated with children by timestamp 311*6777b538SAndroid Build Coastguard Worker-- and duration. Corresponds with the Choreographer root slices in 312*6777b538SAndroid Build Coastguard Worker-- chrome_choreographer_tasks below. 313*6777b538SAndroid Build Coastguard Worker-- 314*6777b538SAndroid Build Coastguard Worker-- Schema: 315*6777b538SAndroid Build Coastguard Worker-- @column is The slice id. 316*6777b538SAndroid Build Coastguard Worker-- @column kind The type of Java slice. 317*6777b538SAndroid Build Coastguard Worker-- @column ts The timestamp of the slice. 318*6777b538SAndroid Build Coastguard Worker-- @column name The name of the slice. 319*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _select_begin_main_frame_java_slices( 320*6777b538SAndroid Build Coastguard Worker name STRING) 321*6777b538SAndroid Build Coastguard WorkerRETURNS TABLE(id INT, kind STRING, ts LONG, dur LONG, name STRING) AS 322*6777b538SAndroid Build Coastguard WorkerSELECT 323*6777b538SAndroid Build Coastguard Worker id, 324*6777b538SAndroid Build Coastguard Worker "SingleThreadProxy::BeginMainFrame" AS kind, 325*6777b538SAndroid Build Coastguard Worker ts, 326*6777b538SAndroid Build Coastguard Worker dur, 327*6777b538SAndroid Build Coastguard Worker name 328*6777b538SAndroid Build Coastguard WorkerFROM slice 329*6777b538SAndroid Build Coastguard WorkerWHERE 330*6777b538SAndroid Build Coastguard Worker (name = $name 331*6777b538SAndroid Build Coastguard Worker AND _get_posted_from(arg_set_id) = 332*6777b538SAndroid Build Coastguard Worker "cc/trees/single_thread_proxy.cc:ScheduledActionSendBeginMainFrame"); 333*6777b538SAndroid Build Coastguard Worker 334*6777b538SAndroid Build Coastguard Worker-- A list of Chrome tasks which were performing operations with Java views, 335*6777b538SAndroid Build Coastguard Worker-- together with the names of these views. 336*6777b538SAndroid Build Coastguard Worker-- @column id INT Slice id. 337*6777b538SAndroid Build Coastguard Worker-- @column kind STRING Type of the task. 338*6777b538SAndroid Build Coastguard Worker-- @column java_views STRING Concatenated names of Java views used by the task. 339*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO VIEW _chrome_slices_with_java_views AS 340*6777b538SAndroid Build Coastguard WorkerWITH 341*6777b538SAndroid Build Coastguard Worker -- Select UI thread BeginMainFrames (which are Chrome scheduler tasks) and 342*6777b538SAndroid Build Coastguard Worker -- Choreographer frames (which are looper tasks). 343*6777b538SAndroid Build Coastguard Worker root_slices AS ( 344*6777b538SAndroid Build Coastguard Worker SELECT id, kind 345*6777b538SAndroid Build Coastguard Worker FROM _SELECT_BEGIN_MAIN_FRAME_JAVA_SLICES('ThreadControllerImpl::RunTask') 346*6777b538SAndroid Build Coastguard Worker UNION ALL 347*6777b538SAndroid Build Coastguard Worker SELECT id, kind FROM _chrome_choreographer_tasks 348*6777b538SAndroid Build Coastguard Worker ), 349*6777b538SAndroid Build Coastguard Worker -- Intermediate step to allow us to sort java view names. 350*6777b538SAndroid Build Coastguard Worker root_slice_and_java_view_not_grouped AS ( 351*6777b538SAndroid Build Coastguard Worker SELECT 352*6777b538SAndroid Build Coastguard Worker root.id, root.kind, java_view.name AS java_view_name 353*6777b538SAndroid Build Coastguard Worker FROM root_slices root 354*6777b538SAndroid Build Coastguard Worker JOIN descendant_slice(root.id) child 355*6777b538SAndroid Build Coastguard Worker JOIN _chrome_java_views java_view ON java_view.id = child.id 356*6777b538SAndroid Build Coastguard Worker ) 357*6777b538SAndroid Build Coastguard WorkerSELECT 358*6777b538SAndroid Build Coastguard Worker root.id, 359*6777b538SAndroid Build Coastguard Worker root.kind, 360*6777b538SAndroid Build Coastguard Worker GROUP_CONCAT(DISTINCT java_view.java_view_name) AS java_views 361*6777b538SAndroid Build Coastguard WorkerFROM root_slices root 362*6777b538SAndroid Build Coastguard WorkerLEFT JOIN root_slice_and_java_view_not_grouped java_view USING (id) 363*6777b538SAndroid Build Coastguard WorkerGROUP BY root.id; 364*6777b538SAndroid Build Coastguard Worker 365*6777b538SAndroid Build Coastguard Worker-- A list of tasks executed by Chrome scheduler. 366*6777b538SAndroid Build Coastguard WorkerCREATE TABLE _chrome_scheduler_tasks AS 367*6777b538SAndroid Build Coastguard WorkerSELECT 368*6777b538SAndroid Build Coastguard Worker id 369*6777b538SAndroid Build Coastguard WorkerFROM slice 370*6777b538SAndroid Build Coastguard WorkerWHERE 371*6777b538SAndroid Build Coastguard Worker category GLOB "*toplevel*" 372*6777b538SAndroid Build Coastguard Worker AND (name = "ThreadControllerImpl::RunTask" OR name = "ThreadPool_RunTask") 373*6777b538SAndroid Build Coastguard WorkerORDER BY id; 374*6777b538SAndroid Build Coastguard Worker 375*6777b538SAndroid Build Coastguard Worker-- A list of tasks executed by Chrome scheduler. 376*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO VIEW chrome_scheduler_tasks( 377*6777b538SAndroid Build Coastguard Worker -- Slice id. 378*6777b538SAndroid Build Coastguard Worker id INT, 379*6777b538SAndroid Build Coastguard Worker -- Type. 380*6777b538SAndroid Build Coastguard Worker type STRING, 381*6777b538SAndroid Build Coastguard Worker -- Name of the task. 382*6777b538SAndroid Build Coastguard Worker name STRING, 383*6777b538SAndroid Build Coastguard Worker -- Timestamp. 384*6777b538SAndroid Build Coastguard Worker ts INT, 385*6777b538SAndroid Build Coastguard Worker -- Duration. 386*6777b538SAndroid Build Coastguard Worker dur INT, 387*6777b538SAndroid Build Coastguard Worker -- Utid of the thread this task run on. 388*6777b538SAndroid Build Coastguard Worker utid INT, 389*6777b538SAndroid Build Coastguard Worker -- Name of the thread this task run on. 390*6777b538SAndroid Build Coastguard Worker thread_name STRING, 391*6777b538SAndroid Build Coastguard Worker -- Upid of the process of this task. 392*6777b538SAndroid Build Coastguard Worker upid INT, 393*6777b538SAndroid Build Coastguard Worker -- Name of the process of this task. 394*6777b538SAndroid Build Coastguard Worker process_name STRING, 395*6777b538SAndroid Build Coastguard Worker -- Same as slice.track_id. 396*6777b538SAndroid Build Coastguard Worker track_id INT, 397*6777b538SAndroid Build Coastguard Worker -- Same as slice.category. 398*6777b538SAndroid Build Coastguard Worker category STRING, 399*6777b538SAndroid Build Coastguard Worker -- Same as slice.depth. 400*6777b538SAndroid Build Coastguard Worker depth INT, 401*6777b538SAndroid Build Coastguard Worker -- Same as slice.parent_id. 402*6777b538SAndroid Build Coastguard Worker parent_id INT, 403*6777b538SAndroid Build Coastguard Worker -- Same as slice.arg_set_id. 404*6777b538SAndroid Build Coastguard Worker arg_set_id INT, 405*6777b538SAndroid Build Coastguard Worker -- Same as slice.thread_ts. 406*6777b538SAndroid Build Coastguard Worker thread_ts INT, 407*6777b538SAndroid Build Coastguard Worker -- Same as slice.thread_dur. 408*6777b538SAndroid Build Coastguard Worker thread_dur INT, 409*6777b538SAndroid Build Coastguard Worker -- Source location where the PostTask was called. 410*6777b538SAndroid Build Coastguard Worker posted_from STRING 411*6777b538SAndroid Build Coastguard Worker) AS 412*6777b538SAndroid Build Coastguard WorkerSELECT 413*6777b538SAndroid Build Coastguard Worker task.id, 414*6777b538SAndroid Build Coastguard Worker "chrome_scheduler_tasks" as type, 415*6777b538SAndroid Build Coastguard Worker _format_scheduler_task_name( 416*6777b538SAndroid Build Coastguard Worker _get_posted_from(slice.arg_set_id)) as name, 417*6777b538SAndroid Build Coastguard Worker slice.ts, 418*6777b538SAndroid Build Coastguard Worker slice.dur, 419*6777b538SAndroid Build Coastguard Worker thread.utid, 420*6777b538SAndroid Build Coastguard Worker thread.name as thread_name, 421*6777b538SAndroid Build Coastguard Worker process.upid, 422*6777b538SAndroid Build Coastguard Worker process.name as process_name, 423*6777b538SAndroid Build Coastguard Worker slice.track_id, 424*6777b538SAndroid Build Coastguard Worker slice.category, 425*6777b538SAndroid Build Coastguard Worker slice.depth, 426*6777b538SAndroid Build Coastguard Worker slice.parent_id, 427*6777b538SAndroid Build Coastguard Worker slice.arg_set_id, 428*6777b538SAndroid Build Coastguard Worker slice.thread_ts, 429*6777b538SAndroid Build Coastguard Worker slice.thread_dur, 430*6777b538SAndroid Build Coastguard Worker _get_posted_from(slice.arg_set_id) as posted_from 431*6777b538SAndroid Build Coastguard WorkerFROM _chrome_scheduler_tasks task 432*6777b538SAndroid Build Coastguard WorkerJOIN slice using (id) 433*6777b538SAndroid Build Coastguard WorkerJOIN thread_track ON slice.track_id = thread_track.id 434*6777b538SAndroid Build Coastguard WorkerJOIN thread using (utid) 435*6777b538SAndroid Build Coastguard WorkerJOIN process using (upid) 436*6777b538SAndroid Build Coastguard WorkerORDER BY task.id; 437*6777b538SAndroid Build Coastguard Worker 438*6777b538SAndroid Build Coastguard Worker-- Select the slice that might be the descendant mojo slice for the given task 439*6777b538SAndroid Build Coastguard Worker-- slice if it exists. 440*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _get_descendant_mojo_slice_candidate( 441*6777b538SAndroid Build Coastguard Worker slice_id INT 442*6777b538SAndroid Build Coastguard Worker) 443*6777b538SAndroid Build Coastguard WorkerRETURNS INT AS 444*6777b538SAndroid Build Coastguard WorkerSELECT 445*6777b538SAndroid Build Coastguard Worker id 446*6777b538SAndroid Build Coastguard WorkerFROM descendant_slice($slice_id) 447*6777b538SAndroid Build Coastguard WorkerWHERE 448*6777b538SAndroid Build Coastguard Worker -- The tricky case here is dealing with sync mojo IPCs: we do not want to 449*6777b538SAndroid Build Coastguard Worker -- pick up sync IPCs when we are in a non-IPC task. 450*6777b538SAndroid Build Coastguard Worker -- So we look at all toplevel events and pick up the first one: 451*6777b538SAndroid Build Coastguard Worker -- for sync mojo messages, it will be "Send mojo message", which then 452*6777b538SAndroid Build Coastguard Worker -- will fail. 453*6777b538SAndroid Build Coastguard Worker -- Some events are excluded as they can legimately appear under "RunTask" 454*6777b538SAndroid Build Coastguard Worker -- before "Receive mojo message". 455*6777b538SAndroid Build Coastguard Worker category GLOB "*toplevel*" AND 456*6777b538SAndroid Build Coastguard Worker name NOT IN ( 457*6777b538SAndroid Build Coastguard Worker "SimpleWatcher::OnHandleReady", 458*6777b538SAndroid Build Coastguard Worker "MessagePipe peer closed") 459*6777b538SAndroid Build Coastguard WorkerORDER by depth, ts 460*6777b538SAndroid Build Coastguard WorkerLIMIT 1; 461*6777b538SAndroid Build Coastguard Worker 462*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO FUNCTION _descendant_mojo_slice(slice_id INT) 463*6777b538SAndroid Build Coastguard WorkerRETURNS TABLE(task_name STRING) AS 464*6777b538SAndroid Build Coastguard WorkerSELECT 465*6777b538SAndroid Build Coastguard Worker printf("%s %s (hash=%d)", 466*6777b538SAndroid Build Coastguard Worker mojo.interface_name, mojo.message_type, mojo.ipc_hash) AS task_name 467*6777b538SAndroid Build Coastguard WorkerFROM slice task 468*6777b538SAndroid Build Coastguard WorkerJOIN _chrome_mojo_slices mojo 469*6777b538SAndroid Build Coastguard Worker ON mojo.id = _get_descendant_mojo_slice_candidate($slice_id) 470*6777b538SAndroid Build Coastguard WorkerWHERE task.id = $slice_id; 471*6777b538SAndroid Build Coastguard Worker 472*6777b538SAndroid Build Coastguard Worker-- A list of "Chrome tasks": top-level execution units (e.g. scheduler tasks / 473*6777b538SAndroid Build Coastguard Worker-- IPCs / system callbacks) run by Chrome. For a given thread, the tasks 474*6777b538SAndroid Build Coastguard Worker-- will not intersect. 475*6777b538SAndroid Build Coastguard Worker-- 476*6777b538SAndroid Build Coastguard Worker-- @column task_name STRING Name for the given task. 477*6777b538SAndroid Build Coastguard Worker-- @column task_type STRING Type of the task (e.g. "scheduler"). 478*6777b538SAndroid Build Coastguard Worker-- @column scheduling_delay INT 479*6777b538SAndroid Build Coastguard WorkerCREATE TABLE _chrome_tasks AS 480*6777b538SAndroid Build Coastguard WorkerWITH 481*6777b538SAndroid Build Coastguard Worker-- Select slices from "toplevel" category which do not have another 482*6777b538SAndroid Build Coastguard Worker-- "toplevel" slice as ancestor. The possible cases include sync mojo messages 483*6777b538SAndroid Build Coastguard Worker-- and tasks in nested runloops. Toplevel events may also be logged as with 484*6777b538SAndroid Build Coastguard Worker-- the Java category. 485*6777b538SAndroid Build Coastguard Workernon_embedded_toplevel_slices AS ( 486*6777b538SAndroid Build Coastguard Worker SELECT * FROM slice 487*6777b538SAndroid Build Coastguard Worker WHERE 488*6777b538SAndroid Build Coastguard Worker _any_top_level_category(category) 489*6777b538SAndroid Build Coastguard Worker AND (SELECT count() FROM ancestor_slice(slice.id) anc 490*6777b538SAndroid Build Coastguard Worker WHERE anc.category GLOB "*toplevel*" or anc.category GLOB "*toplevel.viz*") = 0 491*6777b538SAndroid Build Coastguard Worker), 492*6777b538SAndroid Build Coastguard Worker-- Select slices from "Java" category which do not have another "Java" or 493*6777b538SAndroid Build Coastguard Worker-- "toplevel" slice as parent. In the longer term they should probably belong 494*6777b538SAndroid Build Coastguard Worker-- to "toplevel" category as well, but for now this will have to do. Ensure 495*6777b538SAndroid Build Coastguard Worker-- that "Java" slices do not include "toplevel" slices as those would be 496*6777b538SAndroid Build Coastguard Worker-- handled elsewhere. 497*6777b538SAndroid Build Coastguard Workernon_embedded_java_slices AS ( 498*6777b538SAndroid Build Coastguard Worker SELECT 499*6777b538SAndroid Build Coastguard Worker id, 500*6777b538SAndroid Build Coastguard Worker name AS task_name, 501*6777b538SAndroid Build Coastguard Worker "java" as task_type 502*6777b538SAndroid Build Coastguard Worker FROM slice s 503*6777b538SAndroid Build Coastguard Worker WHERE 504*6777b538SAndroid Build Coastguard Worker _java_not_top_level_category(category) 505*6777b538SAndroid Build Coastguard Worker AND (SELECT count() 506*6777b538SAndroid Build Coastguard Worker FROM ancestor_slice(s.id) s2 507*6777b538SAndroid Build Coastguard Worker WHERE s2.category GLOB "*toplevel*" OR s2.category GLOB "*Java*") = 0 508*6777b538SAndroid Build Coastguard Worker), 509*6777b538SAndroid Build Coastguard Worker-- Generate full names for tasks with java views. 510*6777b538SAndroid Build Coastguard Workerjava_views_tasks AS ( 511*6777b538SAndroid Build Coastguard Worker SELECT 512*6777b538SAndroid Build Coastguard Worker id, 513*6777b538SAndroid Build Coastguard Worker printf('%s(java_views=%s)', kind, java_views) AS task_name, 514*6777b538SAndroid Build Coastguard Worker _get_java_views_task_type(kind) AS task_type 515*6777b538SAndroid Build Coastguard Worker FROM _chrome_slices_with_java_views 516*6777b538SAndroid Build Coastguard Worker), 517*6777b538SAndroid Build Coastguard Workerscheduler_tasks AS ( 518*6777b538SAndroid Build Coastguard Worker SELECT 519*6777b538SAndroid Build Coastguard Worker id, 520*6777b538SAndroid Build Coastguard Worker name as task_name, 521*6777b538SAndroid Build Coastguard Worker "scheduler" as task_type 522*6777b538SAndroid Build Coastguard Worker FROM chrome_scheduler_tasks 523*6777b538SAndroid Build Coastguard Worker), 524*6777b538SAndroid Build Coastguard Worker-- Select scheduler tasks which are used to run mojo messages and use the mojo names 525*6777b538SAndroid Build Coastguard Worker-- as full names for these slices. 526*6777b538SAndroid Build Coastguard Worker-- We restrict this to specific scheduler tasks which are expected to run mojo 527*6777b538SAndroid Build Coastguard Worker-- tasks due to sync mojo events, which also emit similar events. 528*6777b538SAndroid Build Coastguard Workerscheduler_tasks_with_mojo AS ( 529*6777b538SAndroid Build Coastguard Worker SELECT 530*6777b538SAndroid Build Coastguard Worker -- We use the "RunTask" as the task, and pick up the name from its child 531*6777b538SAndroid Build Coastguard Worker -- "Receive mojo message" event. 532*6777b538SAndroid Build Coastguard Worker task.id, 533*6777b538SAndroid Build Coastguard Worker receive_message.task_name, 534*6777b538SAndroid Build Coastguard Worker "mojo" AS task_type 535*6777b538SAndroid Build Coastguard Worker FROM 536*6777b538SAndroid Build Coastguard Worker chrome_scheduler_tasks task 537*6777b538SAndroid Build Coastguard Worker JOIN _DESCENDANT_MOJO_SLICE(task.id) receive_message 538*6777b538SAndroid Build Coastguard Worker WHERE 539*6777b538SAndroid Build Coastguard Worker task.posted_from IN ( 540*6777b538SAndroid Build Coastguard Worker "mojo/public/cpp/system/simple_watcher.cc:Notify", 541*6777b538SAndroid Build Coastguard Worker "mojo/public/cpp/system/simple_watcher.cc:ArmOrNotify", 542*6777b538SAndroid Build Coastguard Worker "mojo/public/cpp/bindings/lib/connector.cc:PostDispatchNextMessageFromPipe", 543*6777b538SAndroid Build Coastguard Worker "ipc/ipc_mojo_bootstrap.cc:Accept") 544*6777b538SAndroid Build Coastguard Worker), 545*6777b538SAndroid Build Coastguard Workernavigation_tasks AS ( 546*6777b538SAndroid Build Coastguard Worker WITH tasks_with_readable_names AS ( 547*6777b538SAndroid Build Coastguard Worker SELECT 548*6777b538SAndroid Build Coastguard Worker id, 549*6777b538SAndroid Build Coastguard Worker _human_readable_navigation_task_name(task_name) as readable_name, 550*6777b538SAndroid Build Coastguard Worker IFNULL(_extract_frame_type(id), 'unknown frame type') as frame_type 551*6777b538SAndroid Build Coastguard Worker FROM 552*6777b538SAndroid Build Coastguard Worker scheduler_tasks_with_mojo 553*6777b538SAndroid Build Coastguard Worker ) 554*6777b538SAndroid Build Coastguard Worker SELECT 555*6777b538SAndroid Build Coastguard Worker id, 556*6777b538SAndroid Build Coastguard Worker printf("%s (%s)", readable_name, frame_type) as task_name, 557*6777b538SAndroid Build Coastguard Worker 'navigation_task' AS task_type 558*6777b538SAndroid Build Coastguard Worker FROM tasks_with_readable_names 559*6777b538SAndroid Build Coastguard Worker WHERE readable_name IS NOT NULL 560*6777b538SAndroid Build Coastguard Worker), 561*6777b538SAndroid Build Coastguard Worker-- Add scheduler and mojo full names to non-embedded slices from 562*6777b538SAndroid Build Coastguard Worker-- the "toplevel" category, with mojo ones taking precedence. 563*6777b538SAndroid Build Coastguard Workernon_embedded_toplevel_slices_with_task_name AS ( 564*6777b538SAndroid Build Coastguard Worker SELECT 565*6777b538SAndroid Build Coastguard Worker task.id AS id, 566*6777b538SAndroid Build Coastguard Worker COALESCE( 567*6777b538SAndroid Build Coastguard Worker navigation.task_name, 568*6777b538SAndroid Build Coastguard Worker java_views.task_name, 569*6777b538SAndroid Build Coastguard Worker mojo.task_name, 570*6777b538SAndroid Build Coastguard Worker scheduler.task_name, 571*6777b538SAndroid Build Coastguard Worker task.name 572*6777b538SAndroid Build Coastguard Worker ) AS name, 573*6777b538SAndroid Build Coastguard Worker COALESCE( 574*6777b538SAndroid Build Coastguard Worker navigation.task_type, 575*6777b538SAndroid Build Coastguard Worker java_views.task_type, 576*6777b538SAndroid Build Coastguard Worker mojo.task_type, 577*6777b538SAndroid Build Coastguard Worker scheduler.task_type, 578*6777b538SAndroid Build Coastguard Worker "other" 579*6777b538SAndroid Build Coastguard Worker ) AS task_type 580*6777b538SAndroid Build Coastguard Worker FROM non_embedded_toplevel_slices task 581*6777b538SAndroid Build Coastguard Worker LEFT JOIN scheduler_tasks_with_mojo mojo ON mojo.id = task.id 582*6777b538SAndroid Build Coastguard Worker LEFT JOIN scheduler_tasks scheduler ON scheduler.id = task.id 583*6777b538SAndroid Build Coastguard Worker LEFT JOIN java_views_tasks java_views ON java_views.id = task.id 584*6777b538SAndroid Build Coastguard Worker LEFT JOIN navigation_tasks navigation ON navigation.id = task.id 585*6777b538SAndroid Build Coastguard Worker) 586*6777b538SAndroid Build Coastguard Worker-- Merge slices from toplevel and Java categories. 587*6777b538SAndroid Build Coastguard WorkerSELECT * FROM non_embedded_toplevel_slices_with_task_name 588*6777b538SAndroid Build Coastguard WorkerUNION ALL 589*6777b538SAndroid Build Coastguard WorkerSELECT * FROM non_embedded_java_slices 590*6777b538SAndroid Build Coastguard WorkerORDER BY id; 591*6777b538SAndroid Build Coastguard Worker 592*6777b538SAndroid Build Coastguard Worker-- A list of "Chrome tasks": top-level execution units (e.g. scheduler tasks / 593*6777b538SAndroid Build Coastguard Worker-- IPCs / system callbacks) run by Chrome. For a given thread, the slices 594*6777b538SAndroid Build Coastguard Worker-- corresponding to these tasks will not intersect. 595*6777b538SAndroid Build Coastguard WorkerCREATE PERFETTO VIEW chrome_tasks( 596*6777b538SAndroid Build Coastguard Worker -- Id for the given task, also the id of the slice this task corresponds to. 597*6777b538SAndroid Build Coastguard Worker id INT, 598*6777b538SAndroid Build Coastguard Worker -- Name for the given task. 599*6777b538SAndroid Build Coastguard Worker name STRING, 600*6777b538SAndroid Build Coastguard Worker -- Type of the task (e.g. "scheduler"). 601*6777b538SAndroid Build Coastguard Worker task_type STRING, 602*6777b538SAndroid Build Coastguard Worker -- Thread name. 603*6777b538SAndroid Build Coastguard Worker thread_name STRING, 604*6777b538SAndroid Build Coastguard Worker -- Utid. 605*6777b538SAndroid Build Coastguard Worker utid INT, 606*6777b538SAndroid Build Coastguard Worker -- Process name. 607*6777b538SAndroid Build Coastguard Worker process_name STRING, 608*6777b538SAndroid Build Coastguard Worker -- Upid. 609*6777b538SAndroid Build Coastguard Worker upid INT, 610*6777b538SAndroid Build Coastguard Worker -- Alias of |slice.ts|. 611*6777b538SAndroid Build Coastguard Worker ts INT, 612*6777b538SAndroid Build Coastguard Worker -- Alias of |slice.dur|. 613*6777b538SAndroid Build Coastguard Worker dur INT, 614*6777b538SAndroid Build Coastguard Worker -- Alias of |slice.track_id|. 615*6777b538SAndroid Build Coastguard Worker track_id INT, 616*6777b538SAndroid Build Coastguard Worker -- Alias of |slice.category|. 617*6777b538SAndroid Build Coastguard Worker category INT, 618*6777b538SAndroid Build Coastguard Worker -- Alias of |slice.arg_set_id|. 619*6777b538SAndroid Build Coastguard Worker arg_set_id INT, 620*6777b538SAndroid Build Coastguard Worker -- Alias of |slice.thread_ts|. 621*6777b538SAndroid Build Coastguard Worker thread_ts INT, 622*6777b538SAndroid Build Coastguard Worker -- Alias of |slice.thread_dur|. 623*6777b538SAndroid Build Coastguard Worker thread_dur INT, 624*6777b538SAndroid Build Coastguard Worker -- STRING Legacy alias for |name|. 625*6777b538SAndroid Build Coastguard Worker full_name STRING 626*6777b538SAndroid Build Coastguard Worker) AS 627*6777b538SAndroid Build Coastguard WorkerSELECT 628*6777b538SAndroid Build Coastguard Worker cti.id, 629*6777b538SAndroid Build Coastguard Worker cti.name, 630*6777b538SAndroid Build Coastguard Worker task_type, 631*6777b538SAndroid Build Coastguard Worker thread.name AS thread_name, 632*6777b538SAndroid Build Coastguard Worker thread.utid, 633*6777b538SAndroid Build Coastguard Worker process.name AS process_name, 634*6777b538SAndroid Build Coastguard Worker thread.upid, 635*6777b538SAndroid Build Coastguard Worker s.ts, 636*6777b538SAndroid Build Coastguard Worker s.dur, 637*6777b538SAndroid Build Coastguard Worker s.track_id, 638*6777b538SAndroid Build Coastguard Worker s.category, 639*6777b538SAndroid Build Coastguard Worker s.arg_set_id, 640*6777b538SAndroid Build Coastguard Worker s.thread_ts, 641*6777b538SAndroid Build Coastguard Worker s.thread_dur, 642*6777b538SAndroid Build Coastguard Worker cti.name as full_name 643*6777b538SAndroid Build Coastguard WorkerFROM _chrome_tasks cti 644*6777b538SAndroid Build Coastguard WorkerJOIN slice s ON cti.id = s.id 645*6777b538SAndroid Build Coastguard WorkerJOIN thread_track tt ON s.track_id = tt.id 646*6777b538SAndroid Build Coastguard WorkerJOIN thread USING (utid) 647*6777b538SAndroid Build Coastguard WorkerJOIN process USING (upid); 648