2,780 Commits over 669 Days - 0.17cph!
Optim: cache RemoveCorpse invoke
Saves 3 allocs, 384b total
Tests: none, trivial change
Undo of previous change - since entities can only be demolished once, the change was useless (and wasted memory)
Optim: cache StopBeingDemolishable invoke
1 alloc/128b
Tests: none, trivial change
Optim: use static action in ServerBuildingManager.Split
Should save another 2 allocs/160b per building block
Tests: none, trivial change
Clean: tabs -> spaces, get rid of explicit generic args
Tests: none, trivial change
Optim: use static callback to avoid allocs in ServerBuildingManager.CheckMerge
Saves 2 allocs, 160b total
Tests: none, trivial change
Optim: get rid of LINQ in Planner.FindSocket
Saves 3 allocs/180b total
Tests: none, trivial change
Optim: cache UpdatedVisibleHolsteredItems invoke
Saves 1 alloc/128b
Tests: none, trivial change
Optim: avoid boxing allocs in Azure.LogResource
Weirdly Enum.ToString has 2 boxing allocs, totalling 48b.
Tests: none, trivial change
Clean: fixup formatting in BasePlayer.OnProjectileAttack
Tests: none, trivial change
▍ ▊▋▌▇▅▋ ▄▆▄█▍ ▄▊█ ▊▇▋▆▉ ▄▇▄▇ ▌▇▊ ▄ ▋▅▉▉▇▉▋▄▍▌█▉▋▍▍▉▅█ ▅▋ ▇█ ▅█▄▄ ▉ ▊▊█▄▍█▋▇▅ █▌▉█ ▍▇▊▉▆▋▋▅█ █▅ ▇▅▍▊▆▍▅▉ ▇▍ ▄█▉▌▉▄▍▉▋▄▇▍▋ ▋▄▋▊▅ ▇▆█▅▅▇▊ ▋▉▅▄▅▇
Optim: cache RemoveOldNoises invoke
Saves 1-2 allocs, 128b each
Tests: none, trivial changes
Optim: use pooling in BaseNetworkable::OnNetworkLimitStart
Saves us 3 allocs, 100b min
Tests: none, trivial change
Optim: cache action in PlayerLoot.MarkDirty
1 alloc/128b
Tests: none, trivial change
Optim: cache PlayerLoot.MarkDirty action creation
Saves 1 alloc/128b per container
Tests: none, trivial change
Optim: cache actions in TrainEngine.PlayerServerInput
Saves 2 actions, 128b per
Tests: none, trivial change
Optim: cache BasePlayer.ForceUpdateTriggersAction allocation
Saves a single 128b alloc
Tests: none, trivial change
Merge: from buildcommand_allocs
- Bugfix for enable_marker_teleport teleporting to wrong Z
Tests: unit tests + enable_marker_teleport
Optim: get rid of a string alloc in teleportpos
Forgot it when expanding string view compatibility
Tests: used enable_marker_teleport
Bugfix: fix invalid trimming in ToVector(StringView)
- StringView - add 2- and 3-char Trim overloads
- add a unit test
Tests: unit tests + enable_marker_teleport
Clean: add root-level *.slnx to plastic ignore list
Tests: plastic doesn't show it as a new file
Merge: from player_benchmark_improvements
- New: added PlayerModelBenchmark scene that tracks rendering cost of new player model
Tests: ran benchmark a couple times
Clean: remove UNITY_EDITOR ifdefs around logging
Tests: none, trivial change
Update: disable lightmap baking on scene load for PlayerModelBenchmark
Tests: deleted generated assets, reopened scene - no new lightdata
Update: add PlayerModelBenchmark scene to the build list
- also add it to recognized +autobench list
Tests: none, trivial change
Update: add PlayerModelBenchmarks cene shortcut to Scenes menu
Tests: compiles
Update: resave after unity 6 upgrade
Tests: ran benchmark
Merge: from player_benchmark_improvements
Clean: remove naked player bench from ClothingBenchmark
Superceded by PlayerModelBenchmark
Tests: none, trivial change
Bugfix: avoid NRE when no recorders are requested by a benchmark
Tests: ran ClothingBenchmark
Update: PlayerModelBenchmarkScene - record bone count of spamed player models
Tests: ran benchmark
Update: BenchmarkScene - add support for selecting which recorders to activate
- added Scripts and Physics recorders
- PlayerModelBenchmark uses only Rendering + Animation ones
Tests: ran benchmark with various category bitfields
Update: add "CPU Total Frame Time" recorder
Tests: ran baseline
Update: add mainthread-only Camera.Render recorder
Tests: ran baseline
Update: PlayerModelBenchmark - add baseline run (0 models)
- change bench naming convention
Tests: none, trivial changes
Clean: get rid of RecordSampleCount - it duplicates MaxNumberOfFrames
Tests: none, trivial change
Update: Allow benchmark to stop after enough samples accumulated
- converted PlayerModelBenchmarkScene to run till 1k sampels accumulated
- support accumulated sample wraparound (explains weird results I saw previously)
Tests: ran player benchmark
Update: Add PlayerModelBenchmarkScene.UseRandomAnims - spawns players with different model states
- add a run per lod level with anims (bringing total to 12)
In theory should break batching/reuse, but results are a bit too similar(editor overhead?)
Tests: ran the scene
Update: define player spawning via desired lod level rather than manually placing them
Code lifted from editor gives results that don't land on the LOD boundary, but it still fits in the lod level.
Tests: checked triangle counts for every lod level, it falls as expected for every stage
Bugfix: convert bench durations from 120frames to 1s
Seems to accumulate more data from ProfilingRecorders, but it's sample count doesn't follow linear extrapolation. Weird.
Tests: ran the bench scene
Update: rename Perf.PlayerModel scene into PlayerModelBenchmark
- Purged it of original setup, instead controlled by a script
New bench script spawns 100 nakeds at various LOD levels and measures rendering stats
Tests: ran benchmark scene
Update: format output by recoder's unit type
- updated recorder's idents to for easier parsing
- skip recorders that didn't accumulate any data
Tests: ran the scene in editor
Bugfix(editor): silence UIBlackoutOverlay.Get error when running benchmarks in editor
Tests: ran ClothingBenchmark in editor, no longer blasted by errors
Update: BenchmarkScene - add support to gather simple rendering and animation perf telemetry
- ClothingBenchmark uses it for normal standing pass
Tests: ran ClothingBenchmark, checked debug output
Merge: from jobs3_skip_preallocnetwrites
- Optim: Jobs 3 - move netwrite pooling to all threads
Tests: ran around craggy with Jobs 3