2,428 Commits over 608 Days - 0.17cph!
▄ ▄▄▆▍▇▇▌ ▆▄▋▌▊ ▊▇▌▅▉█▉ ▉▊▄▅▌▍█▆ ▊▉▇▌ ▉▋▅▉▋ ▅▋▍▄▆▆▊ ▌█▆▇▍▌█▆▋▇▄ █▍▍ ▇▍▍▄▅▋▋▌▇▍▉▌▄ ▍▋█ ▉▇▇█▆█▊ ▄▇▋▄
Clean: consolidate some work buffers
Tests: ran staging demo
▊ ▉▋▍▇▆▌▆ █▊▄█▌ ▇▄█ ▋▇███ ▄██ ▄▌▍▅▍▅▍ ▊▌▌▉ ▌█ ▉▅▌▄▇▍▆▇▅▍▋▅▋▍▋▇▇▆▊▄▆▌█▇ ▋▇▇ ▋ █▉▄▌▆ ▍▅ ▆▉ █▄▅▆▅ ▍▌▅▍▅ ▅▅▆ █▉▌ ▋▆▊▊█▇ ▄▊█ ▌▉▌▍ ▍▋▋▉▋▍▆▉▌ ▅▍▊ ▆▋▅▅▉▅ ▅█▍▉▋█▉▅▄▍█▋ ▆▇▍▆▄█ ▇▊██ ▇▇▍▅▋▄▆ ▉▌█▍ ▋ ██▍ █▄▆▍▊▍▆▄▄▌ ▉▊▍▋▋▋▌▊▊▅
▍ ▍█▍▆█▌▋ ▆▇█▇▊▋▋ ▌▍▋▅▄ ▆▌▍▇▅▄▅▉█▌▉▆▆▉▇█▄ █▉▋▅▌▋▅▉▆▍▊▆▉▌ ▊▌▉█▅▍▅ ▌▆▆▆ ▇█▋ ▅▅▅▇▇▌▉▅█▌▇ ▄▋▋▍▅▉▆▌ ▍▍█▊▅▆ █▍▊▇█▌▉ ▇██▄ ▋▇▍▋▇█▇▋ ▅▄ ▆▇▌▄▊▄██ ▌▋▉▍▄ ▌▍▍▋▍ ▍▋▋▇▇▍▇▆▆▅▉█ ▄▍▄ ▅▆▉▋▇ ▋▌▅▌▊▊▉▌▆▅▌█ ▊▇▋▇▇▌ ▄▌▋█ ▋▆▌▇▊▉▌ ▍▊▇▅ █ ▅▄▉▌▊▊█▉▍▅ ▇▅▋ ▊▅▋▋ ▇▉▌▊▇▅▌▍ ▆▍▍
▄ ▇▅▍▊▌▇▆ ▍▇█▉▊ ▌█▍▍▍▊▊▊▅▋▋▇▌▌▋▅▉ ▉▆▉▅ ▋▊▆█▇▍▉▊ ▍▄▉██▇█▄▊ ▄▄▊▊▌ ▊ █▊▌▍▉▄▇▋▅▍▉▄ ▌▊█ ▊▋▄▄▆▋▅▌▇▉▇▅▌█ ▆▌█▌▄▌▌█▍▄ ▉▉▆▇ █▍▆▉▇▆ █▆▊▉▊▍▇▋██▅▌▉▆▍▄▄ ▅▌▌ ▊▅▋▄█▋ █▋ ▇█▆▋▋▊ ▄▍▆▍ ▆▄█▄▄ ▉▌▋▄▄█▇▌▄▋█▉▆ ▉▉▄ ▌█▉█▍▆█▄▌ ▆▄▌▄▍▋ ▇▉▅▆▅▋ ▋ ▇▇▍▉▅▄ ▇▄▋█ ▊▌▇▊▌▊▄ ▆█▊▅
Update: merge NativeList.Expand and NativeList.ExpandAndClear
- Rewrote the Expand branching logic to be simpler
Realized that Expand(false) always leads to a Clear - so there's no point in having ExpandAndClear
Update: Add NativeList.ExpandAndClear
- also fixed invalid check in NativeList.Expand that was comparing against list length instead of capacity, potentially causing more reallocs than necessary
Tests: none, trivial change
Clean: variable rename
Tests: none, trivial change
▄ ▇▌▇▅█▄▄ ▉▇▊▋▇▍▄▉ ▆▍▅▄█▊▆▉▇▊▋▋▋ █▊▄▉ ▌▊▊▄ ▋▉ ▊▍▄▆▊▄█▅▌█▌ ▍▊▅▍▅▇▅▇▄█▊▇▆▄▋▊▅▉▇█ █▉▇█ ▄█▇▉▉▌▉▌▇▌█▍ ▌▊▊▆ █▋▋▄▄ ▊▋▅▌█▆ ▉ ▉▄█ █▆▊▌▋▄▉ ▌▅▍▌▍ ▇▊ ▌▋▉ ▍▄▍▊▋▆ ██▊▅▋▄▉▍▆▇█▍ ▊▅▋▌▅▌ ▍▊▅▆ ▊▇▉▄▊▋▉ ▉▄▋▋
▌ ▄▆▉▉█▉▄ ▉█▋█▌ ▋█▉▍▍▍▍▇ ▊ ▌▋▉▉▌ ▌▉▄▊▌▇ ▊▌▆█▇▅▅▌▌▊▋▌██▋▊▌▄▄▇ ▇▉▅▅▉▄▄ ▉▊█▉ ▋ ▌▅▆▍▅ ▄▉▋ ▋▅▉▍ ▅▍▅▄ ▅ ▅▋▍▊▉▄ ▄▊▅▍▆▅ ▉ ▅▇▅▍ ▍▆▅▌█▋█ ▆▉▅ ▄▆▄▉▍▍█ ▉▋▉▅▆▄▆▆▄▅▇▉ ▆▍▆▌▅▍ ▌▍▆▊ ▍█▇▄▌▍█ ▄▇▆▆
▌ ▌▊▅▄▄▄█ ▍▊▆▄█▌▋ █▄▍▇▋▊█▆ ██ ▄▌▌▋▅▌▇▍▄▉▇▄▄ ▉▆▊▍ ▊▇▋▍▆█▊▄▊▉▄ ▄▇▇▉▅▊▄▆▆▋ ▌▋▌▅▇▇▇▇▄▇▅▅▊ ▌▍▊▉▋▇ ▅▋ █▇ ▆▌▊▅▌ ▌▇▉▍█▆▌ ▉▌▋▌▄▆▊▉▆▍▍▋▉▊▉▅▇▌▄▄▇█▊▆▊ ▆▉█▋▋▅ ▋▇▄▇ ▌▌▌▇▍▄▍ ▅▇▍▍ ▊ ▆▇▆▆▄▇▆ █▄▆█ ▅▌▊▆▌█▋▆█▉
Bugfix: NativeList.Expand now properly clean us old list
Tests: none, trivial change
▅ ▄▊▋█▌▊ █▆▊▅▊▌ ▆▋▊█▇▉▅▊▅▆▍▉▋▄▆█▍ ▌█ ▌ ▇▄▄▆▉█▅▊▊▉ ▍▍█ ▄▍▊▄▅ ▄▆▍ ▇▄▌▊ ▅▋ ▌█▍▇ ▌▋▌▉▆▊ █▍▌▇▉▍ ▊▆▄▄▊▄▉▇▌▋▅ ▍▍▍▆▉ ▇▊▇▆▊▅▅ ▆▊▉▋▍▊
▊ ▋▍▉▄▍▆▍ ▅▆█▌▅▋▄▄▄▋▉▋█ ▌ ▄▊█▄▅ ▉▅▅█▅█▆ ▊▄ ▇▌▆▊▌▇▍▌█▊▋▍▉▍▄ ▉▉▋▅▋▊▇ ▄▍▌▊ ▋▍▌▆█▌▄▄▊▅█▍▌▅▍▆▅▌▇▆▄▆▅▌▊▋▅▍▇▄▌▇▋▆ ▊▍▄▅ ▅▌▍▉▆ ▌▅▊ ▌▄▌█▅▆▊▊ ▉ █▌▍▉ ▋▋▅ ▋▊ ▇▅▅▊ █▄▅▍▊ █▇█▍▆▋▄▍▄▄▌ ▌▉▊▅▊▅▄▄▊█▅▋▌▊█▄▉▅▉▌▆▅ ▊▅▆▅▉▊ ▆▉▋▊ ▄▌▋▌█▍▍ ▇▍▄▇ ▅ ▇▉▊ ▇▋▊▉▋█▆▉ ▋▌█▍▉▊█ ▌▄ ▊█▋▍▍▊ ▉▉▆▆▌▅▋█▌▋
Update: TickInterpolatorCache exposes state via ReadOnly property
- Reroute all accessors and logic via static methods that take in ReadOnlyState
This enables to pass entire TickInterpolatorCache into a burst job
Tests: ran unit tests
Update: mark a bunch of BasePlayer functions as static
Makes it easier to build Burst jobs
Tests: editor compiles
▍ ▋▍▍█▄▅▆ █▉▄▆▌ ▇▍▋ ▍▄▊ ██▌▌▊█▄▆▍ ▋▍▊▉▍▋▋▌ ▍█▌█▅▊▅▊▄ ▊▄▋▊▄█▅▊ ▉▉▅▍ ▇▉ ▇▌▅▉ █▌▉ ▇▅▉▅▌▉▆▆▇▌▊▆▊ ▋▄▉▇▊▉ ▉▍▇▅ ▊▍▉ ▌█▊▍▅▊▋ █▇▍▅
▆ ▋▅█▇▍▄▊ ▉▍▍▋▄ ▋▄▇ ▄▋█▋▉▄▋▆▋ ▉▆▊▋▇▄▊▅ ▉▇▉▅ ▊▊█▋▋▅▌▇▉▊ ▊▍▅▉▍▉▅▅▆▄▌▋▋ ▋▇▍▆▌▆ ▊█▇▉ ▆▇▅▄▍▌▍ ▌▌▆▌
▋ ▌▄▌▍▆▊▅ ▆▌▋█▍▅▍█▋ ▌▇▉ ▅▇▆▅█▊▊▋▍ ▍▍▌▍█▆▇▊ ▊▄▋ █▌█▉▋▌ ▊▉▊▋▆▊▇▉▉▇▊▌█▇ ▊▌▆ ▆▌▌▉▉▌▉ ▌▅▋▊ ▅▆▍▊█▉▍▄
▉ ▉█▅▇▆▄▅ ▆▌▌ ▅█▍▇▉▇▍ ▅█▄▇ ▌▇ ▊▉▋▌ ▋█▄▋▊▆ █▄▄▅▋ ▅▆▊▌▊▉▌▍█▌▊▇▄▉▍▍▅▊▄█▌▉▆█▋ ▌▄█▆
Update: Split various tick validation functions into smaller loops
- Added a couple small extension utils to NativeList
This helps isolate code that we'll be able to run as Burst jobs - there's a bit more to split
Tests: Staging demo playback - got comparable results
Update: Adding last missing API - TickInterpolatorCache.TransformEntries
- added tests to cover it
Tests: ran unit tests
Update: Adding TickInterpolatorCache.PlayerTickIterator to help with code migration
- Expanded unit tests to cover the new util and a couple more code paths
Tests: none. Tests are currently failing as I uncovered a different issue - will fix in next CL
Optim: TickInterpolator.TestConsistency - Replace Assert.IsTrue with AssertTrue wrapper that doesn't allocate
- Sprinkled some scopes for future
Speeds up the unit test 20x times and avoids 3.6GB of garbage
Tests: ran the unit tests
Bugfix: avoid writes past the end of the buffer
Tests: ran unit tests
Update: Integrate TickInterpolatorCache into the server flow
Tests: played back staging demo, once with it enabled from start, another with disabling-enabling it multiple times during playback. Both cases had comparable telemetry numbers
Tests: Add more edge case testing
- Testing 1 tick only
- Testing up to capacity ticks
Tests: ran unit tests
Bugfix: TickInterpolatorCache now properly handles "Reset" position
- Fixed unit tests
Tests: ran unit tests - all tests now pass
Tests: validate PlayerTickIterator in it's initial state
Tests: ran unit tests
Clean: add a comment
Tests: none, trivial change
Update: translate ValidateMove to batched ValidateMoves
Internally it's the same logic for now, as I've yet to properly intergrate TickInterpolatorCache and need to convert a lot of internal methods
Tests: played back staging demo - got same numbers and no new errors
Update: made some caches stable across frames
Tests: played back staging demo - no new errors and stats match expected
Clean: simplify call
Tests: none, trivial change
Merge: from parallel_validatemove
Tests: none
Merge: from parallel_validatemove
- bugfix for invalid transforms in the cache - fallout from previous bugfix
Tests: played back staging demo - counts as expected and no more errors about transform cache inconsistency
Bugfix: fix transform cache rebuild loop
Previously threw away dirty indices too early, missing on some player cache changes
Tests: played back the staging demo - no more error logs about transfomr cache inconsistency
Update: consolidate debug logic
- Also ValidatePlayerCache fixed to actually check for native-null players
I'm hoping I won't need this after tomorrow, but keeping it fixed to use for testing on staging for a bit
Tests: ran through the staging demo - notifced it's picking up an issue from the prev merge, will fix shortly
Merge: from parallel_validatemove
Tests: none, no conflicts
Merge: from parallel_validatemove
- Bugfix for null players in PlayerCache causing UsePlayerUpdateJobs to get disabled
Tests: played back staging demo - got similar results
Clean: fixing broken whitespaces that I spotted with the merge
Tests: none, trivial change
Merge: from main
Tests: none, no conflicts
Bugfix: PlayerCache now tracks players that are removed from the server
Original impl left a space where it could miss some of the players, leading to rogue nulls.
Tests: played back staging demo - had same numbers
Merge: from parallel_validatemove
Tests: none (resolved into dest version)
Update: adapted code to PlayerCache change
- FinalizeTickParallel now uses `player.StableIndex` as indirection, instead of iterator index
- Updated validation checks
- Transform caching job now checks for invalid transform accessses
Tests: ran all relevant unit tests, played back staging demo - got comparable numbers
Merge: from parallel_validatemove
- fixing one of validation checks silently passing
Tests: none, trivial change
Bugfix: one of validation checks was doing nothing
Tests: none, trivial change
Merge: from parallel_validatemove
Tests: none, no conflicts
Clean: Lenght -> Length
Tests: compiles in editor
Merge: from parallel_validatemove
- Removing extra logging
Tests: built server locally
Clean: removing BasePlayer OnDisable/-Destroy logs for UsePlayerUpdateJobs
Got confirmation that it's not Unity nuking the objects, so something else must be afoot.
Tests: built server locally