xref: /aosp_15_r20/external/cronet/base/tracing/stdlib/chrome/tasks.sql (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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