userDaniel Pcancel

2,521 Commits over 639 Days - 0.16cph!

Today
Merge: from hascloseconnections_fix - Bugfix for BaseNetworkable.HasCloseConnections and GetCloseConnections mot seeing outside of small layer Tests: ran unit tests
Today
Bugfix: ensure players are detected on the border of the network cell - expanded unit tests to cover these cases Tests: ran unit tests
Today
Merge: from main
Today
Bugfix: fix HasConnectionsClose & GetCloseConnections missing players in medium and large ranges - also add a unit test to validate Connections overload Tests: ran unit tests
Today
Bugfix(tests): adjust player spawn distance for TestNetworkRange.OutsideRange cases They can land on a boundary, making it more difficult to reason when working across small/medium/large layers Tests: ran the tests, same results
Today
Bugfix(tests): expand TestServer's network grid from 1k to 2k Previously it was too easy to accidentally setup an out-of-bounds scenario, leading to confusing test failures Tests: ran related tests, discovered couple tests are failing (unrelated to this change)
Today
New(tests): tests for BaseNetworkable.HasCloseConnections and GetCloseConnections - named cell sizes for various layers in NetworkVisibilityGrid Tests: ran tests, failing where expected
Today
Merge: from serverprofiler_recordscope_pause - Update: ServerProfiler recorder scopes can be paused/resumed (but needs more work on export side, looks bad) - Bugfixes for recorder scopes corrupting memory and breaking perfsnapshot Tests: unit tests + recorded a multiframe coro with recorder scope + perfsnapshots
Today
Merge: from main
Yesterday
Merge: from main
Yesterday
Update: add Pause/Resume to ScopeRecorder and SlowScopeRecorder Tests: tried them in throw-away code, works but exported result looks wonky and needs more work
Yesterday
Update: ServerProfiler - add ability to pause & resume active recorders - added couple unit tests - release binaries built from 61cba2fc Tests: ran unit tests
Yesterday
Bugfix: Simplify RecordContext memory management in ServerProfiler.Core - release binaries built from 39f0cfa4 Worst bug was that 2 threads sharing one recording buffer Tests: recorded a bunch of test coroutines (2 frames worth each) via RecordScope, then ran a perfsnapshot for 10 frames - no issues.
6 Days Ago
Update: ServerProfiler.Init now resets managed internal state - also added handle cleanup to ScopeRecorder and SlowScopeRecorder dispose, in case double-dispose gets called This reduces test boilerplate slightly (as scope recorders have a timeout) Tests: ran unit tests - they pass. still chasing native storage corruption
6 Days Ago
Bugfix: when exporting a snapshot from recorder scopes skip fast-forward logic to 0 callstack depth Tests: recorded coroutine, was able to see all 3 log calls (before yield, after 1st yield and before yield break). But something's corrupting memory for subsequent perfsnapshots
6 Days Ago
Merge: from serverprofiler_recordscope_pause Need it for experiments with profiling coroutines
6 Days Ago
Bugfix: prevent taking perfsnapshots if a recorder scope is currently active and vice versa - also fix recorder triggering NREs because it tries to run perfsnapshot code Tests: ran profiler scope spanning multiple frames. Checked output, it's not making sense, investigating deeper
6 Days Ago
Merge: from main
7 Days Ago
Bugfix: don't overwrite callstack depths for frame 0 with values for other frames when multiple frames are found Tests: ran Export2FramesTorn - it passes and looks correct-ish (same wrong offset as in Export2Frames)
7 Days Ago
Bugfix(tests): fix invalid test logic in ExportExtraEnd2Frames - renamed ExportExtraEnd2Frames to Export2FramesTorn - added Export2Frames (shows invalid frame start - this is new) Tests: ran unit tests, failures where expected
7 Days Ago
Merge: from networkgrid_iterationspeed_changes - Optim: lazy allocate internals of NetworkGroup to save memory (adam.k's findings) Tests: flew around on craggy, opened deep sea and entered-left, printed entity counts of deep sea, shot scientists in the distance
7 Days Ago
Update(tests): add ExportExtraEnd2Frames Test passes but looks incorrect Tests: ran unit tests
7 Days Ago
Bugfix: potentially support exporting profile of Recorder started inside a method and finished outside Need to write more tests to validate it works across frames - not confident about it. Tests: ran ExportExtraEnd - passes. ran all others - still valid
7 Days Ago
Update(tests): emit valid timestamps when running profile exporter tests Tests: confirmed seconds-scale ranges in perfetto
7 Days Ago
Bugfix: handle cases where main thread doesn't have any profiling marks Veeeeeeery unlikely event to happen, but should be supported Tests: ran ExportEmptyMainThread test - it now passes
7 Days Ago
New(tests): ProfileExporter unit tests Synthesizes basic profile streams and sees if it sucesfully exports them, without checking contents. Tests: ran tests, 2 fail. inspected some outputs of passing ones
8 Days Ago
Bugfix: protect network group networkables access since it's lazy initted now Tests: opened deepsea on craggy, ran `deepsea.printentitycount`, flew around craggy and open waters, entered and left deep sea, killed scientists from far away
8 Days Ago
Undo of 147532 - Subtract 147512, 147798, 147486, 147475 (networkgrid_iterationspeed_changes)
8 Days Ago
Merge: from main Will need to subtract some stuffs
8 Days Ago
Merge: from networkgrid_iterationspeed_changes - Bugfix: handle more cases of lazy-initted net group subscribers instead of NREing Tests: none, trivial changes
8 Days Ago
Bugfix: more null checks around lazy created subscribers - utilities in BaseNetworkable - BaseEntity.SignalBroadcast (in case npc shoots outside of players range) - TreeManager.OnTreeSpawned (in case they spawn on an empty server) Tests: none, trivial changes
8 Days Ago
Merge: from networkgrid_iterationspeed_changes - Bugfix: avoid NREs from accessing uninitialized subscribers for net groups Tests: booted into craggy with server occlusion and jobs 0, 1, 2, 3 modes
8 Days Ago
Bugfix: avoid NREs by skipping not yet initialized subscribers for the network group Tests: booted into craggy with server occlusion and jobs 0, 1, 2, 3 modes
8 Days Ago
Merge: from main
8 Days Ago
Merge: from serverprofiler_filters_april2026 - Update: remove a couple assemblies and utils from being recorded in snapshots to reduce overhead Tests: exported snapshot in Jobs 3 mode and inspected
8 Days Ago
Update: april batch of ServerProfile filters - Release binaries built from 8643e0d9 Excludes: websocket-sharp and UniTask assemblies, Facepunch.System's Deque and TimeSpanExt classes Tests: inspected snapshot from editor in jobs 3 mode
8 Days Ago
Merge: from connections_pool_leak_fix - Bugfix for leaking List<Connections> Tests: ran around on craggy and checked print_memory showed low max value
8 Days Ago
Bugfix: return List<Connection> to pool in SendNetworkUpdate_Position Submit on behalf of cipeaX, it's his find Tests: ran around on craggy, checked pool.print_memory - max stayed low
13 Days Ago
Merge: from projectileweaponmod_allocs - Optim: get rid of missed alloc in ProjectileWeaponMod aggregation calls Tests: inspected snapshot taken while shooting
13 Days Ago
Optim: avoid IEnumerable Enumerator allocation Not as generic, but saves an alloc Tests: took a snapshot while shooting
13 Days Ago
Merge: from buildingprivlidge_invoke_allocs - Optim: BuildingPrivlidge.AddDelayedUpdate caches it's invoke Tests: none, trivial change
13 Days Ago
Optim: cache invoking callback in BuildingPrivlidge.AddDelayedUpdate Tests: none, trivial change
13 Days Ago
Remerge of 147094 - Merge: from projectileweaponmod_allocs
13 Days Ago
Merge: from projectileweaponmod_allocs - Optim: removed allocations related to ProjectileWeaponMod.Sum/Mult/Min/Max/Avg and their callers Tests: used a modded AK to kill a scientist
13 Days Ago
Clean: ProjectileWeaponMod.Mult - use 1 as hardcoded default value They've been manually specified as 1 everywhere, seems a bit redundant Tests: compiles
13 Days Ago
Optim: cache all selectors that are used in mod value aggregations Tests: got shot by a scientist. killed them with a fully modded ak
13 Days Ago
Optim: reimplement projectile mod aggregators to be alloc free - added outstanding Avg, Min and Max helpers - all helpers are now generic, to support the 2 overloads we have - ripped out GetMods to avoid accidental reintroduction of allocs Still need to fix remaining dynamic callback creation Tests: got shot by a scientist
14 Days Ago
Clean: simplify ProjectileWeaponMod code - get rid of 0 as default arg - mini bugfix: hook up bypassModToggles in one of Sum overloads - added non-GC mul and sum, but not plugged in yet Tests: compiles
14 Days Ago
▉▉▋▄▋▅▌ ▉█▊█ ▌▊▆█▅▋▍▇▇▉▌▌▆▅▄▋▅▋▋▌▅▆▌▇▉▍▋▉▍▇ ▊▇█▄▆█ ▅▌▄ ▉▋▄▉ █▋▋█ ▍▋█▊▋▊ ▌▇▊▌▌▌▅▄█ ▇▍ ▍█▇▅▌▉▉▇ ▊▅▄ ▅▋▇▊▌█▌▌█▋▌▊▊▋▊▊▇▍▌▉▇▊▉▉▇▇▆ ▄▆▍▆▄▉▋▅▌█▆▄▋▅▉ ▌▆▅▋▋█ ▅▌ ▅█▌▉▊▉ ▅▌▆▉ ▆▋▊▉█▋ ▅▌▊▌▅▅▍▅▇ ▋▋▆▇▉▉▌▍
14 Days Ago
▄▆▄▌▇▆█▄ ▆▆▋▄▍▊▋ █▇▇▆▍█▉▋▍▄▇▌▉█▍█▍▌▌▄▉▄▄█▇▊▇ ▋▇▉█▅ ▅▋▌ █▇▆▇ ▆ █ ▉▄▌▍ █▌▉ ▇▌▌ ▆▅▊ ▆▇▆▍ ▍▇▅▋▇▇▊▆▊▌▉█▅▊▉▉▉▍▍▆█▍▋▋█▉▋ ▅▍▉▉█▅ ▇▇ ▍▅▋▆▋▅ ▋▋▍▄▍▊▅▋▊ ▅▆▇▄█▍▉ ▇▇▋▊ █▆▅▇▄▆ ▋▆▉▇▌▊▆▄▋ ▅▋ ▋▉▌▉█▇▇▆▅▅▌ ▇▇▌▇█▄▋█▊▊▍ ▊▍▍▅▆▆▉▅▍▋▌▌▉▌▍▅▍▍▋▅▍▄▍▍▆▉█ ▆▅▆▇ ▉ ▅▌▌▍▊▇▄▄▊▍ ▆▅▉▉ ▆▉ ▉▍▌▉▌▉ ▄▉▍▍ ▍▊▌▇▍▊▇▆▊▋▍▍▉▉▌▊█▍▌ ▋▇▊▆▍▊ ▆█▋ ▊▉▌ ▇▍▊█▇▆ ▇▄ ▉▋▆▌▉▉ ▉█▆▊ ▆▄▄▋▆▊ ▆█▍▊▋▅▉▊▄ ▍▊▄▌▅█▇▅▍ ▆▄▅▋▋▇▅ ▋▅▅ █▉▋▊ ▋▄ ▅▍▇▊▇▇▅ ▊▌▊ ▍▉▉▅ ▆