| 183 | } |
| 184 | |
| 185 | uint32_t PerfCounters::registerTick(uint32_t baseline_ms) { |
| 186 | if (!World::isFortressMode() || World::ReadPauseState()) { |
| 187 | last_tick_baseline_ms = 0; |
| 188 | return 0; |
| 189 | } |
| 190 | |
| 191 | // only update when the tick counter has advanced |
| 192 | if (!world || last_frame_counter == world->frame_counter) |
| 193 | return 0; |
| 194 | last_frame_counter = world->frame_counter; |
| 195 | |
| 196 | if (last_tick_baseline_ms == 0) { |
| 197 | last_tick_baseline_ms = baseline_ms; |
| 198 | return 0; |
| 199 | } |
| 200 | |
| 201 | uint32_t elapsed_ms = baseline_ms - last_tick_baseline_ms; |
| 202 | last_tick_baseline_ms = baseline_ms; |
| 203 | |
| 204 | recent_ticks.head_idx = (recent_ticks.head_idx + 1) % RECENT_TICKS_HISTORY_SIZE; |
| 205 | |
| 206 | if (recent_ticks.full) |
| 207 | recent_ticks.sum_ms -= recent_ticks.history[recent_ticks.head_idx]; |
| 208 | else if (recent_ticks.head_idx == 0) |
| 209 | recent_ticks.full = true; |
| 210 | |
| 211 | recent_ticks.history[recent_ticks.head_idx] = elapsed_ms; |
| 212 | recent_ticks.sum_ms += elapsed_ms; |
| 213 | |
| 214 | return elapsed_ms; |
| 215 | } |
| 216 | |
| 217 | uint32_t PerfCounters::getUnpausedFps() { |
| 218 | uint32_t seconds = recent_ticks.sum_ms / 1000; |