From ed26db4f172a8d7b39809db440ce9bc91bcf188e Mon Sep 17 00:00:00 2001 From: ESwordTheCat Date: Thu, 22 May 2014 01:37:02 -0800 Subject: [PATCH 1/5] Micro optimize GC. --- code/controllers/garbage.dm | 29 ++++++++++++++++------------- code/game/atoms.dm | 2 +- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/code/controllers/garbage.dm b/code/controllers/garbage.dm index 412a4bdef10..0f140795e59 100644 --- a/code/controllers/garbage.dm +++ b/code/controllers/garbage.dm @@ -34,6 +34,7 @@ var/global/list/uncollectable_vars=list( "y", "z", ) + /datum/controller/garbage_collector var/list/queue=list() var/list/destroyed=list() @@ -82,19 +83,21 @@ var/global/list/uncollectable_vars=list( destroyed.Add("\ref[A]") queue.Remove(A) - proc/process() - for(var/i=0;i= world.time - GC_COLLECTION_TIMEOUT) - // Something's still referring to the qdel'd object. Kill it. - del(A) - destroyed.Remove(refID) +/datum/controller/garbage_collector/proc/process() + for (var/i = 0, ++i <= min(waiting, GC_COLLECTIONS_PER_TICK)) + if (waiting--) + Pop() + + for (var/i = 0, ++i <= min(destroyed.len, GC_COLLECTIONS_PER_TICK)) + if (destroyed.len) + var/refID = destroyed[1] + var/atom/A = locate(refID) + + if(A && A.gc_destroyed && A.gc_destroyed >= world.timeofday - GC_COLLECTION_TIMEOUT) + // Something's still referring to the qdel'd object. Kill it. + del A + + destroyed.Remove(refID) /** * NEVER USE THIS FOR ANYTHING OTHER THAN /atom/movable diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e6720a31796..c6e2eaf381f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -84,7 +84,7 @@ // Like Del(), but for qdel. // Called BEFORE qdel moves shit. /atom/proc/Destroy() - gc_destroyed=world.time + gc_destroyed = world.timeofday /atom/proc/assume_air(datum/gas_mixture/giver) return null From 77498c207dc55221cb158e5ab81e1470561f75e0 Mon Sep 17 00:00:00 2001 From: ESwordTheCat Date: Thu, 22 May 2014 06:33:44 -0800 Subject: [PATCH 2/5] Qdel the generator. --- code/modules/power/singularity/generator.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 581d1b1dcf9..f3eed9b3f70 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -28,6 +28,7 @@ log_admin("New singularity made, all touchers. [prints]. Last touched by [fingerprintslast].") new /obj/machinery/singularity/(get_turf(src), 50) + qdel(src) /obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/weapon/wrench)) From c0c13bf144f89217aa52d62d8a8c42d477e7ad39 Mon Sep 17 00:00:00 2001 From: ESwordTheCat Date: Thu, 22 May 2014 06:34:18 -0800 Subject: [PATCH 3/5] Add new var (inMachineList) to see if the machine is in the list. --- code/controllers/master_controller.dm | 1 + code/game/machinery/machinery.dm | 2 ++ 2 files changed, 3 insertions(+) diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 26c67f062d8..9801447af4e 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -311,6 +311,7 @@ datum/controller/game_controller/proc/processMobs() #endif if(PROCESS_KILL == Machinery.process()) + Machinery.inMachineList = 0 Machinery.removeAtProcessing() continue diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 416e2198824..2cd78ce5297 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -114,6 +114,8 @@ Class Procs: var/panel_open = 0 var/area/myArea + var/inMachineList = 1 + /obj/machinery/New() addAtProcessing() return ..() From 159a20ce3e602e7c6e26402528f713767672621a Mon Sep 17 00:00:00 2001 From: ESwordTheCat Date: Thu, 22 May 2014 06:37:34 -0800 Subject: [PATCH 4/5] Add comment about new var. --- code/game/machinery/machinery.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 2cd78ce5297..eac1a662f61 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -114,7 +114,7 @@ Class Procs: var/panel_open = 0 var/area/myArea - var/inMachineList = 1 + var/inMachineList = 1 // For debugging. /obj/machinery/New() addAtProcessing() From 9abc742bc95ef4c9864617ef980e6837e406fb77 Mon Sep 17 00:00:00 2001 From: ESwordTheCat Date: Thu, 22 May 2014 06:39:34 -0800 Subject: [PATCH 5/5] This is more faster than using division and not operator. --- code/controllers/garbage.dm | 2 +- code/datums/sun.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/garbage.dm b/code/controllers/garbage.dm index 0f140795e59..c22cd9577c6 100644 --- a/code/controllers/garbage.dm +++ b/code/controllers/garbage.dm @@ -93,7 +93,7 @@ var/global/list/uncollectable_vars=list( var/refID = destroyed[1] var/atom/A = locate(refID) - if(A && A.gc_destroyed && A.gc_destroyed >= world.timeofday - GC_COLLECTION_TIMEOUT) + if (A && A.gc_destroyed && A.gc_destroyed >= world.timeofday - GC_COLLECTION_TIMEOUT) // Something's still referring to the qdel'd object. Kill it. del A diff --git a/code/datums/sun.dm b/code/datums/sun.dm index 687ae838788..caa2e5e5a5b 100644 --- a/code/datums/sun.dm +++ b/code/datums/sun.dm @@ -41,7 +41,7 @@ lastAngle = angle - if (!round(time / nextTime)) + if (world.time < nextTime) return nextTime += updatePer