2,447 Commits over 608 Days - 0.17cph!
Bugfix(tests): fixup ServerProfiler tests that are sensitive to type hierarchies
- release binaries from a496e80e
Tests: ran ServerProfilerTests
Buildfix(tests): all modes compile
Tests: clicked through all modes
Clean(tests): rest of Assembly-CSharp-Editor.dll tests restructure
Just gotta make sure all platforms build and check if unit tests pass
Tests: none
Merge: from useplayerupdatejobs3
- Bugfixes for dynamically enabling Jobs 3 mode
Tests: unit tests + switched Jobs 2 -> 3 on Craggy in editor
Bugfix: ensure AntiHack states are properly expanded when going from Jobs 2 to Jobs 3
Tests: sanity test on craggy in editor, switched Jobs 2 to 3
Clean: one more unnecessary playerCache passing
Tests: compiles
Bugfix: ensure SpeedhackStates and FlyhackStates have sufficient storage
- remove playerCache propagation where we already pass a ReadOnlySpan
Tests: ran unit tests
Clean(tests): 30% restructure of Assembly-CSharp-Editor.dll tests
Tests: none, will rerun once all moved
Clean(tests): restructure Facepunch.System.Tests.dll tests
- removed FPTask and associated tests (was experimental code)
Tests: ran unit tests
Clean: restructure Rust.Global.Tests.dll tests
Tests: ran unit tests. some OBBTests sporadically fail, but pass on 2nd run - think same as before
Clean(tests): rename DummyServer -> TestServer
Tests: compiles
Clean(tests): consolidate various test entities/systems
Tests: none, going to happen later
Clean(tests): Move test utilities to Tests and Tests.Perf namespaces
- replaced manual measurement loops with Test.Perf.MeasureAndPrint
Tests: none, leaving till later
Merge: from dynamic_object_work_queue_shrinking
- Optim: ObjectWorkQueues now shrink to larger capacities overtime
Tests: procgen map, ensured outpost turrets still tracked and fired at me
Update: debug.printqueues now also prints queue capacity
Tests: printed queues while being blasted by turrets
Optim: ObjectWorkQueue now shrinks to dynamically adjusted minimal capacity instead of 0
- explicitly calling Clear resets the state back to inital 256 capacity
Grows capacity by 10% every minute if 60 overcapacity events have been recorded. This should eliminate allocations for bursty workloads in long term.
Tests: visited outpost, got blasted by turrets
Merge: from fix_invoke_flood
- Optim: prevent repeating invokes flooding work after stalls
Tests: observed animals moving normally
Optim: change scheduled time for repeating invokes
Previously, we would schedule repeating invokes from current time, meaning overtime they would drift towards one frame, causing work spikes. Now we maintain interval in respect to original time, which should preserve original scattering
Tests: ran around with a lit torch on procgen, some wildlife moving
Merge: from remove_clear_from_unsub
- Optim: speed up unsubbign from network groups by skipping clearing their entities from the queue
Tests: teleported around 2.5k procgen map
Optim: skip clearing entity queue when unsubbing from a network group
Was originally done to help with old spectating logic, but it's now handled separately.
Tests: teleported around on a 2.5k procgen map
Merge: from imrpoved_network_groups/serverocclusion_player_fastpath
- Optim: skip unnecessary global occlusion group lookups
Tests: unit tests
Optim: skip checking global occlusion groups for small and large network grid layers
Players can only be on medium layer at the moment. Controlled by a UsePlayerOnlyOnMediumLayerShortcut compile switch
Tests: ran unit tests
Update: Jobs 3 - enable parallel sub updates switch
Tests: none, related unit tests pass
Update: pregenerate radius tile offset to avoid potential races
Tests: ran unit tests
Bugfix(tests): TestNew_LaggyTeleport - fix sleepers incorrect position after recent refactor
Tests: ran unit tests, they pass
Bugfix(tests): fix incorrectly converted TestNew_MoveOther spawn pos
Tests: ran unit tests, now only 1 failure
Bugfix(tests): increase DummyServer's network grid from 512 to 1024
Some tests ended up spawning outside of the network grid, leading to test failures.
Tests: ran unit tests, from 30 failures down to 9 (2 tests)
Update(tests): bring back spawning on boundaries of network ranges
Current logic considers those cells to be in range, so rely on that fact. Doesn't fix tests, but validates edge cases
Tests: ran unit tests, same tests failt
Clean(tests): consolidate network-range-distance calculating logic
Got tired of fixing it up manually in every test
Tests: ran unit tests, some still fail (likely due to out of network grid bounds cases)
Merge: from spectate_stay_after_dc
- Update: spectating players now always stay on a disconnected player's sleeper instead of searching for new target
Tests: spectated 2nd player, 2nd disconnected, spectator stayed
Update: when player disconnects don't try to find a new target for spectators, just let them hoves in 3p
Tests: spectated a player that disconnected, stayed on it's sleeper
Merge: from useplayerupdatejobs 3
- Optim: new UsePlayerUpdateJobs 3 mode that adds parallelizes more work and reduces task-related allocs
- New: our fork of UniTask
Tests: unit tests and simple testing on Craggy (booted with Jobs 3, teleported around)
Clean(tests): replace more handrolled index set generation with AntiHackTests.GenerateIndexPermutations
Tests: ran all afected tests
Bugfix(tests): use 1^-5 epsilon for water level consistency in TestWaterLevelsConsistency
Tests: ran unit test
Merge: from demo_3p_camera_fix
- Bugfix for 3p camera spazzing out in client demos
Tests: played back a demo and switched to 3p and back
Bugfix: ensure 3p camera in client demos uses selected player's eyes
Tests: play back demo, was able to go 3rd person on active player
Merge: from jobs2_demos_fix
- Bugfix for players not moving in client demos recorded on Jobs 2 servers
Tests: recorded on craggy with jobs 2, played back - all's gud
Bugfix: fix player not moving in demos recorded on Jobs 2 servers
The cached list of unoccluded players was missing owner player
Tests: recorded a demo on craggy with jobs 2, played back - player and camera was moving
Merge: from useplayerupdatejobs3/free_tasks
- New: fork of Cysharp/UniTask with less allocs
- Optim: reduce allocs around tasks in Jobs 3 mode
Tests: jobs3 on craggy with 2 players, built client and booted
Optim: Jobs 3 - save allocs by using UniTask for sending entity snapshots asynchonously
Think that's all existing tasks converted
Tests: loaded on craggy and teleported to/from the island
Clean: get rid of handwritten UpdateSubs_AsyncState state machine
Tests: unit tests
Optim: Jobs 3 - rewrite EAC and analytics tasks into UniTasks to remove allocs
Discovered server profiler is megaborked, no idea what caused it. Will investigate after rewrite is done
Tests: craggy in editor with jobs 3
Optim: Jobs 3 - OcclusionSendUpdates now uses UniTasks
- added UseUniTasks feature flag controlled by UsePlayerUpdateJobs 3
Positive experiemnt, can get rid of the hand-rolled state machine and use async-await.
Tests: profiled 2 players in editor beign destroyed by server occlusion - no allocs for task
Update: server enables SetPoolRunnersActive to reduce allocs of SwitchToThreadPoolAwaitable during tier0 init
Tests: loaded on craggy (with and without jobs 3), teleported around