(&mut self, event_loop: &ActiveEventLoop)
| 127 | } |
| 128 | |
| 129 | fn percentile_us(values: &[Duration], percentile: f64) -> f64 { |
| 130 | if values.is_empty() { |
| 131 | return 0.0; |
| 132 | } |
| 133 | let mut nanos: Vec<u128> = values.iter().map(Duration::as_nanos).collect(); |
| 134 | nanos.sort_unstable(); |
| 135 | let index = ((nanos.len() - 1) as f64 * percentile).ceil() as usize; |
| 136 | nanos[index] as f64 / 1_000.0 |
| 137 | } |
| 138 | |
| 139 | fn percentile_u32(values: &[u32], percentile: f64) -> u32 { |
| 140 | if values.is_empty() { |
| 141 | return 0; |
| 142 | } |
| 143 | let mut sorted = values.to_vec(); |
| 144 | sorted.sort_unstable(); |
| 145 | let index = ((sorted.len() - 1) as f64 * percentile).ceil() as usize; |
| 146 | sorted[index] |
| 147 | } |
| 148 | |
| 149 | fn print(&self, name: &str) { |
| 150 | let frames = self.frames.max(1); |
| 151 | println!( |
| 152 | "{name:32} total={:>6}us wait={:>6}us gpuq={:>6}us water={:>5}us shadow={:>5}us cpu_prep={:>5}us gpu2d={:>5}us gpu3d={:>5}us acquire={:>5}us encode={:>5}us submit={:>5}us post={:>5}us present={:>5}us dc2d={:>3} dc3d={:>3} inst3d={:>7} skip3d={:>3}/{:<3} scene_pass={:>3} shadow_layers={:>3} shadow_dc={:>4} gpuq_med={:>8.1}us gpuq_p95={:>8.1}us acq_med={:>7.1}us sub_med={:>7.1}us prs_med={:>7.1}us cpu_med={:>7.1}us cpu_p95={:>7.1}us enc_med={:>7.1}us enc_p95={:>7.1}us pipe_med={:>3} pipe_p95={:>3}", |
| 153 | Self::avg_us(self.total, frames), |
| 154 | Self::avg_us(self.wait_idle, frames), |
| 155 | Self::avg_us(self.gpu_main, frames), |
| 156 | Self::avg_us(self.gpu_water, frames), |
| 157 | Self::avg_us(self.gpu_shadow, frames), |
| 158 | Self::avg_us(self.prepare_cpu, frames), |
| 159 | Self::avg_us(self.gpu_prepare_2d, frames), |
| 160 | Self::avg_us(self.gpu_prepare_3d, frames), |
| 161 | Self::avg_us(self.acquire, frames), |
| 162 | Self::avg_us(self.encode, frames), |
| 163 | Self::avg_us(self.submit, frames), |
| 164 | Self::avg_us(self.post, frames), |
| 165 | Self::avg_us(self.present, frames), |
| 166 | self.draw_calls_2d / frames, |
| 167 | self.draw_calls_3d / frames, |
nothing calls this directly
no test coverage detected