2,334 Commits over 580 Days - 0.17cph!
▍▊▌▅▆▅▅ ▆▍▍▋ ▇▅▌▉▋▋▆█▆▇▋▊▋▆▄▋▋▉▄▉ ▄▇▅▌▊▆ █▊▄ ▅▊▍▇▆▆▉▋▌▅▄▍▄▌▄▆▄▅▍▅▇█ ▊ ▌█▋▍▍▍▍ █▇▉█▅▋▋ ▇▉▄█ ▍▍█▄ ▉▍█▄▉ ▉▅▉ █▊ ▊▄▄▍█▆▉ ▌▌▊▊█ ▊▊▇▉▋▉▌▊██▅▌▌▋▉▌▇▇▇▌ ▄▌█▋▊█ ▄▌▌▅ ▄ ▌▇▄▇▌ ▋▄▌ ▉▊▋▆▅▌▆▄▊▋ ▋█▉▆ ▌▇▋▅ ▊▍ ▆█▍▋▇█▇▉ ▌
▍▄█▋▇▇▆▆ ▋▅▇▋▋▌▅▉ ▍ ▍ █▉▅▆▆ ▄▄▋▄▉▄ █▋ █▉▅▅▉▊ ▄▇ ▌▉▅▌ ▄▅█▌▋▊▌▌ ▄▉█ ▊▋▋█▊▉ ▇▋▆▆█▌▆▊▊▊▍▌▊▉▍▄ ▇▆▍▊▌ ▆▌▅▊▊▍▄█ █▋▅▇▋ ▉▌▍ ▉▊▇▆▆ ▅▄▍▍█▄█ ▊▇▉▉ ▄▊▄▌ ▄▉▋▍▅▅▅▌ ▋█▌▍ ▅▅▋▉▉█▊▅▌▆ ▋▆▌▊▋▄ ▅▊▇▄█ ▍▌▄▍█ ▄▄▍▅ ▆█▉ ▄▇▉▉▄▍ ▊▄▍▄ ▋▌ ▉▄▉▇▅▊▄▅▌ ▉▅ ▆▋▉▅▇▉▆ ▋▄▆▊▋▆ ▆█▅▊▋ ▄█▍▄ ▅█▇ ▉▊▌ █▅▆▋ ▉▅▆▌█ ▌▆█▋ ▇▋▉ ▌▇▇▅▊▉ ▇█▋ ▄▆▅▊▅▋▌▍ ▇▆▌▍▍▆▄▍▊▋▌█▊▋ ▊▇▉▉▄ ▆ ▉▅▍▋ ▌▍ █▍▅▅▆▄█ ▉▇▄▌▊▍ ▄▆▅▍ ▋ ▉▍▅▇▊▌▅▉▋▊▇▆▇ ▄▅▍▌ ▅▌ ▉ █▋▄ ▄▇▉█▍▊▍▍▇▆ ▅▆▍▌ ▄▆ ▇▄▊▇▌▅▅▊ ▌▉▍▆ ▄▇█ ▇▋▌ ▄▄▄▇ ▅▌▋▊ ▄ ▄▆▌▅▅ ▋▍▉█ ▋▇▆ ▍▆▍▊ █▋ ▋▍▄▋ ▌ █▄▋▄ ▅▍▌▌▊▅▄▅█▍▇ ▌█▅▌ ▍▉ ▇▊▄▋▅▋▋▅ ▍ ▋▄▆▇▇▅▇▋
Merge: from duplicate_bot_id_fix
- Buildfix for missing SERVER guard
Buildfix: add missing SERVER guard
Merge: from duplicate_bot_id_fix
- Bugfix for duplicate player id warning when loading a save
- Bugfix for editor freezing when loading a save with a player
Tests: playground with 1 transient, 1 persistent npc in editor then save -> load -> spawn player loop 3x
Merge: from main
Also renamed branch: duplciate_bot_id_fix -> duplicate_bot_id_fix
Bugfix: fix bot id being shared when loading a save
Fixed by reconstructing the free bot ID list and free bot id counter
Tests: playground with 1 transient and 1 persitent bot, couple loops of spawn player -> save -> load
Clean: fix formatting in BasePlayer-SaveLoad.cs
Tests: none, trivial change
Bugfix: recycle bot IDs when loading from a save
This was leaking a bunch of IDs, likely harmles on maps with low bot population
Tests: loaded craggy with preplaced bots (both persistent and transient). Spawned extra bots, their ID count was starting from 1
Bugfix: skip trying to draw water bodies if camera planes are not initialized
Was causing a lot of asserts when loading into Craggy with debug unity editor
Tests: booted craggy with debug editor - no more invalid plane normal asserts
Bugfix(editor): schedule QueryVisJobRunner jobs early to avoid editor freeze
Tests: was able to load craggy save with players multiple times in a row
Merge: from hackweek_pool_analyzer
- New: static code analyzer for invalid use of Pool.Free and related methods
- Bugfix: a bunch of fixes for detected pooling problems, about 40 cases
Tests: internal unit tests, compile simulator in editor, built C & S standalones (last week tho)
Update: PoolAnalyzer - switch to release version
- Release binary built from b189abf6
Tests: internal unit tests, started unity and ran compile simulator
Bugfix: fix 21 incorrect calls to Pool.Free instead of Dispose
Tests: compiled all modes in editor, built standalone C and S
Update: PoolAnalyzer - added detections for IProto.Dispose not being called and calling Pool.FreeUnsafe instead of Pool.Free
- debug binary build from b189abf6 (moved to new repo)
Reported a bunch of warnings, going through them separately
Tests: unit tests + started unity
Bugfix: fixing ~24 missing Pool.Free
Tests: editor compile test, built C and S standalones
Buildfix: undefine local GetFromGrid method when in None mode
Tests: None builds
Update: PoolAnalyzer - support ArgList syntax in ObjCreationSyntax
- debug bin built from 0fbab248
C+S Editor now boots! Now to check individual modes
Tests: unit tests + started editor
Update: PoolAnalyzer - further reduce false-positives
- better escapes for await, try blocks, using statements
- debug bin built from a2005dd2
Only 2 false-positives remaining in C+S
Tests: unit tests and started unity
Update: PoolAnalyzer - in cases of assignment, scan all block hierarchy up to local var declaration block
- debug binary built from cb708ddf
Down to 15 confirmed false-positives (5 different types)
Tests: unit tests + started unity
Update: PoolAnalyzer - check finally and using blocks
- debug binary built from b28334fc
Down to 48 potentially false-positive errors
Tests: unit tests + started unity
Update: PoolAnalyzer - more escape cases
- recursively process expression statements to detect deeply nested escape cases
- add support for field initializer escapes
- debug binary built from e61378eb
Currently detecting 54 errors (still a bunch of false-positives present)
Tests: unit tests + started unity
Update: PoolAnalyzer - escape analysis if assigned to a variable as part of method arg list
- debug binary build from 8b392070
Currently seeing 60 errors in C+S (3 valid, 2 false-positives, rest unknown).
Tests: unit tests + launched unity
Update: PoolAnalyzer - handle more valid cases
- added support for Dispose handling
- added if(obj != null) Free(ref obj) handling
- added support for using directives (both scoped and inline)
I give up on trying to handle local data flow involving pooled objects - there's just too much work here
Tests: unit tests + started unity (our Pooling unit tests no longer flag false-positives, this was kind of funny)
Update: PoolAnalyzer - escape a bit more
- don't analyze statements before Pool.Get call
- escape analysis when pooled object is returned out of method
- debug binary built from b8b556ae
Tests: unit tests + started unity. still a bunch of false-positives, but found first legit bug
New: PoolAnalyzer - validates code around Pool usage
- debug assembly built from e7281f13
Tests: detected errors, but those are false-positives (return of pooled object instance)
Merge: from save_leak_fix
- Bugfix for items leaking during save - items would be incorrectly marked as persistent when owned by transient entities
Tests: 5 save-load cycles on 2.5k procgen in editor. still leaked ~10 entities per save, but couldn't find them
Bugfix: prevent leaking entities into save from transient containers
Tests: 2.5k procgen map with disabled deep sea - 5 time save-load, went from 15,565 to 15,606. So we're still leaking, but less than a 0.1% per save. Didn't see anything specific in the entity dump.
Update: ServerProfiler.Core - more method annotation exclusions
- release bins built from c969bbab
Mostly focused on reducing the overhead of Scientists2's FSM evaluation and getting rid of injected Burst codegen gunk
Tests: craggy in C+S editor, entered deep sea, went to ghostship to wake up scientists, took a snapshot
Bugfix: handle similar-to-inf budget timespans
Tests: spawned on Craggy - no exceptions
Buildfix: remove non-existent call
Tests: none, trivial change
Clean: remove extra level of indentation
Tests: compiles
Update: InvokeProfiler now pushes executed_time and invokes_executed
Tests: compiles
Update(breaking-change): WorkQueueProfiler now also reports BudgetTime
- breaking as this doesn't match CSV template
Tests: none, compiles
Update: WorkQueueProfiler now sends an extra aggregate record for queues
We could aggregate it on the backend, but that would mean sending through potentially a hefty amount of empty records
Tests: compiles
Clean: add a couple TODOs for when I'll be going through old analytics code cleanup
Tests: none, trivial changes
Update: extracted PersistentObjectWorkQueue.TelemStats into WorkQueueTelemStats
- made ObjectWorkQueue populate it
- every queue now always logs it's budget time, even if it has no work to run (so that we can estimate budgetted/total time %)
Opens it up for use in custom queues as well, but I'll cross that bridge later
Tests: compiles
Bugfix: ensure Runtime profiler reports WorkQueue and Invokes from the same frame
- moved it's logic to be invoked via PostUpdateHook.OnLateUpdate, rather than slamming it directly into PostUpdatehook internals
Previously invokes would be from last frame, while work queues would be from current. It's still a little wrong, as we're reporting it as data from last frame - but at least it's consistently wrong
Tests: none, will deal with any fallout later
Update: rejig a couple parts of TelemStats to simplify code
Tests: compiles
Merge: from leavedeepsea_teleport_fix
- Bugfix: using leavedeepsea should no longer cause random bugs/random wake up positions
Tests: went on to a ghostship, then used leavedeepsea
Bugfix: unparent player if running leavedeepsea
This fixes player waking up in random location, potentially being killed for going out of bounds
Tests: on Craggy, went up to ghostship top and used leavedeepsea couple times
Merge: from serverprofiler_codeapi
- New: immediate mode profiling API for capturing specific regions of code. servervars to control it in "profile" group
- Unit tests covering all new logic
Tests: compile test + ran unit tests