Commit Graph

98 Commits

Author SHA1 Message Date
TiviPlus
0eaab0bc54 Grep for space indentation (#54850)
#54604 atomizing
Since a lot of the space indents are in lists ill atomize those later
2020-11-30 12:48:40 -05:00
Kyle Spier-Swenson
ff6576d036 sstimer no longer batches maintenance tasks to the bucket list to avoid edge cases and duplicated logic. (#55140)
* sstimer no longer delays maintenance tasks if its going over its tick.

This was leading to bugs if certain state operations happened while a task was delayed, furthermore if the timer subsystem was overloaded, the invoked timers list would bloat as it would never get cleared out, which would make all timer invocations take longer as they had to add to an ever growing list.

* Update timer.dm

* Fix error when a bucket has only one timer.

* simply timer loop logic & improve timer debug string

It would try to batch up linked list modifications and every issue we have ever had has been related to this, so now it just directly pulls the head of the linked list off, using bucketEject, rather then detect when it reaches the end of the linked list queue it will now just know because the bucket will be empty.

All bucketCount logic has been moved to bucketEject and bucketJoin(), which should also keep that more proper.

* Update timer.dm

* Update timer.dm
2020-11-30 01:30:45 +08:00
Kyle Spier-Swenson
ea363e7b01 Fix client time timers duplicating if any client time timer caused a stack overflow. (#54977)
* Fix client time timers duplicating if any client time timer caused a stack overflow.
2020-11-16 05:05:21 +00:00
Jared-Fogle
09b9ad869e Change signature of BINARY_INSERT to require the full type path, add test (#53217)
BINARY_INSERT used to only take typepaths like/this. Now, it expects them to be /like/this, to be more consistent with ther est of the code.

Adds documentation to COMPTYPE.

Adds a test for BINARY_INSERT.
2020-09-01 04:40:52 -03:00
Couls
e7f99e3b8b Browser Status Panel (#53112) 2020-08-27 15:28:03 -07:00
bobbahbrown
fb8533d776 whitespace 2020-07-30 00:18:34 -03:00
bobbahbrown
000fba61ef Merge branch 'master' into timers 2020-07-30 00:15:29 -03:00
Jared-Fogle
2b14436488 Add check timer sources debug command (#52417)
* Add check timer sources command

* Recognize linked list implementation
2020-07-28 12:36:53 +02:00
Rohesie
ed019679ba Ups the timer SS priority (#52405)
A lot of issues happen when the tick overruns due to less important and more expensive subsystems. If timer is not ran or breaks, a lot of stuff breaks.
2020-07-26 11:41:48 +12:00
Bobbahbrown
133e305327 Update code/controllers/subsystem/timer.dm
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2020-07-23 01:11:50 -03:00
Bobbahbrown
710fd21d1d Update code/controllers/subsystem/timer.dm
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2020-07-23 01:11:44 -03:00
bobbahbrown
28370750c1 better words 2020-07-22 00:57:58 -03:00
bobbahbrown
ca64e6fcd2 words 2020-07-22 00:49:33 -03:00
bobbahbrown
a86d9e6704 we did it 2020-07-22 00:43:07 -03:00
bobbahbrown
dd040656d4 almost there 2020-07-22 00:00:04 -03:00
bobbahbrown
9244e9b7f4 some documentation 2020-07-20 18:28:14 -03:00
bobbahbrown
5a282484ed less is better 2020-07-20 18:10:19 -03:00
bobbahbrown
c2af9e736d Revert "more"
This reverts commit 8707bfe75d.
2020-07-20 16:16:52 -03:00
bobbahbrown
8707bfe75d more 2020-07-20 01:10:47 -03:00
bobbahbrown
771afeba67 cleanup 2020-07-19 21:50:09 -03:00
bobbahbrown
2d96fb6c70 temp 2020-07-19 20:10:58 -03:00
Emmett Gaines
d86321a64c Updates BINARY_INSERT to be a bit more flexible (#48831)
Makes use of the do while(FALSE) trick to give it its own context and makes it possible for the inserted value to be different from the compared value so #48747 can use it.
2020-01-23 13:00:45 +13:00
spookydonut
48439a66dc makes these stacktraces 2019-12-10 19:01:48 +08:00
spookydonut
29ec9d0a81 timer proc autodocs (#46530) 2019-09-16 01:59:06 -04:00
spookydonut
e36f4f3c22 Fixes a bug with abductor implant (#46447) 2019-09-14 22:04:57 -07:00
Kyle Spier-Swenson
de5b7d4d93 Fix reset buckets being stupid
Why I never did see this I don't know, its a 5 million years old bug.
2019-03-03 22:33:44 -08:00
Kyle Spier-Swenson
ffd601a781 Fixes timer bug (again) (maybe) (blame byond) (this is why arrays should start at 0) (#40947)
* Fixes timer bug (again) (maybe) (blame byond) (this is why arrays should start at 0)

* missed a spot
2018-10-22 08:39:51 +13:00
ninjanomnom
38fa012b25 Fixes looping client time timers 2018-10-18 16:12:07 -04:00
Kyle Spier-Swenson
c3d08e4b64 Makes timer watchdog logic Fitter, Happier, More Productive 2018-09-22 11:35:39 -07:00
ninjanomnom
01a79dccb0 Fixes timer buckets going into negatives and adds a regression test 2018-08-16 14:50:09 -04:00
ninjanomnom
863cd2d57e Fixes TIMER_CLIENT_TIME looping timers not adding their wait 2018-07-12 20:23:56 -04:00
ninjanomnom
bb6b09d3e1 Fixes the active timer count getting out of sync when buckets reset while spent timers were awaiting qdeletion
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2018-07-12 20:23:56 -04:00
ninjanomnom
d32d2869c0 Adds looping timers
and a requested binary search insert macro
2018-07-12 20:23:56 -04:00
Kyle Spier-Swenson
ff77dac694 Fix timer bug (#38994) 2018-07-09 16:11:51 +03:00
Jordan Brown
8b16aaf87e Adds a warning for using TIMER_OVERRIDE without TIMER_UNIQUE 2018-06-28 14:37:28 -04:00
Jordan Brown
9549949eeb Merge pull request #38008 from MrStonedOne/ISawSSTimerFloatingInMyDreams
Fixes some edge cases in sstimer that could cause a timer to run before it was expecting to.
2018-05-25 11:51:03 -04:00
MrStonedOne
8b7694a9fc Timers on qdeleted objects is no longer supported.
Before we only warned if the wait was 1 or higher to solve issues with objects settings timers on themselves while getting qdeleted, a common enough usecase to support (even if it is annoying), but then I remembered we could check for qdestroying directly.

Also fixes it so such `destory()` time timers actually run consistantly. before they would only work if called after the `..()` in `destroy()`
2018-05-22 21:06:51 -07:00
MrStonedOne
01d816fa2e Fixes some edge cases in sstimer that could cause a timer to run before it was expecting to.
Because sstimer tracks timers internally in the terms of what "byond tick" they are suppose to run at; float wait values are now rounded *up* to the next Byond Tick rather then have byond round the resulting list index *down* at access time.

0 wait timers are now rounded *up* to `world.tick_lag` to avoid incompabilities with editing the current tick's bucket while it was being processed.
2018-05-22 20:27:39 -07:00
ShizCalev
3e32a82363 Corrects addtime stack_trace typo 2018-01-22 03:46:31 -05:00
Kyle Spier-Swenson
e31b2f749b Makes stoppable timers faster. (#34208)
* Makes stoppable timers faster.

* Missed a spot
2018-01-11 04:54:07 -05:00
kevinz000
02254279fb Adds jousting (#33531) 2017-12-18 20:55:09 -06:00
Kyle Spier-Swenson
fdcf747e18 [ready]Timer queuing tweaks: binary sorted inserts and rolling buckets. (#33098)
* Timer queuing tweaks: binary sorted inserts and rolling buckets.

Client time timers now uses a binary search algorithm for its sorted inserts.

Processing now uses a binary sorted insert, rather then sorting it with sortTim during bucket_shifts.

Buckets now automatically wrap around rather then get regenerated every minute. (Rolling queue)

* Fixes some queue management bugs.

* Fixes a Order of Operations goof up in the ticks<->ds macros.

@ninjanomnom your pain is my success

* Remove debug line

* Fixes some binary insert bugs, fixes client time timers, moved id over to GUID

* Fixes initialization-time timers fucking everything up
2017-12-08 22:02:34 +01:00
jammer312
bc998ffe1a Crash to timers and INFINITY check to beams. (#33219)
* beams

* timers

* >= instead of !=

* whooops
2017-12-03 13:44:58 -05:00
AnturK
c12a969c60 I shouldn't be doing this without performance report on below 300 elements because this shit is just ugly. 2017-11-14 19:39:01 +01:00
AnturK
d6f780613c Fixes client timers. 2017-11-13 20:54:58 +01:00
Emmett Gaines
825ab4def4 [512] The great \ref purge (#31824)
* The great \ref purge

* cleanup
2017-10-28 17:20:04 -04:00
Kyle Spier-Swenson
2b86b39747 More timer debugging for the debug gods. (#30436)
* More timer debugging for the debug gods.

* Its times like this I wish I could amend commit from the web interface

* git commit -a -amend&&git push --force
2017-09-07 10:58:22 -04:00
Jordan Brown
cd912faf59 Unifies datum definitions 2017-08-01 15:51:26 -04:00
pigeons
4e05dd63f9 Fixes timer id collision (#29437)
The list of active timers timer_id_dict identifies timers by their numerical id as a string. However this was done using embedded expressions inside the string, which calls num2text with a default of 6 significant figures. This means anything at or above 1 million is expressed in scientific notation.

"timer[1000000]" -> "timer1e+06"
"timer[1000001]" -> "timer1e+06"

Calling num2text manually with 8 significant figures kicks the collision problem down the road to 2^24 (16 million).

nextid is now selectively incremented and is looped back to 1 when reaching the 2^24 threshold.
Also now includes collision checking.
2017-07-26 11:48:21 +12:00
Kyle Spier-Swenson
eeab8f71bb Make timer debug info more robust (#29100)
* Make timer debug info more robust

* Update timer.dm

* Update timer.dm

* Update timer.dm

* Update timer.dm

* Update timer.dm

* Update timer.dm

* Update timer.dm
2017-07-07 22:18:44 -04:00