506 Commits over 123 Days - 0.17cph!
New: Initial version of Save Viewer
It's very simplistic, but currently displays ID, prefab name, and parent ID (if exists). Allows to search by these and prefab name
Tests: loaded a test save from staging server (200k entities, 20mb), was able to interact and get data I wanted
Clean: simplify code in WhatUsesThis.ParsePrefab
Tests: none, trivial changes
Bugfix: WhatUsesThis - avoid duplciate results
It was possible that our recursive search would pick up the same references as AssetDatabase, so exclude those.
Tests: Asset used to return 5 results with 2 pairs of dupes - now it's 3 results with no dupes
Update: WhatUsesThis is now able to inspect prefabs recursively
It'll search for any GUIDs that are mentioned on any attached MonoBehaviors and cache them. Search is done in the background while database scan is ongoing - no perf degradation.
Tests: ran Rebuild then searched for the prefab that didn't report any results - now reports 6 hits
Update: pool.print_memory now allows to filter by T, case sensitie
Will be useful in narrowing down leaks in a more precise fashion
Tests: Ran the command with/without filter args
Merge: from /main/expand_ipooled
Tests: tested all modes in editor, built client and server binaries, tried 2p local multiplayer - coor loop was good.
Merge: from main
I've reached a good checkpoint, so prepping to merge back to staging
Tests: tested all modes in editor, built client and server binaries, tried 2p local multiplayer - coor loop was good.
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