Micro-optimize icon smoothing subsystem, cutting down more than 50% of its init time (about .8s drop on local, more on prod) (#69741)

With atoms now being 50% of the init time instead of ~80%, I've decided to poke around other subsystems.

Unfortunately they're not straight forward at all and extremely boring. bitmask_smooth() in particular is just a big proc that is called ~60k times, so I made some adjustments to its macro to reduce ops.

I removed code that looped over two entire Z-levels to find things to smooth, added by e2dd404, at a time before the initialize system. This doesn't have huge gains since it just defers to the queue anyway, but it still shaved off 0.1-0.2s on local.

I removed update_appearance(~UPDATE_SMOOTHING) from something since the person who added it doesn't remember why and it doesn't appear to do anything. Lemon thinks it's something to do with emissives, but I tested with neon carpet and it seemed to work fine.
This commit is contained in:
Mothblocks
2022-12-06 08:55:12 +13:00
committed by GitHub
parent 292019cf08
commit 6dff45d977
2 changed files with 87 additions and 82 deletions
+1 -4
View File
@@ -32,16 +32,13 @@ SUBSYSTEM_DEF(icon_smooth)
can_fire = FALSE
/datum/controller/subsystem/icon_smooth/Initialize()
smooth_zlevel(1, TRUE)
smooth_zlevel(2, TRUE)
var/list/queue = smooth_queue
smooth_queue = list()
while(length(queue))
var/atom/smoothing_atom = queue[length(queue)]
queue.len--
if(QDELETED(smoothing_atom) || !(smoothing_atom.smoothing_flags & SMOOTH_QUEUED) || smoothing_atom.z <= 2)
if(QDELETED(smoothing_atom) || !(smoothing_atom.smoothing_flags & SMOOTH_QUEUED) || !smoothing_atom.z)
continue
smoothing_atom.smooth_icon()
CHECK_TICK