2,365 Commits over 608 Days - 0.16cph!
Optim: UpdateSubscriptions - parallelize network group comparison
Gives us ~15% improvement over serial. Hoping to parallelize gather - that's the biggest perf sink
Tests: ran unit tests
Bugfix(tests): fix perf tests doing nothing in warmup
Tests: ran perf tests
Update(tests): add perf tests for serial and parallel UpdateSubscriptions
Tests: ran it
Update(tests): added consistency test for BasePlayer.UpdateSubscriptions
- fixed a bug with stepping players who's timestamp is not due yet
- Refactored serial code slightly to keep the structure consistent
Tests: ran unit test
Bugfix(tests): when setting up a dummy server, ensure heighmap is also initialized
Needed to accomodate recent changes with tunnel net groups
Tests: perf test for snapshot deps now runs
Update: rewrite BasePlayer.UpdateSubscriptions into batch form
Doesn't actually do anything different, just prep for adding managed tasks to it. Need to add unit tests and perf tests first
Tests: booted into Craggy with jobs 3 - was able to see entities in the world
Bugfix: PartialCompare - don't miss last object in b listhashset
Could lead to a duplicate pushed to removed list
Tests: ran unit tests
New: ListHashSet.PartialCompare - early outs upon reaching addedLimit and removedLimit
- added unit and perf test
It still has linear complexity, but does seem to scale better
Tests: unit tests
Clean: refactored NoClip perf tests to use Utils.MeasureAndPrint
Tests: ran noclip perf tests
Clean: fix stream of warnings from running AntiHackTests
Tests: ran noclip tests
Update(tests): added perf tests for IsSpeeding and AreSpeeding
AreSpeeding is slower at 50 players, but faster at 200 players (probably transient allocs).
Tests: ran unit tests
Clean: simplify TestNoClipConsistency unit test
Tests: ran updated unit test
Merge: from spectate_stay_after_dc
- Bugfix for disconnecting players staying standing with UsePlayerUpdateJobs 2
Tests: spectated disconnecting server
Bugfix: ServerOcclusionParallel(Jobs 2) - when spectator is hovering in a net group cell, use that cell's occlusion group
As the spectated player disconnected, we would stop populating the occlusion results cache, thus leaving spectator in a frozen-world state
Tests: on craggy with Jobs 2 - spectated a player that disconnected, was able to see them sleep. Did same from outside network range.
Bugfix: uncomment tickState caching
Left it commented because I thought it would help with unit test validation, but it's completelly unrelated to my unit tests.
Tests: on Craggy tried to sprint with UsePlayerUpdateJobs 0
Update(tests): cover all speedhack_protection levels in tests
Tests: ran unit tests
Update: expand isspeeding test coverage by generating index permutations
Revealed a bunch of false-positive access violations, fixed by sprinkling NativeDisableParallelForRestriction (hate it)
Tests: ran unit tests
Update: add a couple more test positions for unit tests
Tests: tests pass
Update: move normal calculation logic to HeightMapQueryStructure
- Give couple methods a rename
Tests: ran unit tests
Bugfix: basic arespeeding unit tests now pass
- use the right interpolators for IsSpeeding
- add overloads to TerrainHeightMap.GetNormalsIndirect and antihack specific jobs to accept deferred arrays
- make IsSpeeding work on CachedState
Tests: ran unit tests
Update: add basic consistency unit tests for AntiHack.IsSpeeding and AreSpeeding
Currently fail, as I forgot to adjust the IsSpeeding logic after state cache changes.
Tests: ran unit tests
Update: shifting job dependency downstream
Tests: none, trivial change
Update: added AntiHack.AreSpeeding - (almost) fully jobbified version of IsSpeeding
Only active with UsePlayerUpdateJobs 3. Needs unit tests, will do that later.
Tests: booted on craggy with UsePlayerUpdateJobs 3 and ran around.
Buildfix: type missmatch
Tests: editor compiles
Update: add BasePlayerJobs.CalcPlayerSpeedJob
Tests: none
Update: add ScatterValueToJob utility job
Tests: none
Update: add TerrainHeightMap.GetNormalsIndirect
Tests: none
Buildfix: fix up missed renames
Tests: unity compiles
Update: AntiHack now track it's own persistent cache of player states
- base player internals redirect to the cache when jobs 3 is set
Gets synced when player enters and leaves player cache (even if they're disconnecting). This allows us to change jobs level without mesing up player state.
Tests: none, WIP
Update: Gather more player state for Jobs3 work
- rewrite how we add to/remove from PlayerCache to add custom handling for specific systems (needed for AntiHack)
Tests: none
Merge: from optim_jobs2_builddepchains
- Optim: UsePlayerUpdateJobs2 - BuildDependencyChains is now 40%+ faster and scales better
Tests: unit tests, loaded into Craggy, loaded into 2.5k procgen
Update(tests): adding Perf_BuildSnapshotDependencyChains
Basic test churning throuhg 1 snapshot queue of 1k entities. Mostly shallow hierarchies are fast (20% parented -> 0.15ms), but dense hierarchies are slower(200% parented -> 0.6ms).
Tests: ran perf test
Update(tests): add BuildSnapshotDependencyChains unit tests
- DummyServer now automatically cleans up spawned entities in CleanTestState
Tests: ran unit tests
Clean: refactor some of unit tests
- take out DummyServer and move bot, player creation logic into it
- move out Measuring utils to it's own file
Tests: ran occlusiongroup tests, all pass
Optim: Jobs 2 - rewrite BuildSnapshotDependencyChains
- fix a bug that caused more snapshots to be sent than necessary (causing massive inflation)
- add a couple fast paths, rewrote it to be a single-pass algo
- reduced number of pooled lists usage
Need to write unit tests for this
Tests: with useplayerupdatejobs 2 set from start, loaded craggy and 2.5k procgen world in editor, visited ferry terminal - didn't see anything missing, npcs had weapons and were shooting
Merge: from serverprofiler_disable_memstates
- Update: added extra safety try-finally
Tests: none, trivial change
Update: missed an extra try-finally in perfsnapshot_stream
Tests: none, trivial change
Merge: from serverprofiler_disable_memstates
- Bugfix for running multiple capture commands without waiting for completion of initial
- Bugfix for memstats parsing exception (disabled memstats recording)
Tests: couple 128mb perfsnapshot_stream in editor
Bugfix: perfsnapshot/_stream - set exportDone to false when starting recording
- wrapped inner task logic into a try-finally to ensure exportDone latch is released
Well this is a derp up, the safety latch was in place for a year but never worked because I never engaged it. Whoops.
Tests: done perfsnapshot_stream 128mb as another one is exporting - no crash, got message
Update: ServerProfiler.Core - disable system memory tracking
- release binaries built from 25d14ef0
Its too unstable and overengineered, will rework later
Tests: perfsnapshot_stream 128mb of data - no system memory tracks in json
Merge: from tracespheres_optim
- Bugfix for exceptions when shooting
Tests: shot the ak on Craggy in editor
Bugfix: VerifyRays/Spheres - early out if passed empty command set
Fixes exceptions when shooting
Tests: shot ak on Craggy in editor
Merge: from fix_sortdeferred_race
- Bugfix for sorting of hits potentially running in a race with previously scheduled jobs
Tests: unit tests
Optim: merge count and sort jobs into one
Tests: unit tests
Bugfix: GamePhysics.SortDeferred - respect dependsOn handle param
Tests: ran unit tests - all pass
Merge: from spectate_stay_after_dc
- Update: when spectating a player that disconnects, the client starts orbiting their last position. Third-Person is the only valid camera mode in that situation
Tests: spectated a player that disconnected - was able to look around.