2,720 Commits over 669 Days - 0.17cph!
Optim: Arg.Args is now a StringView[]
Most of the code uses GetString to lazy alloc a string. BuildCommand is now 4 allocs/0.4KB per call
Tests: unit tests, booted into craggy and set a couple variables, tested crosshair clientvars
Optim: Arg.FullString is now a StringView
- updated CodeGenerator to support StringView params
- ran codegen
Saves an allocation(once I’m done with conversion). Currently at 12 allocs/0.85KB per call
Tests: booted into cragy, tried echo and say commands
Update: add StringView.Trim(char) overload
- add unit tests
Tests: ran unit tests
Optim: add StringView.SplitQuotesStrings overload
- Refactored logic to work on StringViews internally
Only has 1 alloc(StringView[]). Using it is blocked on whether I'll be able to convert Arg.Args field to StringView[] or not
Tests: none
Update: add StringView.EndsWith(StringView)
- added trivial unit test
Tests: ran unit tests
Merge: from pool_mt
- Bugfix: implemented missing Pool.Reset and ResetMaxCounterUsage
Tests: booted into craggy couple times with Skip Domain Reload active - no NYI exceptions
Bugfix: Implement Pool.Reset and ResetMaxUsageCounter
Tests: booted into craggy and stopped a couple times with Skip Domain Reload active
Update: add StringView.Trim
- added unit test
Tests: ran unit test
Update: implemented StringView.Replace
- added unit tests
Tests: ran unit test
Optim: SplitQuotesStrings - use pooled list internally
- also gave it a small clean, as it was a bit horrendous looking code
Saves us 3 allocs - down to 6 allocs, 0.25KB per call
Tests: unit tests
Optim: SplitQuotesStrings - replace regex usage with hand-rolled processing
Saves us 24 allocs per call - now 9 allocs, 0.5KB per call. As a bonus, looks to be 3-5x times faster
Tests: ran unit tests
Update(tests): more failing edge cases
Tests: ran unit tests, old logic passes
Update(tests): add a couple more trimming edge cases
Discovered during rewrite
Tests: ran unit tests
▄█▉▍▆▋▆ ▌▆█▌ ▄▌▌▆▄▍▌▇▊▉▆▆▍▄▄▇▌█▄▅▌▌█▊▄▌▄▇▊▋ ▊▊▋▍▅▇▋ ▅▆▉▌ ▉▊▍▋▆▉▌▆ ▇█▇▅▇▍▅ ▇▅▆▅▌█▋▌▍▊ █▍▌▋▊▊▆ █▇▇ ▅▉▍ ▋▇▆ ▅▆▇▆▉█▄▄▍ ▉▍▄▋▇▌ ▌▄▄▌ ▊▍▉▋▋▄
█▆▌▊▌▌▌ ▇▅▅ ▅▆▅▇▉█▉▆▇▆▇▄▄▊ ▍█ █▆▆▆▋▊ ██▇▄▄▇▅▄▄▇▅ ▊█▇▍▊▄▄██ ▌█▋ █▅▆▋█▇▊▅▌ ▇▉▌▊▄▉▇ ▅▄▆▆▄▍█▅▊█ ▌▅▅▌▇▋▍▋▌▌▌ ▊▋▊█
█▊█▆▍▅▍▇ ▌▇▊ ▋▋▇▅▅▊▍▆█▅▉▋▍▋ ▅▋▍▊▊▄▅▊
Merge: from serverocclusion_unittests_fixes
- Bugfix: NetworkVisibilityGrid.IsVisibleFrom didn't return consistent to GetVisibleFrom results
- Bugfix(tests): fix invalid setup of server occlusion visibility in select tests
Tests: ran unit tests
Merge: from pool_mt
- Optim: Pool is now cheaper to use in multithreaded context. Can revert to old pool with pool.usemutexpool 1 (default 0)
Tests: unit tests and played on Craggy in editor
Merge: from fuzzy_circularbuffer
Chosing this implementation
Update(tests): even more edge case unit tests
- escaped double quotes
- split escaped double quotes
Tests: ran tests
Update(tests): add a couple more edge case unit tests
- torn nested string
- single quotes nested
- torn single quote nested
- Added a whitespace to first nested string in all tests to validate trimming
Tests: ran unit tests
Add(tests): add StringExtensionTests
Currently only covers SplitQuotesStrings. Baseline allocs - 33allocs, 1.8KB
Tests: ran tests
Optim: fully remove function temporary
Saves 1 alloc (63 allocs, 3.9KB)
Tests: ran tests
Update(tests): add case or command with no args
Tests: ran unit tests
Optim: don't recreate temporary klass and function substrings, fetch the full name at the end
Saves 2 allocs (64 allocs, 4.2KB)
Tests: ran tests
Optim: skip lowercasing command class and function names
We rely on case-insensitivite comparator for map lookups - saves 2 allocs (66 allocs, 4.3KB)
Tests: ran unit and perf tests
Update(tests): also validate uppercase commands are resolved properly
Tests: ran unit tests
New(tests): add basic Facepunch.Console.CommandTests tests(3 unit, 1 perf)
Need it before I start optimizing out allocs
Tests: ran tests, they pass and show allocs (68 allocs, 4.4KB total for test string)
Bugfix: ensure UseMutexPool feature switch catches all pool calls
Now pools lazy-update their internal storage when toggling the feature switch - this makes sure calls are routed to the right pools
Tests: played on craggy, slapped breakpoints into Take and made sure no calls were made to fallback/new pool when new/fallback mode was set
Clean(tests): same for UpdateNetGroup
Tests: ran unit tests
Clean(tests): same for MovePlayer
Tests: ran unit tests
Clean(tests): UpdateSubs injectLastVis default to true now
Tests: ran unit tests
Bugfix(tests): sae for TestNew_KillSleeperAndReconnect
Tests: ran all ServerOcclusionGroupTests - they pass
Bugfix(tests): same fix for TestNew_KillSleeperAndReconnect
Tests: ran TestNew_KillSleeperAndReconnect
Bugfix(tests): properly setup player's last visibility state in TestNew_Reconnect
Tests: ran unit test - it passes
Bugfix: NetworkVisibilityGrid.IsVisibleFrom no longer reports visibility between hardcoded groups
Failed unit tests by making Limbo group visible from main grid cell
Tests: ran TestNew_MoveOther, no longer fails
Bugfix(tests): fix incorrect setup of TestNew_KillSleeper
We weren't injecting lastSeen records for other subscribers, which tripped up assertions
Tests: ran unit test
▊█▋▅█▅▌▅▋▄▇▆▌ █▄▆▄ ▍▅▉▆ ▆▍▊▆█▊▄▉▄▉▇▉▄█▄▆ ▉▅██▄▊▊▊▌▌▅▉▆ ▆▇▆▍▊█▉ ▅▌ ▍█▌▉▋█▄▊▌▄ ▄▍▉▌▋▅ ▆▉▆▍█▊▉▉▇▋▆ ▄▊█ ▍▉▅▋▅▍▊▉▍▅ ▉▅▍▅█▆▋▉▉▌█ ▌▆▅▇▇ ▍▆▅▍ ▆▄ ▄▇▄▉ ▌▋▊▋█▋ ▊▄▇▇▊▇▄▅▄▊█▋▍▅▆▄▇▌ ▍▇ ▇ ▄▍ ▉▅ ▉▅▍ █▍▌ ▋▇ ▋▆▆▋▄▊▊▆▄▌ ▊▉ ▆█▍▇▋▇▌▌▅▇ ▊▄▋▅▄▅▅ ▊▄▋ ▋█▆▌▍▆ ▇▆▆▅ ▆▅▇▄▌▅
Update: pool.usemutexpool convar (default 0) to optionally revert to original pool
- ran codegen(skipping protobuf due to mac weirdness)
Tests: booted into craggy and toggled the var. Checked pool capacities via pool.print_memory