Files
Bubberstation/tools/read_init_times.py
Mothblocks 943c04bae5 Save 2.2s minimum (with zero ruins, likely a good bit more in production) of atom init time (#69564)
Pre-sort smoothing_groups and canSmoothWith
Without any ruins, these sorts were taking more than 0.6s, and the bulk of the runtime cost of sortTim during init time.

This only happens on init and they are never changed apart from that, so pre-sorts everything and adds a unit test (in the form of #ifdef UNIT_TESTS, because you can't initial a list) to ensure that they are proper.

Keep visibilityChanged() to mapload only for turf/Initialize
Saves about 0.4s worst case scenario (e.g. with no ruins). Very expensive code (175k loop iterations) for 0 side effects.

Space areas now have the fullbright overlay, not the space turfs
Saves about 0.8s worst case scenario. Seems to work fine with starlight.

Remove is_station_level check for window spawners assigning RCD memory.
Saves about 0.3s worst case scenario. The logic for this isn't consistent since neither walls nor floors check this (for performance), plus some minor micro-opts to spawners.

Optimize is_station_level
Doubles in speed, used heavily in /turf/open/floor and in other initialization procs. Bit hard to tell exactly how much is saved, though.
2022-09-01 10:26:06 +01:00

30 lines
1004 B
Python

# When passed an `init_times.json` file (received from enabling `PROFILE_MAPLOAD_INIT_ATOM`),
# and an optional max-depth level, this will output init times from worst to best.
import errno
import json
import sys
if len(sys.argv) < 2:
print("Usage: read_init_times.py <init_times.json> [max_depth]")
sys.exit(1)
max_depth = int(sys.argv[2]) if len(sys.argv) > 2 else 1000
with open(sys.argv[1], "r") as file:
init_times = json.load(file)
init_times_per_type = {}
for (type, time) in init_times.items():
type = '/'.join(type.split('/')[0:max_depth+1])
init_times_per_type[type] = init_times_per_type.get(type, 0) + time
for (type, time) in sorted(init_times_per_type.items(), key = lambda x: x[1], reverse = True):
try:
print(type, time)
except IOError as error:
# Prevents broken pipe error if you do something like `read_init_times.py init_times.json | head`
if error.errno == errno.EPIPE:
sys.stderr.close()
sys.exit(0)