Port listing timer sources (#21949)

Ports tgstation/tgstation#52417
This commit is contained in:
Wildkins
2026-03-04 14:51:25 -05:00
committed by GitHub
parent a5e3aa99a4
commit e9a722fccf
3 changed files with 75 additions and 1 deletions
+60
View File
@@ -515,3 +515,63 @@
to_chat(src, SPAN_INFO("You can now right click to use inspect on browsers."))
winset(src, null, list("browser-options" = "+devtools"))
winset(src, null, list("browser-options" = "+find"))
/// A debug verb to check the sources of currently running timers
/client/proc/check_timer_sources()
set category = "Debug"
set name = "Check Timer Sources"
set desc = "Checks the sources of the running timers"
if (!check_rights(R_DEBUG))
return
var/bucket_list_output = generate_timer_source_output(SStimer.bucket_list)
var/second_queue = generate_timer_source_output(SStimer.second_queue)
var/html_body = {"
<h3>bucket_list</h3>
[bucket_list_output]
<h3>second_queue</h3>
[second_queue]
"}
usr << browse(HTML_SKELETON(html_body), "window=check_timer_sources;size=700x700")
/proc/generate_timer_source_output(list/datum/timedevent/events)
var/list/per_source = list()
// Collate all events and figure out what sources are creating the most
for (var/_event in events)
if (!_event)
continue
var/datum/timedevent/event = _event
do
if (event.source)
if (per_source[event.source] == null)
per_source[event.source] = 1
else
per_source[event.source] += 1
event = event.next
while (event && event != _event)
// Now, sort them in order
var/list/sorted = list()
for (var/source in per_source)
sorted += list(list("source" = source, "count" = per_source[source]))
sorted = sortTim(sorted, .proc/cmp_timer_data)
// Now that everything is sorted, compile them into an HTML output
var/output = "<table border='1'>"
for (var/_timer_data in sorted)
var/list/timer_data = _timer_data
output += {"<tr>
<td><b>[timer_data["source"]]</b></td>
<td>[timer_data["count"]]</td>
</tr>"}
output += "</table>"
return output
/proc/cmp_timer_data(list/a, list/b)
return b["count"] - a["count"]