userDaniel Pcancel
reporust_rebootcancel

1,623 Commits over 396 Days - 0.17cph!

15 Days Ago
Update: ran Generate Code Tests: none, trivial change
15 Days Ago
Update: Network++ UsePlayerUpdateJobs 2 can send packets out of order, which needs client-side change (see CL 128169) Tests: none, trivial change
15 Days Ago
Update: amending a comment for SendDemoTransientEntity Finished investigating, server-demos shouldn't be a problem for multithreaded networking Tests: none, trivial change
15 Days Ago
Merge: from main
16 Days Ago
Bugfix: players go back to sleep on disconnect on a server with UsePlayerUpdateJobs 2 This looked scarrier than it ended up being. One concern left to investigate - looks like I'llbe able to merge it in tomorrow Tests: 2p session on craggy with UsePlayerUpdateJobs 2
16 Days Ago
Optim: NetworkPositionTick - skip transform access Tests: none, trivial change
16 Days Ago
Optim: inline virtual calls in SendNetworkPositions and skip transform access Tests: 2p seesion on Craggy with UsePlayerUpdateJobs 2
16 Days Ago
Update: simplify SendNetworkPositions Decided against parallelizing with tasks as it looks to be taking only ~0.3ms on a 350pop server Tests: 2p session on Craggy with UsePlayerUpdateJobs 2
16 Days Ago
Clean: fix formatting Tests: none, trivial change
16 Days Ago
Bugfix: fix failing WaterLevel tests My ReadOnlySpan caused it, as we had hardcoded access to the global PlayerCache (which we don't use in tests). Tests: unit tests pass
16 Days Ago
Update: rename BasePlayer.playerCache member var -> BasePlayer.PlayerCache It was hiding the source of a bug, as func params have lower case name Tests: compiles in editor
16 Days Ago
Clean: prefer ReadOnlySpan<BasePlayer> instead of playerCache where possible Makes it easier to guess things at a glance. Tests: ran all relevant unit tests(discovered WaterLevelTests are failing, will investigate next) + 2p session on craggy with UsePlayerUpdateJobs 2
16 Days Ago
Update: demote PlayersToFinalize, PlayersToValidate, PlayersToRecache from being global caches Tests: 2p session on Craggy with UsePlayerUpdateJobs 2
16 Days Ago
Update: demote PositionChanges from being a global cache Tests: 2p session on Craggy with UsePlayerUpdateJobs 2
16 Days Ago
Merge: from occlusion_rework - Fix for occlusion queries not being commutative - Reenable occlusion frame cache and expand it's use to full frame - Server occlusion deduplicates queries - minor API restructure (might affect mods)
16 Days Ago
Optim: ServerUpdateParallel - update player subscription groups just before we run sever occlusion update This ensures that server occlusion frame cache is built from up-to-date occluders, and allows to save on more occlusion checks downstream in ConnectedPlayersUpdate Tests: 2p session on Craggy with UsePlayerUpdateJobs 2
16 Days Ago
Clean: split up FinalizeTickParallel monstrosity This is end of prep to rearrange systems for better occlusion cache reuse Tests: 2p session on craggy with UsePlayerUpdateJobs 1 and 2
16 Days Ago
Update: add native list expand to GatherPlayersToUpdate No effect in current case, but can prevent surprise exceptions in the future if reused Tests: none, trivial change
16 Days Ago
Clean: minor refactor of ServerUpdatePlayerTick Getting ready to shuffle system steps around, to re-expand occlusion cache and potentially reduce network traffic Tests: none, trivial changes
16 Days Ago
Bugfix: avoid stale occlusion results for new occludeeds Didn't realize UpdateSubscriptions modifies occludees - this returns a bunch of overhead. Will try to fix next. Tests: none, trivial change
16 Days Ago
Optim: deduplicate occlusion queries Saves 15-50% in 1k baseplayer pairs parallel occlusion perf tests. Tests: occlusion unit tests
17 Days Ago
Clean: ServerOcclusionJobs.Algorithm uses int3 instead of SubGrid Simplifies the code a bit Tests: ran unit tests
17 Days Ago
Clean: get rid of non-burst CalculatePathBetweenGrids - Also removed obsolete tests We've been using burst version for a bit, and with current fixes it balooned to too many lines of code Tests: ran unit tests
17 Days Ago
Bugfix: apply same neighbour occlusion fix to jobs Perf tests of 100k paths show degradation (serial +25%, parallel +52%), but perf tests for 10k baseplayer occlusion show negligeble impact (serial -9%, parallel +1%). Tests: occlusion unit tests pass
17 Days Ago
Bugfix: reimplement occlusion neighbour logic in non-burst flow - Added anothed optim todo now that we have axis-count-specific neighbour checks This partially fixes the failing test (it still fails since now it trips up in burst version) Tests: ran unit tests
17 Days Ago
Update: Re-enable sorted pair occlusiuon visibility caching Tests: none, I know it's borked
17 Days Ago
Merge: from baseplayer_serverupdateparallel
17 Days Ago
Update: disable bidirectional occlusion caching for now - Left a couple optim/safety todos This fixes the batch vs serial baseplayer occlusion consistency test, but one CantSee fails as expected. Going to fix it in a child branch, as that currently blocks more optims. Tests: ran relevant unit tests
18 Days Ago
Tests: TestLineOfSight - properly enforce non-job mode in relevant cases Tests: ran test sets
18 Days Ago
Tests: TestLineOfSight - validate reverse paths Looks like some occlusion checks might fail reverse paths. That's an uh-oh. Tests: ran above set, got a failure
18 Days Ago
Tests: ServerOcclusionTests - generated data set now contains similar pairs Interestingly, this trips up consistency test - will investigate Tests: ran TestOcclusionLineOfSight_Consistency
18 Days Ago
Tests: PerfOcclusionLineOfSight - reset internal recent visibility cache between runs Tests: ran the set
18 Days Ago
Tests: ServerOcclusionTests - standardize test naming Tests: ran test set
18 Days Ago
Tests: ServerOcclusionTests.GeneratePairs - generate correct number of pairs This further shrinks runtimes, as previously we generated waaaay too many Tests: ran ServerOcclusionTests set
18 Days Ago
Tests: optim TestOcclusionLineOfSight_PerfSerial/-Parallel By properly constructing and caching base players - tests now take less than a second. Tests: ran test set
18 Days Ago
Tests: add TestOcclusionLineOfSight_PerfSerial/-Parallel Both run for too long - likely due to how I create players for the tests. Will fix next Tests: ran the new set
18 Days Ago
Tests: TestOcclusionLineOfSight_Consistency - rset occlusion cache between serial and parallel runs Tests: ran the test set
18 Days Ago
Tests: add ServerOcclusionTests.TestOcclusionLineOfSight_Consistency Compares results between serial and batched versions. Tests: ran the new test set
18 Days Ago
Update: prep BasePlayer.OcclusionLineOfSight (both serial and batched) for use in tests Tests: none, trivial change
18 Days Ago
Tests: rewrite ServerOcclusionTests to make ServerOcclusion usage clear Is it ugly on some lines? Yes. But is it explicit and beautiful? Also yes. Tests: ran the unit tests
18 Days Ago
Clean: propagate network time from FinalizeTickParallel Tests: none, trivial change
18 Days Ago
Optim: NetworkPositionTick - remove extra InvalidateNetworkCache Cache has been previously invalidated in FinalizeTickParallel, so no need to discard it again Tests: none, trivial change
18 Days Ago
Optim: OcclusionSendUpdates can now reuse occlusion results - Got rid of old OcclusionLineOfSight that used to send updates internally, as there's no need for it now Tests: 2p session on Craggy with UsePlayerUpdateJobs 2
18 Days Ago
Clean: remove couple TODOs - one was just completed - another was overzealous Tests: none, trivial changes
18 Days Ago
Optim: SendNetworkPositions - reuse occlusion query results Tests: 2p on Craggy with UsePlayerUpdateJobs 2
18 Days Ago
Update: move ServerUpdateOcclusionParallel inside FinalizeTickParallel - FinalizeTickParallel invalidates players network cache - with UsePlayerUpdateJobs 2 we can skip it later, but 1 is has double-invalidate This increases the coverage of OcclusionFrameCache, allowing to simplify a bunch of code. Tests: 2p on Craggy with UsePlayerUpdateJobs 0, 1, 2 and disconnects. 0p server with UsePlayerUpdateJobs 1, 2
18 Days Ago
Merge: from connectedplayer_rewrite Got far enough along in this direction and things seem to work
18 Days Ago
Bugfix: ServerUpdatePlayerTick - restore Player.serverTickInterval functionality Got lost during the rewrite Tests: 2p on Craggy with UsePlayerUpdateJobs 2
19 Days Ago
Update: ServerOcclusion - add a global cache of all player pair results that lives for a frame - Cache is valid after it's been updated, controlled via OcclusionCanUseFrameCache Optimizes SendEntityUpdates and anything in the end of frame invokes by skipping LOS checks. This doesn't affect tick confirmation due to code ordering - will have to reorganize that Tests: 2p on Craggy with UsePlayerUpdateJobs 2
19 Days Ago
Clean: use ReadOnlySpan in SendEntitySnapshots/-WithChildren Tests: compiles in editor