typescript_tsbuildinfo/
trace_json.rs1use rustc_hash::FxHashMap;
4use serde::Deserialize;
5use std::ops::Deref;
6
7#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
8#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
9pub enum TraceEventType {
10 #[serde(rename = "B")]
11 DurationBegin,
12 #[serde(rename = "E")]
13 DurationEnd,
14 #[serde(rename = "X")]
15 Complete,
16 #[default]
17 #[serde(rename = "i", alias = "I")]
18 Instant,
19 #[serde(rename = "C")]
20 Counter,
21 #[serde(rename = "b")]
22 AsyncStart,
23 #[serde(rename = "n")]
24 AsyncInstant,
25 #[serde(rename = "e")]
26 AsyncEnd,
27 #[serde(rename = "s")]
28 FlowStart,
29 #[serde(rename = "t")]
30 FlowStep,
31 #[serde(rename = "f")]
32 FlowEnd,
33 #[serde(rename = "P")]
34 Sample,
35 #[serde(rename = "N")]
36 ObjectCreated,
37 #[serde(rename = "O")]
38 ObjectSnapshot,
39 #[serde(rename = "D")]
40 ObjectDestroyed,
41 #[serde(rename = "M")]
42 Metadata,
43 #[serde(rename = "V")]
44 MemoryDumpGlobal,
45 #[serde(rename = "v")]
46 MemoryDumpProcess,
47 #[serde(rename = "R")]
48 Mark,
49 #[serde(rename = "c")]
50 ClockSync,
51 #[serde(rename = "(")]
52 ContextBegin,
53 #[serde(rename = ")")]
54 ContextEnd,
55}
56
57#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
58#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
59#[serde(default, rename_all = "camelCase")]
60pub struct TraceEvent {
61 pub args: FxHashMap<String, serde_json::Value>,
62
63 pub cat: String,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub cname: Option<String>,
67
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub dur: Option<f64>, #[serde(skip_serializing_if = "Option::is_none")]
72 pub id: Option<String>,
73
74 pub name: String,
75
76 pub ph: TraceEventType,
77
78 pub pid: u64,
79
80 pub tid: u64,
81
82 pub ts: f64, #[serde(skip_serializing_if = "Option::is_none")]
85 pub tts: Option<f64>, }
87
88impl TraceEvent {
89 pub fn new(name: impl AsRef<String>, ph: TraceEventType) -> Self {
90 Self {
91 args: FxHashMap::default(),
92 cat: String::new(),
93 name: name.as_ref().to_owned(),
94 ph,
95 pid: std::process::id().into(),
96 tid: 0, ts: std::time::SystemTime::now().elapsed().unwrap().as_nanos() as f64 / 1000.0,
98 ..Default::default()
99 }
100 }
101}
102
103#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
104#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
105pub struct TraceJson(pub Vec<TraceEvent>);
106
107impl Deref for TraceJson {
108 type Target = Vec<TraceEvent>;
109
110 fn deref(&self) -> &Self::Target {
111 &self.0
112 }
113}