74 Commits over 212 Days - 0.01cph!
Merge: from parallel_validatemove
- more debug to track down null baseplayer
Tests: local editor SERVER+CLIENT session
Merge: from parallel_validatemove
- buidlfix
Tests: build client and server in editor
Merge: from parallel_validatemove
- Adds error checking to UsePlayerUpdateJobs 1 mode and graceful disable to avoid crashes to help with investigation
Tests: ran parallel mode in editor on craggy with a couple debugger-forced emergencies
Merge: from players_cmd_clean
- Removes obsolete columns
Tests: ran the command in a local editor session
Merge: from profiling_improvements
Tests: took a snapshot in editor
Merge: from minigun_audio_fix
- Fixes minigun audio beign stuck on Client after releasing the fire button
- Fixes minigun effects not replicating to other players
Tests: local 2 player session with each player firing minigun in various patterns.
Merge: from item_allocs
- Simplifies stacking logic to be cheaper and get rid of potential allocation
Tests: various stacking scenarios from belt to inventory with wood stacks(incomplete stacks, full stack + incomplete, full stack only)
Merge: from item_allocs
- Fixes BufferList not able to sort when it's not full
- removes some from Item.MoveToContainer
Tests: moved and stacked items in the inventory while checking profiler
Merge: from growablegenes_allocs
- Remove allocs from GrowableGenes
Tests: local in editor, spawned a planter box, filled it with seeds while monitoring Profiler stream
Merge: from treemanager_oob_nre
- Fixes NRE caused by trees close to the edge of the world
Tests: throw away unit tests that sampled edges of the tree manager's grid
Merge: from active_tooltip_nre
Logs to help track down mystery NREs.
Tests: booted into bootstrap scene
Merge: from baseplayer_dispose
- Fixes the error log spam on staging
Tests: local 2 player session, 2nd player disconnected, triggered GC - no errors
Merge: from parellel_validatemove
- Full conversion of player WaterInfo caching over to jobs
- TerrainMap now uses NativeArray instead of managed array
- expanded unit tests
- new ServerDemoProcessor that tracks water results checks (in/out of water counts)
Going to start testing on staging and monitoring the impact
Tests: ran all the new or updated unit tests, made sure builds passed locally, during dev used server demos to validate stats.
Merge: from texttable_allocs
- Layout improvements and NRE fix for 0 rows
Tests: unit tests + running filtered status command to force 0 rows
Merge: from texttable_allocs
- Fixing allocs in Server::playerlistpos
Tests: ran unit tests and stewed on Aux2 for a week
▊▄▆▇▉: ▉▋▄▅ ▋▆▊▆▋▅▅_▌▇▋█▆▋▍_▅▄▌
- ▉▅▇▋▍▄▉▅ ▉█▊▌▍▇▌, ▌▉▇▆▉█ ▊▍ ▇█▍█▄ ▊▍▄▅▆ ▋▄▊▊█▋▅ ▅▅▅▊▉▄
▇█▊█▅: ▊▌▉█, ▍▅▄▆▍▊█ █▊██▉▆
Merge: from concurrentquueue_leak
- Fixes an edge-case on high-pop servers that can cause a 10MB/s garbage allocation rate
Tests: validated fix works via synthetic test, then had a 2-player session on craggy to validate network traffic works as intended
Merge: from eventrecord_allocs
- Reduces the number of allocations caused by our server-side analytics
- New "analytics.small_buffer_send_limit" persistent ServerVar to reduce task scheduling overhead. Set -1 to return original behavior.
Tests: ran existing analytics unit tests, booted server in editor.
Merge: from parallel_validatemove
- Fixers a couple rare bugs leading to missing data from FullServerDemo recordings
- More work on BasePlayer.SErverUpdateParallel, still disabled
- Editor-only: Added a couple unit tests
- Editor-only: ServerDemoPlayer - disable error spam during demo playback, improve log format
- Editor-only: ServerDemoPlayer - automatically authenticate connections during demo playback
Tests: played back demo from staging server, recorded a couple new demos in local editor
Merge: from profiling_improvements
- makes the Linux binaries compatible with more distros (Ubuntu 20.04, Debian 12)
Tests: ran in Ubunti 20.04 and 24.04 via WSL. Took snapshots and opened them in perfetto.
Merge: from profiling_improvements
- Fixes ProfilerBinViewer to display all available threads and fix invalid callstack depth calculation
- Fixes a bug that would prevent json from being generated on busy servers
- Fixes a bug with timelines being very-slightly out of sync
- Optim/Bugfix to filter out all constructors from being profiled
Tests: a lot of exports in the edittor and a bit of forced "bad" cases
▍▌█▇█: ▅▅▇▍ ▋▅▊▄▊█_▌▋▌▊█▌▊▋▌▉▋_▄▅▆▇▆▉▉
▄▍▅▇▅▌ ▆▇▇ ▆▌▉█▅▊ ▊▋▅▌▌▉ ▍▇▅▊▌▊▅
▍▅▊█▉: ▅▄▋▇ █▉▍█ ▅▉▇▌▆▄ ▉▇▉ ▉ ▅▇▋▍▄, ▊▍▊ ▇▅▄█ ▅▊▇▍▇▅▍ ▇▆▉▍▇█ ▇▍▆█▋▅ ▌▇▊█ ▅▌ ▅▄▄▇▌▆▌ █▊▇ ▊▉▇▋█▇.
Merge: from parallel_validatemove
* Modifies Full Server Demo recording to grab more data + timestamps per packet
* Adds editor-only "DemoServer" server backend that we can use in editor to play back full server demos. Switch editor to ServerMode and put path in GameSetup object
* New server-side batch-update of players routine - disabled by default as it's not validated yet. Controlled by `server.UsePlayerUpdateJobs`
* Added GamePhysics batch versions of OverlapCapsule and OverlapSphere
* Couple unit tests to check Water's batch queries against non-batched versions
Tests: A lot of server demos recorded and played back in the editor doing core activities (looting, harvesting, interacting). Made sure standalone server and client builds locally.
Merge: from profiling_improvements
Further reducing overhead by recording 25% less data overall (based on 350p release server snapshot)
Tests: Took a snapshot on Craggy in Editor
Merge: from hackweek_serverprofiler_memory
- Records allocations from all threads
- Displays allocations on separate thread tracks + a graph of total allocations per thread
- Allocations now have last/current method, allocated type and size in the mark's "arguments" - see "current selection" in perfetto
- Allocations now also duplicate in the executing thread to make it easier to spot where exactly in the method it was allocated.
- Graphs of working set and virtual set memory for the entire process
Tests: multiple snapshots in editor on Craggy, single in standalone debug linux server via WSL on 3k procgen map, single in standalone release windows server on 3k procgen map with a harmony mod
Merge: from profiling_improvements
Further exclude small methods/utility classes that are fast 95% of the time.
Tests: Took a snapshot on a defualt ProcGen map in Editor(Client+Server). ~13% uncompressed json reduction.
Merge: from profiling_improvements
Avoids recording methods that are tiny/fast - helps with overhead.
Tests: in editor on Craggy generated a new snapshot and opened in Perfetto, couldn't find my methods.
Merge: from buildingprivilegeretrotool_recycling
Fixes invalid pooling of protobuf type when replicating data.
Tests: On Craggy setup a tiny box base and placed retro cupboard - before fix it immediately reported negatives via pool.print_memory, after fix - stayed >= 0
Buildfix: define symbol on Mac Server
Tests: compiled editor, then compiled linux DGS
Merge: from profiler_improvements
- Adds linux support (tested on Ubuntu
22404 via WSL)
- Optimizations for JSON export
- Added debug utility to export binary snapshot - run `perfsnapshot <delay> <name> <frames> <shouldBinExport>`
- Added Tools/Profiler Bin Viewer, an editor only tool to inspect binary snapshots
- Reduced default frames captured to 4 from 10
- Profiler now skips annotating UnityEngine.CoreModule methods (reduces capture overhead)
- Works around Perfetto visualization issue with Complete events (https://github.com/google/perfetto/issues/970)
Tests:
- Exported a number of editor snapshots with binary snapshots to test bin viewer
- Using WSL, tested exporting a snapshot on Ubuntu - 3k procgen world
Merge: from amvienceemitter_recycle
Fixes an inconsistent bug on client disconnect from a server trying to reactivate a gameobject.
Tests: validated it doesn't affect entity pool warmup sequence (as we create->retire there). Using `log.level Audio 2` and a bit of 100% code-forcing the issue, disconnected 3 times:
- without the fix, it was 100% generating an error on disconnect
- with the fix, had 0 error reports
Merge: from mapuploader_retry_exc
Fixes an exception when map uploading fails and it tries to incorrectly retry.
Tests: in editor's procgen server - hardcoded a failure point on first attempt, 2nd attempt managed to send it off properly.
Merge: from soundmodulator_leak
Fixes an audio-related NRE when performing generic interactions (zipline, bike, etc).
Tests: rode the zipline on Craggy a bunch of times(the whole way and with quick jump-off). Couldn't repro the NRE (though couldn't do it originally anyway)
Merge: from soundmodulator_leak
Disabling audio pooling to mitigate SoundModulator NRE in BlendedSoundLoops
Tests: on Craggy ran around, rode the zipline, hunted animals. Also left it to stew for a bit - no exceptions
Merge: from soundmodulator_leak
Hopefully improving stuttering audio for ModularCrane in bad server conditions
Tests: while connected to a local staging server moved the arm and rotated the cabin
Update: change indent_style to 4 spaces
Tests: regenerated projects and tabbed a couple times - it's spaces
Merge: from VendingMachinePooling
Fixes a minor bug that caused Vending Machine's protobuf pool to inflate
Tests: spawned a vending machine on craggy, saved, loaded craggy again - marker was present. Monitored pooling stats - seemed normal.
Merge: from soundmodulator_leak
- Fixed sound leaks from quickswitching scenarios
- Fixes wrong loop sound being played when coasting on a pedal bike
- Fixing flamethrower not playing sound when quickswitching while holding fire button
- Fixing pilot sound not played on taking out a flamethrower
- Recycle footsteps when their sounds end, instead of potentially incorrect preset time
Tests: played with a lot of weapons and vehicles while monitoring sounds via audio.printsounds and log.level Audio 2
Merge: from profiling_improvements
- Moves core of ServerProfiler to an unmanaged DLL - this deals with various mod issues and massively reduces recording overhead (less than 10% vs previous up to 7x).
- Snapshot marks are prefixed with assembly name
Tests:
- 3 times in a row: Generated snapshot in editor on Craggy
- 5 times in a row: Generated snapshot in Release standalone server with 6k world and 190k entities (with borked and good harmony mods)
- 3 times in a row: Generated snapshot in Debug standalone server with 6k world and 190k entities (with borked and good harmony mods)
- Built Wint64 client (debug and relase); booted up release
Merge: from profiling_improvements
- This brings ServerProfiler over, our own tool to generate server profiling snapshots
- To activate, start your server with "-enableProfiler", to take a snapshot use admin server command profile.perfsnapshot (files in <root>/server/<ident>/profiler/)
Tests: Exported multiple snapshots from Editor running Craggy, Release server running 6k Procgen world and a couple from Debug server.
Merge: from remove_editor_update
- Removes last editor-only update invoke case with many invocations(saves a measly 0.1ms).
- `demo.play` accepts absolute paths
Tests: setup an industrial chain with a chest provider and a crafter and linked those up - debug vizualization worked. Loaded a demo outside of demos folder.
Merge: from remove_editor_update
Removes around 1.5ms from 6k world in the editor and fixes longstanding bugs with the decal editing.
Tests: Created a bunch of decals, modified their properties(changes visible), deleted them(no NREs), ran in game - still visible.
Merge: from vehicle_optims
Saves 0.5ms on a 6k world by avoiding iterating over unmounted mountables
Tests: On craggy drove a kayak. On 6k world confirmed that the profiling scope shrunk to 0
Merge: from profiling_improvements
Removes boxing allocations in Pool.Get and Pool.Free in Editor context.
Tests: in editor on Craggy started a normal session, couldn't see allocations in the profiler. Overrode the startup params and was able to see the overhead table printed out when invoking cmd.
Merge: from profiling_improvements
Just additional profiling annotations to fill in voids on FixedUpdate and UpdateLOD. Also editor microoptim in GamePhysics.
Tests: Rode a horse on Craggy and checked profiler for changes
Merge: from remove_editor_update
This shaves off another 5ms from editor update times on 6k world map
Tests: built all modes in editor, tested debug rendering still works on craggy and loaded a 6k proc map and checked profiler
Merge: from remove_treeentity_update
This eliminates the many calls of TreeEntity.Update in editor play mode, saves ~16ms on 6k procgen map
Tests: booted editor with swamp_a scene and shut down, booted into craggy then switched to swamp_a, added and moved trees to swamp_a, changed tree prefabs - all cases could see expected visuals.
Bugfix: Restoring kayak to version from
105500
It got missmerged into nothing(empty prefab), even though it should've automerged
Tests: Spawned it on craggy and got in on the front seat. No exceptions during loading or spawning.
Merge: from requesttrees_spike
This reduces overhead of streaming grid cells of tree impostors from 3.5m to 1m on a 4.5k server.
Tests: 2 editors(1 server, 1 client) in same session - streamed no changes, removed 1 tree then re-streamed, and streamed with disabled lazy serialization
Merge: from requesttrees_spike
- Fixes NRE when players disconnect during tree streaming (fixed by discarding those players early)
Tests: in Editor CLIENT+SERVER mode disconnected before 4k proc-map streamed in - server was gud