1,688 Commits over 427 Days - 0.16cph!
Bugfix: BufferList can handle sorting subrange
Tests: moved items around in inventory(future cl)
Merge: from growablegenes_allocs
- Remove allocs from GrowableGenes
Tests: local in editor, spawned a planter box, filled it with seeds while monitoring Profiler stream
Clean: remove profiling hack
Tests: none, trivial change
Update: avoid linq allocations in 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
Bugfix: Properly calculate grid dimensions for TreeManager
Fixes NRE caused by trees close to/outside of world bounds (modded)
Tests: throw away unit tests that sampled edge locations
Merge: from active_tooltip_nre
Logs to help track down mystery NREs.
Tests: booted into bootstrap scene
Update: reinforce Tooltip language changing logic
Instead of throwing an NRE report an error. I don't see how we can end up in this situation, but our logs show it can rarely happen.
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.
Clean: remove unnecessary usings
Tests: editor compiles in CLIENT+SERVER
Update: adding missing logic to BasePlayer.ServerUpdateParallel since the merge
- also fixed the formatting in a couple places
Tests: none, trivial changes
Bugfix: check if ignore grids (terrain, water) are present
- Covers cases in editor where they haven't been setup yet
Tests: ran unit tests
Bugfix: invalid indexing of water infos when player is parented to a water blocking entity
Tests: none, trivial change
Merge: from main
Tests: ran unit tests, played in editor with parallel update jobs enabled on Craggy - water was detected correctly
Bugfix: rename WaterVisibilityTrigger.Reset to ResetTrackedTriggers
Old name conflicted with Unity's scripting api and generated errors in editor(problematic for tests)
Tests: ran unit tests
Bugfix: fix GamePhysics batched queries bugs
- Was incorrectly indexing the array of results
- GetIgnore(Vec3, float) was using a swept sphere instead of sphere overlap (like original code)
Tests: ran unit tests - they now pass
Tests: Add missing layer for WaterVisibilityTrigger objects in WaterLevel tests
This now stressed the execution path for the submerged head in GetWaterInfo and shows I have a divergence. Will fix shortly.
Tests: ran all tests
Update: making PlayerCache a server-only utility
- Made some tests server only
It's an intrusive collection (requires an int field on BasePlayer), and we only add it for server version of player. For now there's no need to generalize it anyway.
Tests: compiled in editor
Bugfix: fix invalid index scrambling logic in tests
Turns out the tests were borked and generated duplicate indices, which is not something that batch logic can handle.
Tests: ran all unit tests
Bugfix: avoid trampling results when scattering out physics query results
- Also reduced size of temp allocations (they're still there, but it's the slow path anyway)
This is not the bug spotted by tests, but it would bite us in the back anyway.
Tests: none, as neither the demo nor tests cover this path (NYI)
Update: generate a sample grid for water tests & use WaterVisibilityTrigger
This stress tests a rare execution path. It revealed a divergence between serial and batched - will fix next
Tests: ran unit tests
Merge: from texttable_allocs
- Layout improvements and NRE fix for 0 rows
Tests: unit tests + running filtered status command to force 0 rows
Bugfix: fix serializing of empty tables
- Added a test to check for it
Tests: unit tests + ran status with a name filter to exlude myself - table and json printed correctly
Clean: rename RowType -> ValueType
Tests: ran all unit tests
Update: Don't pad last column
Tests: ran unit tests
Bugfix: Fix test table layout when there are not enough values compared to rows
- Added new unit tests to cover abnormal cases
Tests: ran unit tests
Update: standardized WaterVolume usage across tests
- Also fixed a couple small bugs in rarely used water perf tests
Got a couple TODOs left to clean, and will start merging back to main
Tests: ran all tests
Update: moved player caching to FinalizeTickParallel
Tests: ran unit tests and played back server staging demo twice - numbers match expected range
Update: add an extra profiling scope
Tests: ran the perf test
Merge: from texttable_allocs
- Fixing allocs in Server::playerlistpos
Tests: ran unit tests and stewed on Aux2 for a week
Merge: from main
Tests: ran unit tests for Rust.Global due to conflicts in the asmdef
Clean: general cleanup
- Removed dead code
- removed some TODOs that no longer apply
- more ReadOnly cases alongside NativeArray usage instead of spans
Tests: unit tests
Update: expand PerfSerialWaterFactor & PerfBatchWaterFactors with different pop counts
Covers various scenarios, from staging at 50pop to 10k for stress test. Also shows that we retain the 4x+ speedup across populations.
Tests: ran perf tests
Clean: last ReadOnly added
Tests: unit tests
Clean: the ReadOnly crusade is almost over
Tests: unit tests
Clean: moar ReadOnly
Tests: ran unit tests
Clean: a lil more ReadOnly
Tests: unit tests
Clean: more ReadOnly usage
Tests: ran unit tests
Optim: GetWaterFactors is converted to indirect style throughout
- Added an edge case to all tests to validate correct bounds operation(spotted a bug I recently added)
This is last optim I'll be pursuing - 10k points test now runs at ~6ms compared to 28ms serial mode. Next up is to add a couple more benchmarks and go through todo cleanup.
Tests: ran unit tests and played back staging demo twice
Update: Propagating indices to GetWaterLevels
- Updated TestWaterLevelsConsistency to validate various permutations
Tests: unit tests
Update: converting GetWaterLevels to indirect form
- Like previous CL, operates on an internal forward dummy range
- sprinkled ReadOnly accessors in prep for clean up
Time to start bridging the indices across the calls.
Tests: unit tests
Update: converting GetWaterInfos to indirect form
- Not propagating indirection params yet - running on dummy forward range
- Sprinkled ReadOnly usage in prep for cleanup
Tests: ran unit tests
Update: make GetWaterFactors internal NativeArrays persistent
Tests: unit tests
Optim: prepare params for WAterLevel.GetWaterInfos using a burst job
Helps shrink the managed loop, and gives us minor savings - about 0.5ms for 10k case. Also prepares us last indirect conversion.
Tests: ran unit tests
Tests:
Optim: GetWaterFactors now maintains a stable transform cache
- We now use a burst job to gather transform info for all players (ends up being fast enough to not care)
- Updated perf test to count for a "warmup" run, since we incrementally build the transform cache
Previous updates slowed down code from 9ms to 12ms, this optim brings us back to ~7ms for 10k cases and enables more optims
Tests: unit tests
Update: rewrite FinalizeTickParallel in indirect form
- GetWaterFactors interface adapted to take indices, but internals are still in gather->process->scatter
- Expanded TestWaterFactorsConsistency to cover for various indirection scenarios
This simplifies the internals of FinalizeTickParallel and allows for more Burst jobs, but also allows for conversion of GetWaterFactors in indirect mode and state caching.
Tests: unit tests + mul-tiple server demo playback (numbers within range)
Update: use PlayerCache for ServerUpdateParallel
Should enable us to optimize for data persistence - will attempt next CL.
Tests: played back staging server demo twice, got same analytics numbers
▊▄▆▇▉: ▉▋▄▅ ▋▆▊▆▋▅▅_▌▇▋█▆▋▍_▅▄▌
- ▉▅▇▋▍▄▉▅ ▉█▊▌▍▇▌, ▌▉▇▆▉█ ▊▍ ▇█▍█▄ ▊▍▄▅▆ ▋▄▊▊█▋▅ ▅▅▅▊▉▄
▇█▊█▅: ▊▌▉█, ▍▅▄▆▍▊█ █▊██▉▆