(
&self,
raw_samples: Vec<RawPerformanceSample>,
selected_pid: Option<i32>,
display_signal: DisplaySignal,
history_window_ms: u64,
)
| 252 | } |
| 253 | |
| 254 | fn merge_samples( |
| 255 | &self, |
| 256 | raw_samples: Vec<RawPerformanceSample>, |
| 257 | selected_pid: Option<i32>, |
| 258 | display_signal: DisplaySignal, |
| 259 | history_window_ms: u64, |
| 260 | ) -> (Option<PerformanceSample>, Vec<PerformanceSample>) { |
| 261 | let mut inner = self |
| 262 | .inner |
| 263 | .lock() |
| 264 | .unwrap_or_else(|poisoned| poisoned.into_inner()); |
| 265 | let mut current = None; |
| 266 | let now = Instant::now(); |
| 267 | let now_ms = now_ms(); |
| 268 | |
| 269 | for raw in raw_samples { |
| 270 | let pid = raw.process.pid; |
| 271 | let counter = RawCounterSnapshot { |
| 272 | sampled_at: now, |
| 273 | timestamp_ms: now_ms, |
| 274 | cpu_time_ns: raw |
| 275 | .rusage |
| 276 | .map(|rusage| rusage.user_time_ns.saturating_add(rusage.system_time_ns)), |
| 277 | disk_read_bytes: raw.rusage.map(|rusage| rusage.disk_read_bytes), |
| 278 | disk_write_bytes: raw.rusage.map(|rusage| rusage.disk_write_bytes), |
| 279 | network_received_bytes: raw |
| 280 | .network |
| 281 | .as_ref() |
| 282 | .and_then(|network| network.received_bytes), |
| 283 | network_sent_bytes: raw.network.as_ref().and_then(|network| network.sent_bytes), |
| 284 | }; |
| 285 | let previous = inner.last_raw.insert(pid, counter.clone()); |
| 286 | let cpu_percent = cpu_percent(&raw, previous.as_ref(), &counter); |
| 287 | let disk_read_bytes_per_second = rate_per_second( |
| 288 | previous |
| 289 | .as_ref() |
| 290 | .and_then(|previous| previous.disk_read_bytes), |
| 291 | counter.disk_read_bytes, |
| 292 | previous.as_ref(), |
| 293 | &counter, |
| 294 | ); |
| 295 | let disk_write_bytes_per_second = rate_per_second( |
| 296 | previous |
| 297 | .as_ref() |
| 298 | .and_then(|previous| previous.disk_write_bytes), |
| 299 | counter.disk_write_bytes, |
| 300 | previous.as_ref(), |
| 301 | &counter, |
| 302 | ); |
| 303 | let network_received_bytes_per_second = rate_per_second( |
| 304 | previous |
| 305 | .as_ref() |
| 306 | .and_then(|previous| previous.network_received_bytes), |
| 307 | counter.network_received_bytes, |
| 308 | previous.as_ref(), |
| 309 | &counter, |
| 310 | ); |
| 311 | let network_sent_bytes_per_second = rate_per_second( |
no test coverage detected