140 Commits over 396 Days - 0.01cph!
Merge: from baseplayer_serverupdateparallel
- Bugfix/Update: don't use parallel snapshot sending in UsePlayerUpdateJobs 1 (it's a level 2 feature)
Tests: used both modes in Craggy, confirmed things are working
Merge: from baseplayer_serverupdateparallel
- Bugfix for frequently disabling UsePlayerUpdateJobs leading to player cache desync
Tests: wrote a unit test that confirms the bug and confirms the fix
Merge: from baseplayer_serverupdateparallel
- Bugfix: PlayerCache can no longer desync when disabling UsePlayerUpdateJobs
- Optim: removed couple extra allocs in UsePlayerUpdateJobs 2
Tests: ran unit tests + bunch of disable-enable of UsePlayerUpdateJobs in local session
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.
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
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)
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
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)
Merge: from benchmark_demo_clean
- Clean: removal of dead functionality for demo benchmarks (not supporting it)
Tests: compiled 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
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
Merge: from baseplayer_serverupdateparallel
- Fixes NRE when UsePlayerUpdateJobs 1/2 is enabled
Tests: unit tests
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.
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
Merge: from shoretexture_editor_cache
- editor-optim: generates a cache for shore texture buffers
Tests: ran craggy twice
▉▍▅█▇▍▆▌: ▋▆▉█▇ ▋▊▌▌▄▉ ▍▋▄▋▍
- ▍▇▆▌█▇ █▊▋▌▊.▍▉ ▋▌▍▆ ▄▅▋▆▆.▄▇
- ▅▅▉▊▌█▌▉▆ ▆█▍▋▇.█▇ ▌▌▋█ ▅▋▆▄▆▉▊▋▍▄▊
▋▆▍▋▆: ▌▋▌▆▍ ▅▋▆▇▌ ▆▍▊▋▌▇ █▊▆▇▌ ██▆▌▅▊
Merge: from baseplayer_serverupdateparallel
- Bugfix for not replicating npcs when UsePlayerUpdateJobs 2 is set
- Bugfix for potential NRE for rare kick reasons when UsePlayerUpdateJobs 1 or 2 is set
Tests: 2p session on Craggy with NPCs and bots and UsePlayerUpdateJobs 2
Merge: from baseplayer_serverupdateparallel
- Bugfix for IndexOutOfRange when updating player state cache
Tests: none
Merge: from baseplayer_serverupdateparallel
- Next phase of parallel workflow, can be activated with UsePlayerUpdateJobs 2
- Optim: above mode now uses tasks to send entity snapshots/destroy messages where possible
- Optim: above mode uses parallel Burst jobs for server occlusion
- Optim: above mode reduced number of occlusion checks we run, more aggressive caching of results
- Contains Network++
Tests: build tests of all modes in editor + standalone server build + unit tests + 2p session on Craggy
▉▅▉▇▇: █▍▉▍ ▌▌▅▇▌▆▇▅▇▌▆_▄▉▊▉▅
- ▍▌▆▇▅▋: ▍▋▋▋▄▅▋▇▆▌█▅▌▉▉▉▍▅█ ▅ ▍█▍ ▆▍▉▄ ▆█▊▊▆▌▄▍█▊ ▅▅▅█▄
▉▇▊█▋: ▄▉▇▍▅ ▌▍▌█ ▌▉▋▉ ▅▉▍▉▅▆▆▌▉▅▍▌▍▇▋▍▌▉▉ ▉, ▋▄ ▊▄▋▉▇▌▅ ▉▊ ▅ ▇▉▍▌▅▍ ▅█ ▅▍█▇█▄▅▉
Merge: from benchmarking_update
- Log results after single scene run
- Fix extra timers in results
- Fix scene load exception for no longer existing effects benchmark
Tests: ran benchmarks in editor
Merge: from camerarenderer_leak
- Fixes memory leaks related to Rust+'s camera renderer and Nexus mugshot savings
Tests: print_arraypool when connected to turret - before ProtocolParser 16KB set would grow, now stays constant
Merge: from benchmarking_update
- Cleanup of obsolete EffectsBenchmark
- Editor-only DemoBuildingsViewer supports user modification of scene, scene export and import into scene
- Bugfix for infinite load loop in benchmarking flow
Tests: used the DemoBuildingsViewer to modify and export couple bases, built standalone client to run BaseRaidBench
Merge: from autoturret_optim
- Fix server NRE during turret initialization for ones without RCEyes bone set
Tests: spawned sentry.scientist.static(no RCEyes) and autoturret_deployed(with) - no NREs and still can control and shoot from autoturret_deployed
Merge: from autoturret_optim
- switch timing variables from float to double
Tests: editor builds C+S + confirmed deployed turret scans & detects, shoots, reacts to flank shots
Merge: from pooledlist_fixes
- Bugfix for invalid pooling of PooledList-subclassed types (like Eqs.PooledScoreList)
Tests: unit tests + print_memory PooledList tracking in editor with Wolf2
Merge: from autoturret_optim
- Bugfix for turret not reacting to player in front when powering up (caused by me)
- Bugfix for turret not identifying new target if it snuck from behind then walked in front (likely me as well)
Tests: standing in front, sneak in from behind then to front, sneak damage, flying from far, depower-power turret - turret finds a target & shoots
Merge: from autoturret_optim
- Fix to auto turret not responding to shots outside of firing arc
- Fix to turret not reacting to shots if it got depowered then powered up again
- Fix to turret snapping to hostiles outside of it's default firing arc when powering up
Tests: shot it, ran around and powered it up and down using infiniteiopower in various combinations
Merge: from autoturret_optim
- Speeds up AutoTurret::ServerTick by not updating nested transform hierarchy (gun_yaw and gun_pitch)
Tests: deauthed gun turret shooting me from different positions/angles
Merge: from growablegenes_allocs
- clean of 1 line
Tests: none, trivial change
Merge: from growablegenes_alloc
- reduces(removes?) junk allocs from growables
Tests: editor builds + alloc unit test
Merge: from benchmarking_update
- Added Biome benchmark
- Re-enabled other benchmark scenes
- Deleted Terrain and FoliageGrid benchmarks, demo benchmark
Tests: benchmark in editor and standalone client
Merge: from item_pooling
- Fixes bugs with pooling use - List<Item> leak and use-after-free Item use
- Added tests
Tests: unit tests + confirmed container corpses no longer leak List<Item> from pool
Merge: from parallel_validatemove
- Additional debugging logic to help track down mystery NRE
Tests: ran around in editor in SERVER+CLIENT mode with useplayerupdatejobs 1
Merge: from texttable_allocs
- TextTable now pads the last column as before
Tests: unit tests + editor test on 1-player team
Backout of
122696 - was meant to go into texttable_allocs branch
Update: bring back last column padding to TextTable.ToString
Tests: unit tests
Merge: from profiling_improvements
- New server profiler allocation tracking mode, start with "watchallocs", stop with "stopwatchingallocs", control export via various NotifyOn... server vars
- Json Snapshot compression is now streamed, saving 95% of memory in the process and reducing GC events
Tests: unit tests in editor, all forms of profiling in editor on Craggy in Server+Client mode, all forms of profiling in standalone server on Linux WSL
Debug: add logging of prefab path to track down server bundle NRE
Tests: update game manifest (optimized)
Backout of CL
121065 - should reintroduce merge from prefab_process_optim
Tests: update game manifest (optimized)
Backout CL
121063 due to failing server bundle generation
Merge: from prefab_process_optim
- Optimizes component checks during Prefab Processing (speeds up Asset Warmup and monument spawning)
Tests: with temp old code that throws exceptions on result missmatch, ran Asset Warmup and ran Scene2Prefab on all large and xlarge monuments
Merge: from parallel_validatemove
- Extra validation checks exposed via server.EmergencyDisablePlayerJobs (default to true). In case of error, shuts down UsePlayerUpdateJobs and goes back to vanilla flow
These are cheap to run and should help us track down any problems in the future.
Tests: compilation tests, unit tests and played back server demo
Merge: from parallel_validatemove
- Optim to reduce physics cast scheduling overhead
Tests: unit tests
Merge: from profiling_improvements
- New: experimental perfsnapshot_stream [Name, MainCap(MB), WorkerCap(MB), Debug] server command that streams perf data into a user-defined buffer. Limited to 256MB per thread. Stable up to 32MB, past that might fail to export.
- New: profile.quiet persistent server-var - controls whether perfsnapshot commands notify chat of incoming stutters
- Bugfix: fix snapshots failing to export in standalone(introduced yesterday to staging)
Tests: build tests, unit tests, taking snapshots in editor, and snapshots in standalone server build
Merge: from profiling_improvements
- Buildfix for tests trying to use ServerProfiler in non-server env
Tests: scripts compile in editor CLIENT mode
Merge: from profiling_improvements
- Rewrote internal storage of profiling data to use 1 buffer per thread
- Bugfix for allocation graphs not properly resetting and having gaps at the start
- Bugfix for failing to generate export in rare cases where mono runtime allocates with no managed callstack
Tests: unit tests and generating snapshots in editor
Merge: from parallel_validatemove
- Removes PlayerCache.ValidPlayers allocs
Tests: took a snapshot on Craggy in editor
Merge: from profiling_improvements
- Reduces overhead of serializing to/from ProtoBuf by not tracking BufferStream calls
Tests: snapshot on Craggy in editor
Merge: from relationshipmanager_leaks
- Server and Client-side bugfixes for pooling around RelationshipManager types
Tests: local 2 player session with flicking open-closed the contacts screen and with pooling tracking