1,099 Commits over 274 Days - 0.17cph!
Update: TokenBucket implements IPooled
Tests: none, trivial changes
Update: Sliced-/GranularAudioClip.Grain now implement IPooled
Didn't realize there were extra similar types, added.
Tests: None, trivial changes
Update: Planner.Guide.Snapping implements IPooled
Another candidate for struct conversion - added it to the task.
Tests: tested with laser light snapping - still snaps
Update: SoundModulation.Modulator now implements IPooled
Ideally this should be a struct, since it's an 8byte object, but that would require to change too many places for now. Will create a separate task for this.
Tests: local session, ran around and shot - could hear steps, impact on different surfaces
Update: MusicManager.ClipPlaybackData now implements IPooled
Tests: booted in local session, no exceptions
Update: MusicClipLoader.LoadedAudioClip now implements IPooled
Tests: booted in local session, no exceptions
Updating: EngineAudioClip.Grain implements IPooled
Will need to explore further if it's dead script
Tests: None, trivial change
Merge: from main
Tests: none
Update: Replacing Pool.FreeUnsafe with Pool.Free where possible
Since more IPooled usage has been added, these were left untouched by accident.
Tests: none, trivial changes
Merge: from main
Tests: checked all modes build
Update: Network.Message implements IPooled
Technically, this should be converted to a struct instead, but the benefit/effort is not worth it right now.
Also marked a static as readonly, since we never modify it.
Tests: single client-server session was pumping messages succesfully. Built all modes. Tested recoridng and playback.
Update: WaterDynamics.InstanceBatch implements IPooled
Also removed a bit of dead code and unused functions.
Tests: checked that rowboat still produces foam
Update: PlayerReclaimEntry implements IPooled
Tests: tested in local multiplayer in softcore mode
Update: ImpostorBatch implements IPooled
Moved some code around and removed some always-true checks.
Tests: during local game hit all new functions in the right order
Update: convert PositionLerp to IPooled
Previously implemented as IDisposable, so this was a straighforward switch.
Tests: ran a local 2player game, forced the client to disconnect - confirmed EnterPool got called
Merge: from main
Tests: built all modes in editor
Update: fixing invalid namespace reference
Tests: none, trivial change
Clean: Removing other TMP hidden warnings
Turns out I added an extra csc file that I missed today.
Tests: none, trivial changes
Update: fixing depr warnings in TMP
Originally I excluded it from fixes as it was an external package, but it has a couple of our fixes already.
Tests: none, trivial changes
Update: Review feedback
Avoid creating a struct when fetching state of ParticleSystem
Tests: none, trivial change
Merge: from main
Tests: Build all modes
Merge: from /main/pool_reduce_freeunsafe
Tests: tested on feature branch with build tests
Update: Replace Pool.FreeUnsafe with Free
No funcitonal change, just reducing work in the future. Also updated relevant binary.
Tests: Build a win64 client locally and built all modes in editor.
Merge: from main
Tests: none
Buildfix: updating stale DLL
Tests: built all modes
Update: Fixing obsolete FreeList usage
Tests: none, trivial change
Update: Consolidating Facepunch.System.Tests
- Cleaned up a bunch of bogus using statements
Tests: Ran combined unit tests - they pass.
Merge: from main
Tests: ran around, gathered, shot, built
Merge: from /main/experiment_reduce_gc_server_refresh
Tests: ran new unit tests, checked Server Browser work
Merge: from main
Tests: ran new unit tests, checked ServerBrowser
Update: StringView gains index and range support
Added tests to cover new functionality. Added more checks for Substring operations
Tests: ran new unit tests, checked ServerBrowser
Update: StringView - prefer ctor overloads instead of default args
Saves a couple branches in some scenarios.
- Also expanded tests to cover all ctors and arg ranges
Tests: Ran new unit tests and checked server browser
Clean: Updating the docs of StringView to compare against Memory
Turns out I missed System.memory during my initial research, which serves a very similar purpose. Sadly, it doesn't cover all our use cases, so we still need StringView - I've mentioned these shortcomings in the xml doc.
Tests: none, trivial change
Update: Finalizing StringView
- StringView's constructor now follow's Span form (source, start, len) instead of (source, start, end). Fixed updated unit tests.
- Reimplemented CompareIgnoreCase via EqualityComparer<T> instead of IEqualityComparer<T> as per MS recommendation.
- Annotated every public method with xml docs
Test: ran unit tests - all green. Checked ServerBrowser - still good.
Update: Expanding HashEquality test for StringView
To confirm that the required interface is implemented correctly and gets invoked.
Tests: Ran the updated unit test
Merge: from main
Tests: built all modes. Server Browser still works
Update: Reimplement tag support in server browser
Fixes the break I left when running the experiment with StringView
Tests: Clicked through server browser's various filter options
Buildfix: Reimplement deleted overload call from last CL
Also reduced number of hashset allocations when tags are empty.
Tests: Went to server browser to check Nexuses
Merge: from main
Tests: Built all modes
Update: Nuking the allocating StringView.Split
There's a non-allocating overload already present, so going to keep it default to help keep the 0-allocations approach.
Tests: none, trivial changes
Add: unit tests for StringView and it's ignore case comparator
I'll need to merge this Tests assembly with the one in unify_pool_free branch once it's merged (which-ever one goes in first)
Tests: ran them - they pass
Update: Further rounding up StringView
- Added ToString() (makes debugging much nicer too)
- Fixed up wrong exception types
- Added Length property
Tests: ran new unit tests(next cl) for StringView, they pass
Merge: from main
Tests: built all modes, built small house, cut a tree
Update: Replacing new occurances of obsolete Pool API with new
Tests: built all configs
Merge: from main
Also contains updated codegen binaries to conform with new API
Tests: built all modes
Clean: use a cast instead of new expr
Also dead static removal
Tests: none, trivial change
Optim: StringView.Split can use user provided temp storage
ServerInfo uses a pooled list to as a go-between the StringView and HashSet. This provides last noticeable change that reduces an allocation per ctor, with average going down by 1.3 (8.31 -> 7).
Also reinforced empty tags to not allocate a new empty set everytime.
Tests: checked ServerBrowser - tags still recognized.
Optim: Replacing ServerInfo.Region with StringView instead of string
Avoids another optional allocation, avg count went down by 0.6 (8.95 -> 8.31). This looks like mostly it for clear&easy wins.
Tests: Checked server browser, it displayed region tags
Update: Add ServerInfo.Protocol enum
Avoids us creating a string to track which protocol to use. On average, saves about 0.6allocs (9.56 -> 8.95). We already have a similar enum on the game level, but this has the "Default" member.
Tests: none, trivial change
Optim: further reduce allocs for ServerInfo
Couple easy wins - Changeset is unused so removed, construct ConnectionString on demand, avoid identifying tags if already identified.
Should've removed 2allocs per ctor, but data shows reduction by 3allocs on average(12.94 -> 9.56).
Tests: None, trivial changes