Skip to main content

browser_protocol/memory/
mod.rs

1use serde::{Serialize, Deserialize};
2
3/// Memory pressure level.
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
6pub enum PressureLevel {
7    #[default]
8    Moderate,
9    Critical,
10}
11
12/// Heap profile sample.
13
14#[derive(Debug, Clone, Serialize, Deserialize, Default)]
15#[serde(rename_all = "camelCase")]
16pub struct SamplingProfileNode {
17    /// Size of the sampled allocation.
18
19    pub size: f64,
20    /// Total bytes attributed to this sample.
21
22    pub total: f64,
23    /// Execution stack at the point of allocation.
24
25    pub stack: Vec<String>,
26}
27
28/// Array of heap profile samples.
29
30#[derive(Debug, Clone, Serialize, Deserialize, Default)]
31#[serde(rename_all = "camelCase")]
32pub struct SamplingProfile {
33
34    pub samples: Vec<SamplingProfileNode>,
35
36    pub modules: Vec<Module>,
37}
38
39/// Executable module information
40
41#[derive(Debug, Clone, Serialize, Deserialize, Default)]
42#[serde(rename_all = "camelCase")]
43pub struct Module {
44    /// Name of the module.
45
46    pub name: String,
47    /// UUID of the module.
48
49    pub uuid: String,
50    /// Base address where the module is loaded into memory. Encoded as a decimal
51    /// or hexadecimal (0x prefixed) string.
52
53    pub baseAddress: String,
54    /// Size of the module in bytes.
55
56    pub size: f64,
57}
58
59/// DOM object counter data.
60
61#[derive(Debug, Clone, Serialize, Deserialize, Default)]
62#[serde(rename_all = "camelCase")]
63pub struct DOMCounter {
64    /// Object name. Note: object names should be presumed volatile and clients should not expect
65    /// the returned names to be consistent across runs.
66
67    pub name: String,
68    /// Object count.
69
70    pub count: u64,
71}
72
73/// Retruns current DOM object counters.
74
75#[derive(Debug, Clone, Serialize, Deserialize, Default)]
76#[serde(rename_all = "camelCase")]
77pub struct GetDOMCountersReturns {
78
79    pub documents: i64,
80
81    pub nodes: i64,
82
83    pub jsEventListeners: i64,
84}
85
86/// Retruns DOM object counters after preparing renderer for leak detection.
87
88#[derive(Debug, Clone, Serialize, Deserialize, Default)]
89#[serde(rename_all = "camelCase")]
90pub struct GetDOMCountersForLeakDetectionReturns {
91    /// DOM object counters.
92
93    pub counters: Vec<DOMCounter>,
94}
95
96/// Enable/disable suppressing memory pressure notifications in all processes.
97
98#[derive(Debug, Clone, Serialize, Deserialize, Default)]
99#[serde(rename_all = "camelCase")]
100pub struct SetPressureNotificationsSuppressedParams {
101    /// If true, memory pressure notifications will be suppressed.
102
103    pub suppressed: bool,
104}
105
106/// Simulate a memory pressure notification in all processes.
107
108#[derive(Debug, Clone, Serialize, Deserialize, Default)]
109#[serde(rename_all = "camelCase")]
110pub struct SimulatePressureNotificationParams {
111    /// Memory pressure level of the notification.
112
113    pub level: PressureLevel,
114}
115
116/// Start collecting native memory profile.
117
118#[derive(Debug, Clone, Serialize, Deserialize, Default)]
119#[serde(rename_all = "camelCase")]
120pub struct StartSamplingParams {
121    /// Average number of bytes between samples.
122
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub samplingInterval: Option<i64>,
125    /// Do not randomize intervals between samples.
126
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub suppressRandomness: Option<bool>,
129}
130
131/// Retrieve native memory allocations profile
132/// collected since renderer process startup.
133
134#[derive(Debug, Clone, Serialize, Deserialize, Default)]
135#[serde(rename_all = "camelCase")]
136pub struct GetAllTimeSamplingProfileReturns {
137
138    pub profile: SamplingProfile,
139}
140
141/// Retrieve native memory allocations profile
142/// collected since browser process startup.
143
144#[derive(Debug, Clone, Serialize, Deserialize, Default)]
145#[serde(rename_all = "camelCase")]
146pub struct GetBrowserSamplingProfileReturns {
147
148    pub profile: SamplingProfile,
149}
150
151/// Retrieve native memory allocations profile collected since last
152/// 'startSampling' call.
153
154#[derive(Debug, Clone, Serialize, Deserialize, Default)]
155#[serde(rename_all = "camelCase")]
156pub struct GetSamplingProfileReturns {
157
158    pub profile: SamplingProfile,
159}