1,688 Commits over 427 Days - 0.16cph!
Optim: UsePlayerUpdateJobs 2 - get rid of ExecutionContext copies when aggregating tasks in SendEntitySnapshots and -WithChildren
Tests: none, trivial change
Merge: from sleepignbag_assign_to_friend_bug
- Bugfixes for sleeping bag friend assignation, making private and "make bed" action not replicating to the new owner fully
- Added sleepingbag.assigntoplayer <bag entity id> and clearfromplayer <bag entity id> server vars for testing
Tests: spawned sleeping bag and bed and used above functionaility while assigning/clearing from self - was visible on map when expected.
Bugfix: fix Make Bed and Set Public bed interactions
Tests: spawned a bed_deployed, assigned to self, made public (visible on map), cleared from self (no longer visible), used make bed (visible). Made private - still visible on map
Bugfix: SleepingBag.AssignToFriend now correctly replicates updated spawn options for new owner player
- added sleepingbag.assigntoplayer and sleepingbag.clearfromplayer server vars
Tests: deployed an unassigned bag, used above command to assign to self - it was visible on minimap
Merge: from steamworks_posix_fix
- Bugfix for mods not beign able to work with Steamworks.Linux.dll - we go back to shipping Posix.dll
Tests: Built server standalone for Windows and Linux from Windows
Bugfix: don't ship Steamworks.Linux, go back to shipping Posix for both OSX and Linux - this unblocks modders.
- Linux got renamed to LinxuEditor and is only loaded for editor
This takes us back to only shipping Posix.dll for both platforms, while enabling to wwork with the project in Linux editor. In theory, builds Linux -> Linux and Linux -> OSX should work as well, but not tested.
Tests: Built Server Standalone for Windows and Linux from Windows. Confirmed in both cases LinuxEditor.dll doesn't get deployed, and in Linux case Posix.dll is.
Merge: from baseplayer_serverupdateparallel
- Optim: reducing allocs for UsePlayerUpdateJobs 2 codepath as much as possible(I think)
Tests: a bunch of 2p session on Craggy with UsePlayerUpdateJobs 2 and various interactions(occlusion, shooting, connect-disconnect)
Optim: UsePlayerUpdateJobs 2 - BasePlayer.WaitForTasks no longer allocs
Could be slower to wait like this, but I doubtr we'll have more than 30 tasks at sync points even on high-pop servers, so it doesn't matter
Tests: 2p on Craggy with UsePlayerUpdateJobs 2
Optim: UsePlayerUpdateJobs 2 - reduce garbage generation of BasePlayer.ApplyChangesParallel
Can't eliminate it fully till we get UniTask, but this should make a dent
Tests: couldn't test thoroughly as missing credentials, but it runs(and doesn't send) under UsePlayerUpdateJobs 2. Profiler confirmed less allocs
Optim: UsePlayerUpdateJobs 2 - stop constantly resizing array, only grow it if needed
Tests: 1p on Craggy with UsePlayerUpdateJobs 2
Optim: UsePlayerUpdateJobs 2 - cache continuation actions
Prevents allocs when no batches are sent, while also makes it cheaper to send when we do have batches.
Tests: craggy with UsePlayerUpdateJobs 2 in editor + checked IL
Merge: from baseplayer_serverupdateparallel
- Bugfix for slow metabolism and slow hostile timer accumulation on drawn weapon
Tests: compared healing rates of large medkit between UsePlayerUpdateJobs 0 and 2
Bugfix: UsePlayerUpdateJobs 1/2 - fix metabolism being slow
- Fixed by using correct delta times - use tick time length instead of deltaTime (as we accumulate deltaTime until we have a whole tick's worth, then step tick's duration)
- Also fixed marking player hostile if weapon drawn for long enough - same fix as above
Noticed same issue with another bit of code, but this one's wrong in vanilla flow as well - so leaving it as is till later.
Tests: compared rate of healing with log.level Combat 2 after using large medkit on UsePlayerUpdateJobs 0 and 2
Clean: extra "can kick" annotation
Tests: none, trivial change
Clean: fix formatting in BasePlayerr-Server.cs after merges
Tests: none, trivial change
Merge from baseplayer_serverupdateparallel
- Optim: reduce GC allocs by 60% when creating tasks for UsePlayerUpdateJobs 2
- Optim: skip occlusion queries for pairs of same players (affects all modes)
Tests: 2p tests on Craggy + 2k procgen with UsePlayerUpdateJobs 0/1/2 (covered spawning, sleeping, killing and occlusion kicking in)
Optim: skip running server occlusion between a pair of same players
Saves us a bunch of extra dictionary entries, running extra occlusion jobs
Tests: 2p sessions with UsePlayerUpdateJobs 0/1/2 on Craggy (with reconnects, kills, occlusion culling)
Bugfix: UsePlayerUpdateJobs 2 - skip trying to run occlusion checks between 2 same players
A little slapdash, but it fixes editor-only CLIENT+SERVER bug of sometimes failing to notify player that they're awake. I'll exclude it from all modes next CL.
Tests: loaded into 2k procgen world with UsePlayerUpdateJobs 2 set from the start 3 tmes - all times no weird zombie state
Optim: UsePlayerUpdateJobs 2 - reduce GC allocations around creating tasks
Surprisingly, this was a struggle to test. Suspicious about a potential bug in unrelated part of UsePlayerUpdateJobs 1/2.
Tests: 2p on Craggy and 2k Procgen map with UsePlayerUpdateJobs 2
Update: Unit tests that experiment with reducing allocation overhead of tasks
Got the following reductions in the unit test:
Garbage size: 1.1KB -> 0.3KB
Alloc Calls: 11 -> 5
The remaining ones seem impossible to remove while still using System.Threading.Task.
Tests: ran the new unit tests
Merge: from benchmark_demo_clean
- Clean: removal of dead functionality for demo benchmarks (not supporting it)
Tests: compiled in editor
Clean: remove expired editor-only upload endpoint
Tests: none, trivial change
Clean: remove full-server-demo benchmark demo uploading
FullServerDemos are not used for benchmarking(since they're not net protocol stable), so there's no point in this code.
Tests: compiles in editor
Merge: from baseplayer_serverupdateparallel
- Bugfix for UsePlayerUpdateJobs 1/2 - fix another reason why player could be swimming when parented
Tests: loaded up the map, went to the excavator - no more swimming with UsePlayerUpdateJobs 2
Bugfix: UsePlayerUpdateJobs 1/2 - extend the previous bugfix to the after-validate-recache logic
- Also fixed resetting a bunch of per-player state during the recache step
Tests: loaded map, hover-swim doesn't reproduce anymore (this time no exceptions)
Merge: from baseplayer_serverupdateparallel
- Bugfix: UsePlayerUpdateJobs 1/2 - players no longer randomly start swimming when parented to entities
Tests: loaded map from AU Prem 1 and went on to excavator - no longer swimming
Clean: Replace persistent native WaterFactorCache with transient native allocs
This is slower, but it's not the hot path and it simplifies code and avoids polluting intellisense.
Tests: ran unit tests
Bugfix: UsePlayerUpdateJobs 1/2 - use world pos/rots when running water queries
Previously it used local pos/transf, which was incorrect when parenting happened (excavator as example).
Tests: jumped on excavator, validated that the water queries are running in the right location with UsePlayerUpdateJobs 2
Update: UsePlayerUpdateJobs 1/2 - for blocking-water parented players, store empty WaterInfo instead of garbage
- Expanded TestWaterFactorsConsistency unit test to detect this case
Not marking as bugfix as I couldn't cause any bugs by hacking code. Makes BasePlayer.GetWaterFactors consistent with BasePlayer.WaterFactor
Tests: ran unit tests
Merge: from baseplayer_serverupdateparallel
- Fixes NRE when UsePlayerUpdateJobs 1/2 is enabled
Tests: unit tests
Merge: from main
Tests: compiles in editor, player cache unit tests
Bugfix: UsePlayerUpdateJobs 1/2 - use correct indices when filtering out disconnected players
- Added a unit test to validate BasePlayer.FilterInvalidPlayers works correctly
Tests: ran new unit test
Merge: from steamfriends_pooling_leak
- Bugfix for a pool leak of SteamFriends with open friend list or party management
Tests: observed steam friends list in game + created a party of me, SteamFriends pool stayed constant.
Bugfix: return SteamFriends to pool
- separate out party processing to partyChanged from friendChanged loop to prevent use-after-free bugs
Tests: observed steam friends list in game + created a party of me, SteamFriends pool stayed constant.
Merge: from texttable_allocs
- Update: TextTable now can be directly pooled and supports using-dispose pattern
- Bugfix: no more NRE on inspecting text table in debugger/evaluating twice
Tests: unit tests + executed a bunch of console commands multiple times
Clean: fix formatting of debug.cs again
Tests: none, trivial change
Merge: from main
Gotta fix debug.cs formatting again
Tests: compiles in editor
Update: converting the rest of TextTable uses to explicit pooling form
That's final ones
Tests: ran a bunch of commands couple times
Clean: fix borked formatting in debug.cs
Tests: none, trivial change
Update: convert to explicit pooling all of ConsoleCommands
Accounts for about 50% of text table usage
Tests: ran a bunch of commands a couple times
Update: modify one test to validate ShouldPadColumns resetting
Tests: ran the updated test
Update: rewrite TextTable to use pooling explicitly and support using pattern
- updated unit tests
I'll need to modify all 102 places we have in code to use pooling explicitly
Tests: ran unit tests
Merge: from shoretexture_editor_cache
- editor-optim: generates a cache for shore texture buffers
Tests: ran craggy twice