@paulirish/trace_engine 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/PAUL.readme.md +5 -0
  2. package/core/platform/StringUtilities.js +3 -3
  3. package/core/platform/StringUtilities.js.map +1 -1
  4. package/core/platform/TypedArrayUtilities.d.ts +26 -0
  5. package/core/platform/TypedArrayUtilities.js +111 -0
  6. package/core/platform/TypedArrayUtilities.js.map +1 -0
  7. package/core/platform/platform-tsconfig.json +1 -0
  8. package/core/platform/platform.d.ts +2 -1
  9. package/core/platform/platform.js +2 -1
  10. package/core/platform/platform.js.map +1 -1
  11. package/generated/protocol.d.ts +63 -1
  12. package/models/trace/EntriesFilter.d.ts +3 -2
  13. package/models/trace/EntriesFilter.js +5 -3
  14. package/models/trace/EntriesFilter.js.map +1 -1
  15. package/models/trace/LegacyTracingModel.js.map +1 -1
  16. package/models/trace/Processor.js +7 -1
  17. package/models/trace/Processor.js.map +1 -1
  18. package/models/trace/handlers/ExtensionTraceDataHandler.d.ts +13 -0
  19. package/models/trace/handlers/ExtensionTraceDataHandler.js +93 -0
  20. package/models/trace/handlers/ExtensionTraceDataHandler.js.map +1 -0
  21. package/models/trace/handlers/InvalidationsHandler.js +9 -0
  22. package/models/trace/handlers/InvalidationsHandler.js.map +1 -1
  23. package/models/trace/handlers/MetaHandler.js +4 -2
  24. package/models/trace/handlers/MetaHandler.js.map +1 -1
  25. package/models/trace/handlers/ModelHandlers.d.ts +1 -0
  26. package/models/trace/handlers/ModelHandlers.js +1 -0
  27. package/models/trace/handlers/ModelHandlers.js.map +1 -1
  28. package/models/trace/handlers/PageLoadMetricsHandler.d.ts +0 -7
  29. package/models/trace/handlers/PageLoadMetricsHandler.js +2 -21
  30. package/models/trace/handlers/PageLoadMetricsHandler.js.map +1 -1
  31. package/models/trace/handlers/handlers-tsconfig.json +1 -0
  32. package/models/trace/helpers/Extensions.d.ts +2 -0
  33. package/models/trace/helpers/Extensions.js +22 -0
  34. package/models/trace/helpers/Extensions.js.map +1 -0
  35. package/models/trace/helpers/Trace.d.ts +4 -3
  36. package/models/trace/helpers/Trace.js +17 -3
  37. package/models/trace/helpers/Trace.js.map +1 -1
  38. package/models/trace/helpers/helpers-tsconfig.json +1 -0
  39. package/models/trace/helpers/helpers.d.ts +1 -0
  40. package/models/trace/helpers/helpers.js +1 -0
  41. package/models/trace/helpers/helpers.js.map +1 -1
  42. package/models/trace/root-causes/LayoutShift.d.ts +7 -1
  43. package/models/trace/root-causes/LayoutShift.js +19 -4
  44. package/models/trace/root-causes/LayoutShift.js.map +1 -1
  45. package/models/trace/root-causes/RootCauses.d.ts +1 -0
  46. package/models/trace/root-causes/RootCauses.js +1 -0
  47. package/models/trace/root-causes/RootCauses.js.map +1 -1
  48. package/models/trace/types/Extensions.d.ts +62 -0
  49. package/models/trace/types/Extensions.js +38 -0
  50. package/models/trace/types/Extensions.js.map +1 -0
  51. package/models/trace/types/File.d.ts +10 -3
  52. package/models/trace/types/File.js.map +1 -1
  53. package/models/trace/types/TraceEvents.d.ts +32 -13
  54. package/models/trace/types/TraceEvents.js +31 -9
  55. package/models/trace/types/TraceEvents.js.map +1 -1
  56. package/models/trace/types/types-tsconfig.json +1 -0
  57. package/models/trace/types/types.d.ts +1 -0
  58. package/models/trace/types/types.js +1 -0
  59. package/models/trace/types/types.js.map +1 -1
  60. package/package.json +1 -1
@@ -1,16 +1,23 @@
1
+ import { type TraceWindowMicroSeconds } from './Timing.js';
1
2
  import { type TraceEventData } from './TraceEvents.js';
2
3
  export type TraceFile = {
3
4
  traceEvents: readonly TraceEventData[];
4
5
  metadata: MetaData;
5
6
  };
7
+ export interface Breadcrumb {
8
+ window: TraceWindowMicroSeconds;
9
+ child: Breadcrumb | null;
10
+ }
6
11
  export declare const enum DataOrigin {
7
12
  CPUProfile = "CPUProfile",
8
13
  TraceEvents = "TraceEvents"
9
14
  }
10
15
  export interface Annotations {
11
- hiddenRendererEventsHashes: string[];
12
- hiddenProfileCallsSampleIndexes: number[];
13
- hiddenProfileCallsDepths: number[];
16
+ entriesFilterAnnotations: {
17
+ hiddenEntriesIndexes: number[];
18
+ modifiedEntriesIndexes: number[];
19
+ };
20
+ initialBreadcrumb: Breadcrumb;
14
21
  }
15
22
  /**
16
23
  * Trace metadata that we persist to the file. This will allow us to
@@ -1 +1 @@
1
- {"version":3,"file":"File.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/types/File.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B","sourcesContent":["// Copyright 2023 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport {type TraceEventData} from './TraceEvents.js';\nexport type TraceFile = {\n traceEvents: readonly TraceEventData[],\n metadata: MetaData,\n};\n\nexport const enum DataOrigin {\n CPUProfile = 'CPUProfile',\n TraceEvents = 'TraceEvents',\n}\nexport interface Annotations {\n hiddenRendererEventsHashes: string[];\n hiddenProfileCallsSampleIndexes: number[];\n hiddenProfileCallsDepths: number[];\n}\n\n/**\n * Trace metadata that we persist to the file. This will allow us to\n * store specifics for the trace, e.g., which tracks should be visible\n * on load.\n */\nexport interface MetaData {\n source?: 'DevTools';\n startTime?: string;\n networkThrottling?: string;\n cpuThrottling?: number;\n hardwareConcurrency?: number;\n dataOrigin?: DataOrigin;\n annotations?: Annotations;\n}\n\nexport type Contents = TraceFile|TraceEventData[];\n"]}
1
+ {"version":3,"file":"File.js","sourceRoot":"","sources":["../../../../../../../front_end/models/trace/types/File.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B","sourcesContent":["// Copyright 2023 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport {type TraceWindowMicroSeconds} from './Timing.js';\nimport {type TraceEventData} from './TraceEvents.js';\n\nexport type TraceFile = {\n traceEvents: readonly TraceEventData[],\n metadata: MetaData,\n};\n\nexport interface Breadcrumb {\n window: TraceWindowMicroSeconds;\n child: Breadcrumb|null;\n}\n\nexport const enum DataOrigin {\n CPUProfile = 'CPUProfile',\n TraceEvents = 'TraceEvents',\n}\nexport interface Annotations {\n entriesFilterAnnotations: {\n hiddenEntriesIndexes: number[],\n modifiedEntriesIndexes: number[],\n };\n initialBreadcrumb: Breadcrumb;\n}\n\n/**\n * Trace metadata that we persist to the file. This will allow us to\n * store specifics for the trace, e.g., which tracks should be visible\n * on load.\n */\nexport interface MetaData {\n source?: 'DevTools';\n startTime?: string;\n networkThrottling?: string;\n cpuThrottling?: number;\n hardwareConcurrency?: number;\n dataOrigin?: DataOrigin;\n annotations?: Annotations;\n}\n\nexport type Contents = TraceFile|TraceEventData[];\n"]}
@@ -427,6 +427,12 @@ export interface TraceEventFirstPaint extends TraceEventMark {
427
427
  };
428
428
  }
429
429
  export type PageLoadEvent = TraceEventFirstContentfulPaint | TraceEventMarkDOMContent | TraceEventInteractiveTime | TraceEventLargestContentfulPaintCandidate | TraceEventLayoutShift | TraceEventFirstPaint | TraceEventMarkLoad | TraceEventNavigationStart;
430
+ export declare const MarkerName: readonly ["MarkDOMContent", "MarkLoad", "firstPaint", "firstContentfulPaint", "largestContentfulPaint::Candidate"];
431
+ interface MakerEvent extends TraceEventData {
432
+ name: typeof MarkerName[number];
433
+ }
434
+ export declare function isTraceEventMarkerEvent(event: TraceEventData): event is MakerEvent;
435
+ export declare function eventIsPageLoadEvent(event: TraceEventData): event is PageLoadEvent;
430
436
  export interface TraceEventLargestContentfulPaintCandidate extends TraceEventMark {
431
437
  name: 'largestContentfulPaint::Candidate';
432
438
  args: TraceEventArgs & {
@@ -837,7 +843,12 @@ export interface TraceEventPerformanceMeasureBegin extends TraceEventPairableUse
837
843
  export type TraceEventPerformanceMeasureEnd = TraceEventPairableUserTiming & TraceEventPairableAsyncEnd;
838
844
  export type TraceEventPerformanceMeasure = TraceEventPerformanceMeasureBegin | TraceEventPerformanceMeasureEnd;
839
845
  export interface TraceEventPerformanceMark extends TraceEventUserTiming {
840
- ph: Phase.INSTANT | Phase.MARK;
846
+ args: TraceEventArgs & {
847
+ data?: TraceEventArgsData & {
848
+ detail?: string;
849
+ };
850
+ };
851
+ ph: Phase.INSTANT | Phase.MARK | Phase.ASYNC_NESTABLE_INSTANT;
841
852
  }
842
853
  export interface TraceEventConsoleTimeBegin extends TraceEventPairableAsyncBegin {
843
854
  cat: 'blink.console';
@@ -858,17 +869,6 @@ export interface TraceEventTimeStamp extends TraceEventData {
858
869
  };
859
870
  };
860
871
  }
861
- export interface TraceEventExtensionMeasureBegin extends TraceEventPerformanceMeasureBegin {
862
- name: `devtools-entry-${string}`;
863
- }
864
- export interface TraceEventExtensionMeasureEnd extends TraceEventPerformanceMeasureEnd {
865
- name: `devtools-entry-${string}`;
866
- }
867
- export interface TraceEventExtensionMark extends TraceEventPerformanceMark {
868
- name: `devtools-entry-${string}`;
869
- ph: Phase.INSTANT | Phase.MARK;
870
- }
871
- export type TraceEventExtensionMeasure = TraceEventExtensionMeasureBegin | TraceEventExtensionMeasureEnd;
872
872
  /** ChromeFrameReporter args for PipelineReporter event.
873
873
  Matching proto: https://source.chromium.org/chromium/chromium/src/+/main:third_party/perfetto/protos/perfetto/trace/track_event/chrome_frame_reporter.proto
874
874
  */
@@ -958,6 +958,7 @@ export interface TraceEventPipelineReporter extends TraceEventData {
958
958
  }
959
959
  export declare function isTraceEventPipelineReporter(event: TraceEventData): event is TraceEventPipelineReporter;
960
960
  export interface SyntheticEventPair<T extends TraceEventPairableAsync = TraceEventPairableAsync> extends TraceEventData {
961
+ name: T['name'];
961
962
  cat: T['cat'];
962
963
  id?: string;
963
964
  id2?: {
@@ -1117,9 +1118,27 @@ export interface SyntheticInvalidation extends TraceEventInstant {
1117
1118
  stackTrace?: TraceEventCallFrame[];
1118
1119
  }
1119
1120
  export declare function isSyntheticInvalidation(event: TraceEventData): event is SyntheticInvalidation;
1121
+ export interface SelectorTiming {
1122
+ 'elapsed (us)': number;
1123
+ 'fast_reject_count': number;
1124
+ 'match_attempts': number;
1125
+ 'selector': string;
1126
+ 'style_sheet_id': string;
1127
+ }
1128
+ export interface SelectorStats {
1129
+ selector_timings: SelectorTiming[];
1130
+ }
1131
+ export interface TraceEventStyleRecalcSelectorStats extends TraceEventComplete {
1132
+ name: KnownEventName.SelectorStats;
1133
+ args: TraceEventArgs & {
1134
+ selector_stats?: SelectorStats;
1135
+ };
1136
+ }
1137
+ export declare function isStyleRecalcSelectorStats(event: TraceEventData): event is TraceEventStyleRecalcSelectorStats;
1120
1138
  export interface TraceEventUpdateLayoutTree extends TraceEventComplete {
1121
1139
  name: KnownEventName.UpdateLayoutTree;
1122
1140
  args: TraceEventArgs & {
1141
+ selector_stats?: SelectorStats;
1123
1142
  elementCount: number;
1124
1143
  beginData?: {
1125
1144
  frame: string;
@@ -1516,7 +1535,6 @@ export declare const enum KnownEventName {
1516
1535
  V8Execute = "V8.Execute",
1517
1536
  GC = "GCEvent",
1518
1537
  DOMGC = "BlinkGC.AtomicPhase",
1519
- IncrementalGCMarking = "V8.GCIncrementalMarking",
1520
1538
  MajorGC = "MajorGC",
1521
1539
  MinorGC = "MinorGC",
1522
1540
  GCCollectGarbage = "BlinkGC.AtomicPhase",
@@ -1536,6 +1554,7 @@ export declare const enum KnownEventName {
1536
1554
  ScheduleStyleInvalidationTracking = "ScheduleStyleInvalidationTracking",
1537
1555
  StyleRecalcInvalidationTracking = "StyleRecalcInvalidationTracking",
1538
1556
  StyleInvalidatorInvalidationTracking = "StyleInvalidatorInvalidationTracking",
1557
+ SelectorStats = "SelectorStats",
1539
1558
  ScrollLayer = "ScrollLayer",
1540
1559
  UpdateLayer = "UpdateLayer",
1541
1560
  PaintSetup = "PaintSetup",
@@ -21,6 +21,25 @@ export function isTraceEventAuctionWorkletDoneWithProcess(event) {
21
21
  export function isTraceEventScreenshot(event) {
22
22
  return event.name === "Screenshot" /* KnownEventName.Screenshot */;
23
23
  }
24
+ const markerTypeGuards = [
25
+ isTraceEventMarkDOMContent,
26
+ isTraceEventMarkLoad,
27
+ isTraceEventFirstPaint,
28
+ isTraceEventFirstContentfulPaint,
29
+ isTraceEventLargestContentfulPaintCandidate,
30
+ isTraceEventNavigationStart,
31
+ ];
32
+ export const MarkerName = ['MarkDOMContent', 'MarkLoad', 'firstPaint', 'firstContentfulPaint', 'largestContentfulPaint::Candidate'];
33
+ export function isTraceEventMarkerEvent(event) {
34
+ return markerTypeGuards.some(fn => fn(event));
35
+ }
36
+ const pageLoadEventTypeGuards = [
37
+ ...markerTypeGuards,
38
+ isTraceEventInteractiveTime,
39
+ ];
40
+ export function eventIsPageLoadEvent(event) {
41
+ return pageLoadEventTypeGuards.some(fn => fn(event));
42
+ }
24
43
  export function isTraceEventTracingSessionIdForWorker(event) {
25
44
  return event.name === 'TracingSessionIdForWorker';
26
45
  }
@@ -85,6 +104,9 @@ export function isTraceEventActivateLayerTree(event) {
85
104
  export function isSyntheticInvalidation(event) {
86
105
  return event.name === 'SyntheticInvalidation';
87
106
  }
107
+ export function isStyleRecalcSelectorStats(event) {
108
+ return event.name === "SelectorStats" /* KnownEventName.SelectorStats */;
109
+ }
88
110
  export function isTraceEventUpdateLayoutTree(event) {
89
111
  return event.name === "UpdateLayoutTree" /* KnownEventName.UpdateLayoutTree */;
90
112
  }
@@ -300,16 +322,16 @@ export function isTraceEventTimeStamp(traceEventData) {
300
322
  export function isTraceEventParseHTML(traceEventData) {
301
323
  return traceEventData.name === 'ParseHTML';
302
324
  }
325
+ const asyncPhases = new Set([
326
+ "b" /* Phase.ASYNC_NESTABLE_START */,
327
+ "n" /* Phase.ASYNC_NESTABLE_INSTANT */,
328
+ "e" /* Phase.ASYNC_NESTABLE_END */,
329
+ "T" /* Phase.ASYNC_STEP_INTO */,
330
+ "S" /* Phase.ASYNC_BEGIN */,
331
+ "F" /* Phase.ASYNC_END */,
332
+ "p" /* Phase.ASYNC_STEP_PAST */,
333
+ ]);
303
334
  export function isTraceEventAsyncPhase(traceEventData) {
304
- const asyncPhases = new Set([
305
- "b" /* Phase.ASYNC_NESTABLE_START */,
306
- "n" /* Phase.ASYNC_NESTABLE_INSTANT */,
307
- "e" /* Phase.ASYNC_NESTABLE_END */,
308
- "T" /* Phase.ASYNC_STEP_INTO */,
309
- "S" /* Phase.ASYNC_BEGIN */,
310
- "F" /* Phase.ASYNC_END */,
311
- "p" /* Phase.ASYNC_STEP_PAST */,
312
- ]);
313
335
  return asyncPhases.has(traceEventData.ph);
314
336
  }
315
337
  export function isSyntheticLayoutShift(traceEventData) {