Commit Graph

16 Commits

Author SHA1 Message Date
Watermelon914 79b00baad2 Refactors subsystems to use dependency-ordering to determine init order. Subsystems can now declare their own dependencies. (#90268)
## About The Pull Request
As the title says.
`init_order` is no more, subsystems ordering now depends on their
declared dependencies.
Subsystems can now declare which other subsystems need to init before
them using a list and the subsystem's typepath
I.e.
```dm
dependencies = list(
    /datum/controller/subsystem/atoms,
    /datum/controller/subsystem/mapping
)
```
The reverse can also be done, if a subsystem must initialize after your
own:
```dm
dependents = list(
    /datum/controller/subsystem/atoms
)
```
Cyclical dependencies are not allowed and will throw an error on
initialization if one is found.
There's also a debug tool to visualize the dependency graph, although
it's a bit basic:

![image](https://github.com/user-attachments/assets/80c854d9-c2a5-4f2f-92db-a031e9a8e257)

Subsystem load ordering can still be controlled using `init_stage`, some
subsystems use this in cases where they must initialize first or last
regardless of dependencies. An error will be thrown if a subsystem has
an `init_stage` before one of their dependencies.

## Why It's Good For The Game
Makes dealing with subsystem dependencies easier, and reduces the chance
of making a dependency error when needing to shift around subsystem
inits.

## Changelog
🆑
refactor: Refactored subsystem initialization
/🆑
2025-04-29 17:11:39 -06:00
SkyratBot 0d8608c32e [MIRROR] Adds a config to change the interval profiler information gets saved (#28171)
* Adds a config to change the interval profiler information gets saved (#83849)

## About The Pull Request
As title says

## Why It's Good For The Game
Important for server operation

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>

* Adds a config to change the interval profiler information gets saved

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
2024-06-14 20:21:17 +01:00
SkyratBot f3d9c4433f [MIRROR] Saves profiler snapshots every 5 minutes (#27875)
* Saves profiler snapshots every 5 minutes (#83467)

## About The Pull Request
As the title says. Each saved snapshot will be named
- `profiler-[TIME IN SECONDS].json`
- `sendmaps-[TIME IN SECONDS].json`

For example, `profiler-0.json`, `profiler-300.json`, `profiler-600.json`
would correspond to a profile at the start of the round, a profile 300
seconds into a round and a profile 600 seconds into a round.

The timings depend on world.time, so it's probably not a good idea to
rely on these timings to stay consistent.

## Why It's Good For The Game
Allows us to track performance of procs over time. Could allow us to
spot any sort of anomalies or performance sinks.

CC: @ MrStonedOne @ bobbah @ LemonInTheDark

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>

* Saves profiler snapshots every 5 minutes

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
2024-05-28 05:12:52 +02:00
SkyratBot 78e2efff88 [MIRROR] Emergency Profile Dumps [MDB IGNORE] (#22006)
* Emergency Profile Dumps (#75924)

## About The Pull Request

Adds some hooks to the MC that detect if something ate a ton of real
time last tick, and reacts by dumping our current profile into a file

It's really frustrating to see a spike in td in our performance logs,
but see no reason in the profile because it's only taken every 5
minutes. This resolves that

I'm throwing this up so mso can give it a look over, not sure if I want
to use defines or configs here, taking suggestions

🆑
server: Adds a system to emergency dump profiles if too much time passes
between ticks
config: Added configs that control how often emergency profiles are
allowed to dump, alongside the threshold for what counts as too much
time between ticks
/🆑

* Emergency Profile Dumps

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
Co-authored-by: Bloop <vinylspiders@gmail.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-09-02 12:55:00 -04:00
SkyratBot abf148d62b [MIRROR] World Initialization Refactor [MDB IGNORE] (#20755)
* World Initialization Refactor

* Update .github/CODEOWNERS

* Update code/__HELPERS/global_lists.dm

* Add logging for manually changing your targeted zone (#72814)

See title.
Surgery hud is exempt from this.

Requested by @Mothblocks

Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>

* eee

* Update tgstation.dme

---------

Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: Jordan Dominion <Cyberboss@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2023-04-26 22:46:55 +01:00
Gandalf e4b4d4d3c0 MISSED MIRROR [Lints Against Unmanaged Local Defines] (#20204)
* https://github.com/tgstation/tgstation/pull/74333

https: //github.com/tgstation/tgstation/pull/74333
Co-Authored-By: tattle <66640614+dragomagol@users.noreply.github.com>

* var stuff

Co-Authored-By: tattle <66640614+dragomagol@users.noreply.github.com>

* vars

* Update sol_fed.dm

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2023-04-01 01:15:22 +01:00
SkyratBot a00cad0164 [MIRROR] Clean up subsystem Initialize(), require an explicit result returned, give a formal way to fail (for SSlua) [MDB IGNORE] (#16248)
* Clean up subsystem Initialize(), require an explicit result returned, give a formal way to fail (for SSlua)

* [PR for MIRROR PR] Changes for 16248 (#16277)

* Merge skyrat changes, update SR SS's, and remove lobby_eye

* Apply suggestions from code review

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* Update modular_skyrat/modules/autotransfer/code/autotransfer.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* restore lobby_cam for now

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

Co-authored-by: Tastyfish <crazychris32@gmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2022-09-24 17:32:40 -04:00
Gandalf 84fcf3b429 Byond minimum version is now 514.1557 (#6626)
* 514.1557

* a
2021-07-01 00:06:33 +01:00
SkyratBot cd7e358f52 Deep sendmaps profiling (#6237)
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
2021-06-11 00:02:39 +01:00
SkyratBot 17e74d67d1 [MIRROR] Remove SS_NO_TICK_CHECK (#4483)
* Remove SS_NO_TICK_CHECK (#57800)

## About The Pull Request
This is a whopper, will need @ MrStonedOne to review.
In theory this flag shouldn't be needed and my own testing didn't find any issues, but I'd feel better with a lengthy test merge.

## Why It's Good For The Game
Might make nightshift subsystem lag less, MC loop has less stuff to check.

* Remove SS_NO_TICK_CHECK

Co-authored-by: spookydonut <github@spooksoftware.com>
2021-03-28 17:25:24 +01:00
SkyratBot c4c9dfabf6 [MIRROR] Fix various issues with browser statpanel (#580)
* Fix various issues with browser statpanel

* a

Co-authored-by: Tad Hardesty <tad@platymuus.com>
Co-authored-by: Azarak <azarak10@gmail.com>
2020-09-02 02:42:40 +02:00
SkyratBot e28b80eca2 [MIRROR] The profiler now starts earlier into the init process. + Documents the initialization order and pipeline (#319)
* The profiler now starts earlier into the init process. + Documents the initialization order and pipeline (#52662)

* The profiler now starts earlier into the init process.
Also documents the init pipeline and order in world/New()'s codedoc.

* better early profiler

* NEWMAN!

* The profiler now starts earlier into the init process. + Documents the initialization order and pipeline

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2020-08-13 00:19:33 +02:00
AnturK 18fe13c9f2 Ok, less build paranoia. 2020-02-17 15:01:14 +01:00
AnturK 52120c7728 Drops 512 support. 2020-02-17 15:01:14 +01:00
Kyle Spier-Swenson 4d1c252827 SSprofiler performance enhancements (#48861)
* Log fetch and write costs in SSprofiler.

* Update profiler.dm

* Update profiler.dm

* Add performance enhancements 

This should ensure it doesn't lag the server too much.

* Minor text changes
2020-01-19 01:24:42 -05:00
AnturK 6a62a139a8 Basic auto profiler (#48672)
* Basic auto profiler

* Makes it update periodically in case of crash.

* informative comment.

* Early start & config upgrades.

* Fixup
2020-01-09 19:32:57 -05:00