2,614 Commits over 639 Days - 0.17cph!
Update: repack player cache and dependent state as players are removed
Should allow us to clean up a bit of indirection and optimize things further
Tests: 2p session on Craggy with disconnects and being kicked for flying under terrain
Clean: projectiles now internally iterate over their cache rather than instance list
Tests: unit tests, 2p on craggy
Update: ensure projectile stable indices are packed
This simplifies code and opens up the door for better cache utilisation & simd processing, but currently savings are on the noise level
Tests: unit tests + shot around player with 2 clients connected
Clean: cache span from ActiveTriggers.Objects
Tests: none, trivial change
Merge: from terrainkick_nre_fix
- Bugfix for NREs caused by kicking players(invalidating iterators) while looping over StableObjectArray
Tests: kicked self through clipping in terrain - no NREs
Optim: Avoid double indirection when looking up active triggers
- enabled by use of invalidating RemoveAtSwapback
TriggerParent.StableIndex is only const during a frame, it now can change between frames
Tests: built a 3-piece boat with a ladder, jumped around it
Clean: removed FilterInvalidPlayers now that I've validated that all kicks were grouped at end
- cleaned up comments that pointed out kick locations
Tests: none, trivial change
Bugfix: avoid NRE after kicking a player while iterating over a player cache
- consolidated all kicks in ServerUpdateParallel to end of the method
Tests: got kicked for terrain violations, no NRE
Update: StableObjectArray.RemoveAtSwapback can now optionally invalidate stable indices
- added unit tests
Should help us maintain packed state of dependent arrays - will start converting current use cases next.
Tests: ran unit tests
Update: replace hardcoded constant with GamePhysics.DefaultMaxResultsPerQuery (same value)
- also submitting missing meta file
Tests: compiles
Merge: from fix_boat_no_sail
- Bugfix for boats and vehicles getting stuck in open areas, effects not playing, building appearing slow
Tests: unit and perf tests, built and sailed a boat on craggy
Bugfix: fix player boats getting stuck while sailing (and other weird bugs)
- Network subscription now creates discovered cells
Was caused by overly aggressive network group lazy creation. If they are created within player subscription range, player doesn't get subscribed to them automatically, which caused all kinds of issues. This'll hurt perf over time, but no worse than current perf on Release - I'll optimize this later
Tests: unit tests, perf tests and built a boat and sailed across craggy
Merge: from stableobjectcache_taa_nulls
- Update: Replaced StableObjectCache with StableObjectArray, updated TriggerParent, Projectiel batching and server player processing to use it
- Bugfix: fix for "Adding null to TransformAccessArray" warning
Tests: unit tests, 2p session on Craggy with jumping on boat, shooting, conencting-disconnecting
Update(tests): add validation of StableIndexLookup to StressTest
Tests: ran unit tests
Clean: delete StableObjectCache, no longer in use
- fixed up const references that I missed
Tests: compiles
Update: add missing NativeDisableParallelForRestriction to BasePlayerJobs.RecacheTransforms
Tests: none, trivial change
Update: rewrite projectile batching to use StableObjectArray instead of StableObjectCache
- internal statics are now initialized and cleaned up on client connect/disconenct (+ scripts reload)
- had to sprinkle container access checks due to indirection
This was the last user of StableObjectCache, will rip it out next
Tests: ran unit tests, 2p craggy test with shooting (confirmed fly by effects, ricoches still happen)
Update: rewriten TriggerParent to use StableObjectArray instead of StableArrayCache
- ran codegen
- made DisposeInternalState run on assembly reload
Tests: built a boat, jumped on off - no issues (except the boat not moving, but a separate bug)
Bugfix: ensure PlayerTransformsAccess stays in sync with PlayerCache when players are removed
- also removed safety if as it's obsolete after recent change to cleanup player before shutting down the server
Tests: had 2nd client connect-disconnect to me on Craggy (though technically it's not enough, I'm relying on unit test logic)
Update: StableObjectArray gets GetIndexForSyncRemove to support removing from linked collections
- used it to fix TestTransformAccessArraySync
Need to update actual game code since it's bugged
Tests: ran unit test
Update(tests): add unit test that validates StableObjectArray is in sync with TransformAccessArray
Tests: ran the test - they're not, gotta fix it tomorrow
Bugfix(editor): cleanup connected players before we shutdown server when stopping playing in editor
Tests: started and stopped play mode
Bugfix: if shorevector caching is disabled, then make sure we generate it
Prev version skipped if it found the cache files on disk even though it didn't load them
Tests: booted into craggy
Bugfix: properly dispose of BasePlayer.PlayerCache
- also invoke DisposeInternalState on assembly reload
Tests: started and stopped playing on Craggy
Clean: rename BasePlayer.StableIndex -> BasePlayer.ActivePlayerInd
Eventually we'll have SleeperInd and etc, so doing this change early
Tests: compile all modes pases
Clean: delete PlayerCache and it's unit tests
Tests: compiles
Bugfix(editor): rengerate client-side shorevector cache if it's size changed
Tests: connected to a server running craggy
Update: StableObjectArray rewrite - version 2
- Replaces PlayerCache on the server in all the relevant paths
Still need to do clientside projectiles stable cache before ripping it out
Tests: booted into Craggy, ran around. Need to test 2p, but being stopped by some shore vector out of bounds access, hoping sync fixes it
Bugfix: StableObjectArray.StableIndexLookup was returning unbounded array
Tests: booted into craggy and ran around
Update: useful bits from the first failed StableObjectArray conversion
It ended up being too pervasive for my liking, going to try a simpler approach
Tests: compiles as part of rewrite, but none otherwise
Update: StableObjectArray now exposes stable index lookup map (needed for transform access array jobs)
- moved NativeArrayEx to Facepunch.UnityEngine plugin, enabled unsafe code, added Unity.Collections dep
Tests: none, code is in the middle of breaking rewrite
Clean: dead test code removal
Tests: compiles
Update: conversion to StableObjectArray - step 2, WaterLevel tests
Tests: ran WaterLevel unit and perf tests
Update: conversion to StableObjectArray - step 1, AntiHack unit tests
Tests: ran antihack unit and perf tests
Update: implement StableObjectArray.Repack
- update unit tests to better track consistency of the state
- expand StressTest to validate Repack
Going to start replacing StableObjectCache in code tomorrow. Also gotta stop unit test from allocating, it takes too long
Tests: ran StableObjectArrayTests
Update(tests): add StressTest unit test
Next up going to try to figure out how to support Repacking
Tests: ran unit tests
New: StableObjectArray, a pending replacement for StableObjectCache
- added basic tests, needs more
Follows TransformAccessArray API, provides similar stability guarantees as StableObjectCache but requires to be interacted with differently.
Tests: ran unit tests
Merge: from unitask_reliable_taskpool
- Optim: UniTask internal pooling now reliably caches items
Tests: unit and perf tests, ran around Craggy with Jobs 3
Optim: ensure UniTask.TaskPool reliably caches items
- copied from repo at 88737fb5
Original version was written in wait-free fashion which permitted only 1 participant while failing others. Rewritten to be lock-free, which allows to guarantee pooling
Tests: ran unit and perf tests. stuck breakpoints to confirm that repeated perf test invocation didn't have allocations. ran around craggy with jobs 3
Merge: from remove_netgroup_prealloc
- Optim: NetGroup objects are now lazy allocated, saves 150MB
Tests: ran unit tests, ran around on craggy
Update: cleanup ClientVisibilityProvider when disconnecting from the server
Tests: disconencted from local server
Update: dispose netgroups when NetVisGrid gets disabled
Tests: booted into craggy and stopped - no errors
Clean: remove Provider.Init method
Tests: ran UpdateSubscriptionConsistency test, booted into craggy