• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1-- Maps non-aggregated Blink GC events in timeline to telemetry friendly
2-- names.
3--
4-- This includes the old style or the new naming scheme one which only occur on
5-- the main thread.
6DROP VIEW IF EXISTS blink_non_aggregated_gc_event_name;
7CREATE VIEW blink_non_aggregated_gc_event_name AS
8SELECT
9  'BlinkGC.AtomicPauseMarkEpilogue' AS name,
10  'blink-gc-atomic-pause-mark-epilogue' AS old_event_name,
11  'blink:gc:main_thread:cycle:full:atomic:mark:epilogue' AS new_event_name
12UNION ALL
13SELECT
14  'BlinkGC.AtomicPauseMarkPrologue',
15  'blink-gc-atomic-pause-mark-prologue',
16  'blink:gc:main_thread:cycle:full:atomic:mark:prologue'
17UNION ALL
18SELECT
19  'BlinkGC.AtomicPauseMarkRoots',
20  'blink-gc-atomic-pause-mark-roots',
21  'blink:gc:main_thread:cycle:full:atomic:mark:roots'
22UNION ALL
23SELECT
24  'BlinkGC.IncrementalMarkingStartMarking',
25  'blink-gc-incremental-start',
26  'blink:gc:main_thread:cycle:full:incremental:mark:start'
27UNION ALL
28SELECT
29  'BlinkGC.IncrementalMarkingStep',
30  'blink-gc-incremental-step',
31  'blink:gc:main_thread:cycle:full:incremental:mark:step'
32UNION ALL
33SELECT
34  'BlinkGC.UnifiedMarkingStep',
35  'blink-gc-unified-marking-by-v8',
36  'unified:gc:main_thread:cycle:full:mark:step'
37UNION ALL
38SELECT
39  'BlinkGC.CompleteSweep',
40  'blink-gc-complete-sweep',
41  'blink:gc:main_thread:cycle:full:sweep:complete'
42UNION ALL
43SELECT
44  'BlinkGC.LazySweepInIdle',
45  'blink-gc-sweep-task-foreground',
46  'blink:gc:main_thread:cycle:full:sweep:idle'
47UNION ALL
48SELECT
49  'BlinkGC.LazySweepOnAllocation',
50  'blink-gc-sweep-allocation',
51  'blink:gc:main_thread:cycle:full:sweep:on_allocation'
52UNION ALL
53SELECT
54  'BlinkGC.AtomicPauseSweepAndCompact' AS name,
55  'blink-gc-atomic-pause-sweep-and-compact' AS old_event_name,
56  'blink:gc:main_thread:cycle:full:atomic:sweep:compact' AS new_event_name;
57
58-- Get all the slices we care about. These are ones that start with V8.GC or
59-- BlinkGC. If you need more you need to modify the where clause for
60-- blink_gc_cpu_slice.
61DROP TABLE IF EXISTS blink_gc_cpu_slice;
62CREATE TABLE blink_gc_cpu_slice AS
63SELECT
64  CASE WHEN dur != 0 THEN cpuDurNs/1e6 ELSE 0.0 END AS cpuDurMs,
65  *
66FROM (
67  SELECT
68    COALESCE(EXTRACT_ARG(arg_set_id, 'debug.forced'), FALSE) OR
69    -- This subquery replaces
70    -- metrics.v8.utils.isForcedGarbageCollectionEvent(event)
71    (
72      SELECT
73        id
74      FROM ANCESTOR_SLICE(slice.id) AS ancestor
75      WHERE ancestor.name = 'V8.GCLowMemoryNotification' LIMIT 1
76    ) IS NOT NULL AS forced,
77    -- upid replaces pid, because its more fool proof ensuring uniqueness.
78    thread.upid || ':' || EXTRACT_ARG(arg_set_id, 'debug.epoch') AS epoch,
79    slice.thread_dur AS cpuDurNs,
80    slice.*
81  FROM thread_slice as slice
82  INNER JOIN thread_track ON slice.track_id = thread_track.id
83  INNER JOIN thread ON thread_track.utid = thread.id
84  WHERE
85    slice.dur >= 0 AND (
86    slice.name GLOB "V8.GC*" OR (slice.name GLOB "BlinkGC*" AND NOT forced)
87  )
88);
89
90-- This grabs all the single events for "BlinkGC.*", and restricts to only
91-- forced events.
92DROP TABLE IF EXISTS blink_slice;
93CREATE TABLE blink_slice AS
94SELECT
95  event_name.old_event_name AS blink_non_aggregated_gc_event_name,
96  event_name.new_event_name AS blink_non_aggregated_gc_events_new_name,
97  blink_gc_cpu_slice.*
98FROM
99  blink_gc_cpu_slice LEFT JOIN
100  blink_non_aggregated_gc_event_name AS event_name ON
101      event_name.name = blink_gc_cpu_slice.name
102WHERE
103  blink_gc_cpu_slice.name GLOB "BlinkGC*" AND NOT forced;
104
105-- This groups all the events by name and epoch for from "blink_slice" for easy
106-- access.
107DROP TABLE IF EXISTS blink_per_epoch_slice;
108CREATE TABLE blink_per_epoch_slice AS
109SELECT
110  name,
111  epoch,
112  blink_non_aggregated_gc_event_name,
113  blink_non_aggregated_gc_events_new_name,
114  SUM(cpuDurMs) AS cpuDurPerEpochMs
115FROM blink_slice
116GROUP BY 1, 2, 3, 4;
117
118-- All events that should be summed up to 'blink-gc-mark-roots'.
119DROP VIEW IF EXISTS blink_top_gc_roots_marking_event;
120CREATE VIEW blink_top_gc_roots_marking_event AS
121SELECT * FROM blink_slice WHERE name in (
122  'BlinkGC.VisitRoots'
123);
124
125-- All events that should be summed up to
126-- 'blink-gc-atomic-pause-mark-transitive-closure'.
127DROP VIEW IF EXISTS blink_gc_atomic_pause_transitive_closure_event;
128CREATE VIEW blink_gc_atomic_pause_transitive_closure_event AS
129SELECT * FROM blink_slice WHERE name in (
130  'BlinkGC.AtomicPauseMarkTransitiveClosure'
131);
132
133-- All events that should be summed up to 'blink-gc-mark-transitive-closure'.
134DROP VIEW IF EXISTS blink_gc_foreground_marking_transitive_closure_event;
135CREATE VIEW
136      blink_gc_foreground_marking_transitive_closure_event AS
137SELECT * FROM blink_slice WHERE name in (
138  'BlinkGC.AtomicPauseMarkTransitiveClosure',
139  'BlinkGC.IncrementalMarkingStep',
140  'BlinkGC.UnifiedMarkingStep'
141);
142
143-- Names of Blink GC foreground marking events in timeline.
144DROP VIEW IF EXISTS blink_top_gc_foreground_marking_event;
145CREATE VIEW blink_top_gc_foreground_marking_event AS
146SELECT * FROM blink_slice WHERE name in (
147  'BlinkGC.AtomicPauseMarkEpilogue',
148  'BlinkGC.AtomicPauseMarkPrologue',
149  'BlinkGC.AtomicPauseMarkRoots',
150  'BlinkGC.IncrementalMarkingStartMarking'
151)
152UNION ALL
153SELECT * FROM blink_gc_foreground_marking_transitive_closure_event;
154
155-- Names of Blink GC foreground marking events in timeline.
156DROP VIEW IF EXISTS blink_gc_forced_foreground_marking_event;
157CREATE VIEW blink_gc_forced_foreground_marking_event AS
158SELECT * FROM blink_slice WHERE name in (
159  'BlinkGC.AtomicPauseMarkEpilogue',
160  'BlinkGC.AtomicPauseMarkPrologue',
161  'BlinkGC.AtomicPauseMarkRoots',
162  'BlinkGC.IncrementalMarkingStartMarking',
163  'BlinkGC.MarkBailOutObjects',
164  'BlinkGC.MarkFlushV8References',
165  'BlinkGC.MarkFlushEphemeronPairs'
166);
167
168-- Names of Blink GC background marking events in timeline.
169DROP VIEW IF EXISTS blink_top_gc_background_marking_event;
170CREATE VIEW blink_top_gc_background_marking_event AS
171SELECT * FROM blink_slice WHERE name in (
172  'BlinkGC.ConcurrentMarkingStep'
173);
174
175-- Names of Blink GC foreground sweeping events in timeline.
176DROP VIEW IF EXISTS blink_top_gc_foreground_sweeping_event;
177CREATE VIEW blink_top_gc_foreground_sweeping_event AS
178SELECT * FROM blink_slice WHERE name in (
179  'BlinkGC.CompleteSweep',
180  'BlinkGC.LazySweepInIdle',
181  'BlinkGC.LazySweepOnAllocation'
182);
183
184-- Names of Blink GC background sweeping events in timeline.
185DROP VIEW IF EXISTS blink_top_gc_background_sweeping_event;
186CREATE VIEW blink_top_gc_background_sweeping_event AS
187SELECT * FROM blink_slice WHERE name in (
188  'BlinkGC.ConcurrentSweepingStep'
189);
190
191-- Names of all Blink Unified GC events in timeline.
192DROP VIEW IF EXISTS blink_top_gc_event;
193CREATE VIEW blink_top_gc_event AS
194SELECT * FROM blink_slice WHERE name in (
195  SELECT name FROM blink_non_aggregated_gc_event_name
196) OR name in (
197  SELECT name FROM blink_gc_atomic_pause_transitive_closure_event
198);
199
200-- All events that should be summed up to 'blink-gc-atomic-pause'. Note that
201-- this events need to have an epoch counter in args.epoch.
202DROP VIEW IF EXISTS atomic_pause_event;
203CREATE VIEW atomic_pause_event AS
204SELECT * FROM blink_slice WHERE name in (
205  'BlinkGC.AtomicPauseMarkEpilogue',
206  'BlinkGC.AtomicPauseMarkPrologue',
207  'BlinkGC.AtomicPauseMarkRoots',
208  'BlinkGC.AtomicPauseMarkTransitiveClosure',
209  'BlinkGC.AtomicPauseSweepAndCompact'
210);
211
212-- This is a more complex variable so benefits from additional comments so we
213-- pull it out of the proto filling.
214DROP VIEW IF EXISTS unified_gc_total;
215CREATE VIEW unified_gc_total AS
216SELECT
217  *
218FROM blink_gc_cpu_slice
219WHERE (
220  -- This subclause replaces
221  -- metrics.v8.utils.isNotForcedTopGarbageCollectionEvent()
222
223  -- These names are found in isTopGarbageCollectionEvent().
224  name in (
225    'V8.GCCompactor',
226    'V8.GCFinalizeMC',
227    'V8.GCFinalizeMCReduceMemory',
228    'V8.GCIncrementalMarking',
229    'V8.GCIncrementalMarkingFinalize',
230    'V8.GCIncrementalMarkingStart',
231    'V8.GCPhantomHandleProcessingCallback',
232    'V8.GCScavenger'
233  ) AND (
234    -- This replaces isForcedGarbageCollectionEvent.
235    SELECT name FROM ANCESTOR_SLICE(blink_gc_cpu_slice.id) AS ancestor
236    WHERE ancestor.name == 'V8.GCLowMemoryNotification'
237    LIMIT 1
238  ) IS NULL
239) OR (
240  -- This subclause replaces isNonNestedNonForcedBlinkGarbageCollectionEvent().
241  name IN (
242    -- This subquery replaces isNonForcedBlinkGarbageCollectionEvent().
243    SELECT name FROM blink_top_gc_event
244  ) AND (
245    -- This subquery replaces metrics.v8.utils.isGarbageCollectionEvent().
246    SELECT name FROM ANCESTOR_SLICE(blink_gc_cpu_slice.id) AS ancestor
247    WHERE
248      ancestor.name GLOB "V8.GC*" AND
249      ancestor.name != 'V8.GCLowMemoryNotification'
250    LIMIT 1
251  ) IS NULL
252);
253
254-- This table name is just "file_name" + "_output" used by TBMv3 to know which
255-- view to extract the proto BlinkGcMetric out of.
256DROP VIEW IF EXISTS blink_gc_metric_output;
257CREATE VIEW blink_gc_metric_output AS
258SELECT BlinkGcMetric(
259  'blink_gc_atomic_pause_mark_epilogue',
260  (
261    SELECT
262      RepeatedField(cpuDurMs)
263    FROM blink_slice
264    WHERE
265      blink_non_aggregated_gc_event_name = 'blink-gc-atomic-pause-mark-epilogue'
266  ),
267  'blink_gc_main_thread_cycle_full_atomic_mark_epilogue',
268  (
269    SELECT
270      RepeatedField(cpuDurPerEpochMs)
271    FROM blink_per_epoch_slice
272    WHERE
273      blink_non_aggregated_gc_events_new_name =
274          'blink:gc:main_thread:cycle:full:atomic:mark:epilogue'
275  ),
276  'blink_gc_atomic_pause_mark_prologue',
277  (
278    SELECT
279      RepeatedField(cpuDurMs)
280    FROM blink_slice
281    WHERE
282      blink_non_aggregated_gc_event_name =
283          'blink-gc-atomic-pause-mark-prologue'
284  ),
285  'blink_gc_main_thread_cycle_full_atomic_mark_prologue',
286  (
287    SELECT
288      RepeatedField(cpuDurPerEpochMs)
289    FROM blink_per_epoch_slice
290    WHERE
291      blink_non_aggregated_gc_events_new_name =
292          'blink:gc:main_thread:cycle:full:atomic:mark:prologue'
293  ),
294  'blink_gc_atomic_pause_mark_roots',
295  (
296    SELECT
297      RepeatedField(cpuDurMs)
298    FROM blink_slice
299    WHERE
300      blink_non_aggregated_gc_event_name = 'blink-gc-atomic-pause-mark-roots'
301  ),
302  'blink_gc_main_thread_cycle_full_atomic_mark_roots',
303  (
304    SELECT
305      RepeatedField(cpuDurPerEpochMs)
306    FROM blink_per_epoch_slice
307    WHERE
308      blink_non_aggregated_gc_events_new_name =
309          'blink:gc:main_thread:cycle:full:atomic:mark:roots'
310  ),
311  'blink_gc_atomic_pause_sweep_and_compact',
312  (
313    SELECT
314      RepeatedField(cpuDurMs)
315    FROM blink_slice
316    WHERE
317      blink_non_aggregated_gc_event_name =
318          'blink-gc-atomic-pause-sweep-and-compact'
319  ),
320  'blink_gc_main_thread_cycle_full_atomic_sweep_compact',
321  (
322    SELECT
323      RepeatedField(cpuDurPerEpochMs)
324    FROM blink_per_epoch_slice
325    WHERE
326      blink_non_aggregated_gc_events_new_name =
327          'blink:gc:main_thread:cycle:full:atomic:sweep:compact'
328  ),
329  'blink_gc_complete_sweep',
330  (
331    SELECT
332      RepeatedField(cpuDurMs)
333    FROM blink_slice
334    WHERE blink_non_aggregated_gc_event_name = 'blink-gc-complete-sweep'
335  ),
336  'blink_gc_main_thread_cycle_full_sweep_complete',
337  (
338    SELECT
339      RepeatedField(cpuDurPerEpochMs)
340    FROM blink_per_epoch_slice
341    WHERE
342      blink_non_aggregated_gc_events_new_name =
343          'blink:gc:main_thread:cycle:full:sweep:complete'
344  ),
345  'blink_gc_incremental_start',
346  (
347    SELECT
348      RepeatedField(cpuDurMs)
349    FROM blink_slice
350    WHERE blink_non_aggregated_gc_event_name = 'blink-gc-incremental-start'
351  ),
352  'blink_gc_main_thread_cycle_full_incremental_mark_start',
353  (
354    SELECT
355      RepeatedField(cpuDurPerEpochMs)
356    FROM blink_per_epoch_slice
357    WHERE
358      blink_non_aggregated_gc_events_new_name =
359          'blink:gc:main_thread:cycle:full:incremental:mark:start'
360  ),
361  'blink_gc_incremental_step',
362  (
363    SELECT
364      RepeatedField(cpuDurMs)
365    FROM blink_slice
366    WHERE blink_non_aggregated_gc_event_name = 'blink-gc-incremental-step'
367  ),
368  'blink_gc_main_thread_cycle_full_incremental_mark_step',
369  (
370    SELECT
371      RepeatedField(cpuDurPerEpochMs)
372    FROM blink_per_epoch_slice
373    WHERE
374      blink_non_aggregated_gc_events_new_name =
375          'blink:gc:main_thread:cycle:full:incremental:mark:step'
376  ),
377  'blink_gc_sweep_allocation',
378  (
379    SELECT
380      RepeatedField(cpuDurMs)
381    FROM blink_slice
382    WHERE blink_non_aggregated_gc_event_name = 'blink-gc-sweep-allocation'
383  ),
384  'blink_gc_main_thread_cycle_full_sweep_on_allocation',
385  (
386    SELECT
387      RepeatedField(cpuDurPerEpochMs)
388    FROM blink_per_epoch_slice
389    WHERE
390      blink_non_aggregated_gc_events_new_name =
391          'blink:gc:main_thread:cycle:full:sweep:on_allocation'
392  ),
393  'blink_gc_sweep_task_foreground',
394  (
395    SELECT
396      RepeatedField(cpuDurMs)
397    FROM blink_slice
398    WHERE blink_non_aggregated_gc_event_name = 'blink-gc-sweep-task-foreground'
399  ),
400  'blink_gc_main_thread_cycle_full_sweep_idle',
401  (
402    SELECT
403      RepeatedField(cpuDurPerEpochMs)
404    FROM blink_per_epoch_slice
405    WHERE
406      blink_non_aggregated_gc_events_new_name =
407          'blink:gc:main_thread:cycle:full:sweep:idle'
408  ),
409  'blink_gc_unified_marking_by_v8',
410  (
411    SELECT
412      RepeatedField(cpuDurMs)
413    FROM blink_slice
414    WHERE blink_non_aggregated_gc_event_name = 'blink-gc-unified-marking-by-v8'
415  ),
416  'unified_gc_main_thread_cycle_full_mark_step',
417  (
418    SELECT
419      RepeatedField(cpuDurPerEpochMs)
420    FROM blink_per_epoch_slice
421    WHERE
422      blink_non_aggregated_gc_events_new_name =
423          'unified:gc:main_thread:cycle:full:mark:step'
424  ),
425  'blink_gc_atomic_pause',
426  (
427    SELECT
428      RepeatedField(cpuDurMs)
429    FROM atomic_pause_event
430  ),
431  'blink_gc_main_thread_cycle_full_atomic',
432  (
433    SELECT RepeatedField(val) FROM (
434      SELECT
435        SUM(cpuDurMs) as val
436      FROM atomic_pause_event
437      GROUP BY epoch
438    )
439  ),
440  'blink_gc_atomic_pause_mark_transitive_closure',
441  (
442    SELECT
443      RepeatedField(cpuDurMs)
444    FROM blink_gc_atomic_pause_transitive_closure_event
445  ),
446  'blink_gc_main_thread_cycle_full_atomic_mark_transitive_closure',
447  (
448    SELECT RepeatedField(val) FROM (
449      SELECT
450        SUM(cpuDurMs) as val
451      FROM blink_gc_atomic_pause_transitive_closure_event
452      GROUP BY epoch
453    )
454  ),
455  'blink_gc_total',
456  (
457    SELECT
458      RepeatedField(cpuDurMs)
459    FROM blink_top_gc_event
460  ),
461  'blink_gc_main_thread_cycle_full',
462  (
463    SELECT RepeatedField(val) FROM (
464      SELECT
465        SUM(cpuDurMs) as val
466      FROM blink_top_gc_event
467      GROUP BY epoch
468    )
469  ),
470  'blink_gc_mark_roots',
471  (
472    SELECT
473      RepeatedField(cpuDurMs)
474    FROM blink_top_gc_roots_marking_event
475  ),
476  'blink_gc_main_thread_cycle_full_mark_roots',
477  (
478    SELECT RepeatedField(val) FROM (
479      SELECT
480        SUM(cpuDurMs) as val
481      FROM blink_top_gc_roots_marking_event
482      GROUP BY epoch
483    )
484  ),
485  'blink_gc_mark_transitive_closure',
486  (
487    SELECT
488      RepeatedField(cpuDurMs)
489    FROM blink_gc_foreground_marking_transitive_closure_event
490  ),
491  'blink_gc_main_thread_cycle_full_mark_transitive_closure',
492  (
493    SELECT RepeatedField(val) FROM (
494      SELECT
495        SUM(cpuDurMs) as val
496      FROM blink_gc_foreground_marking_transitive_closure_event
497      GROUP BY epoch
498    )
499  ),
500  'blink_gc_mark_foreground',
501  (
502    SELECT
503      RepeatedField(cpuDurMs)
504    FROM blink_top_gc_foreground_marking_event
505  ),
506  'blink_gc_main_thread_cycle_full_mark',
507  (
508    SELECT RepeatedField(val) FROM (
509      SELECT
510        SUM(cpuDurMs) as val
511      FROM blink_top_gc_foreground_marking_event
512      GROUP BY epoch
513    )
514  ),
515  'blink_gc_mark_foreground_forced',
516  (
517    SELECT
518      RepeatedField(cpuDurMs)
519    FROM blink_gc_forced_foreground_marking_event
520  ),
521  'blink_gc_main_thread_cycle_full_mark_forced',
522  (
523    SELECT RepeatedField(val) FROM (
524      SELECT
525        SUM(cpuDurMs) as val
526      FROM blink_gc_forced_foreground_marking_event
527      GROUP BY epoch
528    )
529  ),
530  'blink_gc_mark_background',
531  (
532    SELECT
533      RepeatedField(cpuDurMs)
534    FROM blink_top_gc_background_marking_event
535  ),
536  'blink_gc_concurrent_thread_cycle_full_mark',
537  (
538    SELECT RepeatedField(val) FROM (
539      SELECT
540        SUM(cpuDurMs) as val
541      FROM blink_top_gc_background_marking_event
542      GROUP BY epoch
543    )
544  ),
545  'blink_gc_sweep_foreground',
546  (
547    SELECT
548      RepeatedField(cpuDurMs)
549    FROM blink_top_gc_foreground_sweeping_event
550  ),
551  'blink_gc_main_thread_cycle_full_sweep',
552  (
553    SELECT RepeatedField(val) FROM (
554      SELECT
555        SUM(cpuDurMs) as val
556      FROM blink_top_gc_foreground_sweeping_event
557      GROUP BY epoch
558    )
559  ),
560  'blink_gc_sweep_background',
561  (
562    SELECT
563      RepeatedField(cpuDurMs)
564    FROM blink_top_gc_background_sweeping_event
565  ),
566  'blink_gc_concurrent_thread_cycle_full_sweep',
567  (
568    SELECT RepeatedField(val) FROM (
569      SELECT
570        SUM(cpuDurMs) as val
571      FROM blink_top_gc_background_sweeping_event
572      GROUP BY epoch
573    )
574  ),
575  'unified_gc_total',
576  (
577    SELECT
578      RepeatedField(cpuDurMs)
579    FROM unified_gc_total
580  )
581);
582