(
&self,
udid: &str,
query: PerformanceQuery,
foreground: Option<ForegroundProcess>,
display_signal: DisplaySignal,
)
| 196 | } |
| 197 | |
| 198 | pub async fn snapshot( |
| 199 | &self, |
| 200 | udid: &str, |
| 201 | query: PerformanceQuery, |
| 202 | foreground: Option<ForegroundProcess>, |
| 203 | display_signal: DisplaySignal, |
| 204 | ) -> Result<SimulatorPerformanceSnapshot, AppError> { |
| 205 | let sampled_at = now_ms(); |
| 206 | let mut warnings = Vec::new(); |
| 207 | let ps = list_ps_processes().await?; |
| 208 | let mut processes = app_processes_from_ps(udid, foreground.as_ref(), ps); |
| 209 | if let Some(foreground) = foreground.as_ref() { |
| 210 | ensure_foreground_process(&mut processes, foreground).await; |
| 211 | } |
| 212 | processes.sort_by_key(|process| (!process.is_foreground, process.process.clone())); |
| 213 | |
| 214 | let selected_pid = query |
| 215 | .pid |
| 216 | .or_else(|| { |
| 217 | foreground |
| 218 | .as_ref() |
| 219 | .map(|process| process.process_identifier as i32) |
| 220 | }) |
| 221 | .or_else(|| processes.first().map(|process| process.pid)); |
| 222 | |
| 223 | if processes.is_empty() { |
| 224 | warnings.push("No simulator app process matched this UDID yet.".to_owned()); |
| 225 | } |
| 226 | |
| 227 | let mut raw_samples = Vec::new(); |
| 228 | for process in &processes { |
| 229 | raw_samples |
| 230 | .push(sample_process(process.clone(), selected_pid == Some(process.pid)).await); |
| 231 | } |
| 232 | |
| 233 | let selected_pid = |
| 234 | selected_pid.filter(|pid| raw_samples.iter().any(|sample| sample.process.pid == *pid)); |
| 235 | let (current, history) = self.merge_samples( |
| 236 | raw_samples, |
| 237 | selected_pid, |
| 238 | display_signal, |
| 239 | query.history_window_ms, |
| 240 | ); |
| 241 | |
| 242 | Ok(SimulatorPerformanceSnapshot { |
| 243 | udid: udid.to_owned(), |
| 244 | sampled_at, |
| 245 | selected_pid, |
| 246 | foreground_process: foreground, |
| 247 | processes, |
| 248 | current, |
| 249 | history, |
| 250 | warnings, |
| 251 | }) |
| 252 | } |
| 253 | |
| 254 | fn merge_samples( |
| 255 | &self, |
nothing calls this directly
no test coverage detected