userDaniel Pcancel

2,126 Commits over 549 Days - 0.16cph!

Today
Merge: from playerinventory_oncycle_optim - Optim: iterate over cached items with OnCycle callback (instead of searching for them every time). Tests: ran unit tests
Today
Optim: ItemContainer.OnCycle now uses cached list of items with a callback - added a perf test of 300 containers with ~10% items with OnCycle callback Goes from 0.179 ms down to 0.074ms(-58%) for 300 player inventories. Real world server's invoke times are 0.97ms for 171 inventories, so might need to move it out of invokes later. Tests: ran unit test
Today
Tests: add ItemContainer.TestOnCycle test Tests: ran unit tests
Today
Merge: from useplayertasks_removegroupoccludee_nre - Optim: rewrote how we manage occlusion groups to reduce their overall number and added pooling - Bugfix: UsePlayerUpdateJobs 2 - no longer send extra snapshots when players move across network grid Tests: 2p on Craggy - tested all occlusion interactions(fly away-back, hide behind terrain, use helicopter). Tested moving across grid with disconnecting 2nd player and killing them, validated occlusion groups. Monitored pooling via print_memory ListHashSet
Today
Bugfix: when player disconnects, ensure we destroy relevant occlusion groups - destroy local group if no local participants present - remove destroyed participant from other occlusion group member's groups Tests: 2p on Craggy in different cells - get 2nd player to disconnect, then kill sleepers. 1st player walks into the cell - no more NREs. Ran usual occlusion checks (fly away and back, hide behind terrain)
Yesterday
Optim: use pooling for occlusion groups - prealloc 2k groups in the pool (1 per player and sleeper) Tests: 2p on Craggy - nocliping across various grid cells and checking print_memory stats
Yesterday
Optim: ServerOcclsuion - rewrite how we track occlusion groups - also fixes server occlusion bug which sends out more snapshots than necessary Previously every network group in subscription range of player would create an occlusion group. Now, only occlusion-enabled entities populate their local cells (and their subscriber's local cells) - se get activeplayer+sleepers count max of occlusion groups. Tests: both in UsePlayerUpdateJobs 0 and 2, 2 players on Craggy - ran around across network cells, flew outside of network range, used minicopter to fly into network range, checked sleeper is visible, checked kills clean up internal state. Player got occluded over terrain.
Yesterday
Merge: from triggerparentdelayedexit_optim - Nothing, this just fixes merge history to avoid showing it as a non-merged branch Tests: none, no files changed
Yesterday
Merge: from main
3 Days Ago
Merge: from useplayertasks_invisplayers - Bugfix for invisible player in helis/other vehicles with UsePlayerUpdateJobs 2 Tests: 2p on Craggy, flew heli to player outside of network range 5 times - player was visible
3 Days Ago
Bugfix: UsePlayerUpdateJobs 2 - when player leaves occlusion group, clean up last visibility timestamps - fixed whitespacing after merging messing it up in one of the files This caused negative feedback loop. If EntityQueue doesn't send snapshot during network subscription change (because of OcclusionFrameCache), the ServerOcclusion should send it, but having an expired visibility timestamp meant it didn't send the snapshot (expired == previously visible, so snapshot already sent). Tests: on Craggy with UsePlayerUpdateJobs 2 flew 2 players outside of network range, then made 2nd player fly in a minicopter to the 1st - was visible. Repeated this flight test 5 times - all passed.
3 Days Ago
▅ ▉▆▍█▄▄▊▇▇ ▋▊▉▉▄▊▍ ▉▅▌ ▍▇▋ ▊▍█▉▆▅▊█ ▍▉▍▅ ▅█▌▊ ▆█▇▅▋▉▋▄ █▄▆ ▅▉█▍█▌▋▊▄▄█▌█▊▌▌▄▉█▌ ▅▅▌▍█▊▅▄▄ ▆█▅ ▆▍█▍█▊▉ ▆▇ ▌▋▊▌▊ ▌▉▍ ▋▊█▄▅ ▅▍▋▉ ▉▋ ▋ ▋▉ ▋▊▆▊▉ ▅▍██▍▅█▇▇▅▄▌▋▉ ▅▇ ▉▍ ▄▄▋█ ▆▌ ▄▋▉▊▆▄▄ ▉▄▆▇▍▆▆▉▌▋▌▊▉█ ▊▍▅▊▆ ▆▊▅▉▋▊▋ ▉▇▅▊▌▄ ▇▅▉▌▉▅▅
3 Days Ago
Merge: from triggerparentdelayedexit_optim - Optim: new TriggerParent volume processing mode, controlled by TriggerParent.TickMode (default to 1, old mode is 0). TickMode 1-specific optims controlled by UsePlayerV2Shortcuts and AllowTriggerSleeping switches (both enabled by default) Tests: built boats, sank them while on them, spawned 100 boats with sleepers both with TickMode 0 and 1
3 Days Ago
Update: set TriggerParent.TickMode to 1 by default - codegen Tests: booted up craggy in editor, checked that it's set to 1 and called at boot
3 Days Ago
Merge: from main Tests: compiles
3 Days Ago
Merge: from main Tests: compiles
3 Days Ago
Clean: remove TriggerParentDelayedExit.allow_tick_skipping support - codegen Originally was an optim, but discovered that I had a bug that always stayed disabled. If we need it, I'll reimplement it for TickMode 1 Tests: compiles
3 Days Ago
Update: Tickmode 1 - add allowtriggersleeping optim killswitch - codegen Tests: built a boat, set tickmode 1, checked in profiler what runs. set AllowTriggerSleeping 0, checked profiler - it started running queries
3 Days Ago
Optim: TickMode 1 - allow triggers to sleep if they don't move on specific axis and internal entities also don't move on specific axis - took out internals of BaseEntity.HasMovedInLS to BaseEntity.ComparePos(Vec3 from, to) - Player Boats now set interest in XZ when alive, XYZ when sinking - Buildfix for SERVER only code (whoops) This brings 100 boat test to 0.25ms (down from 1.6ms, -85%), or down from 3.1ms, -92% from TickMode 0 Tests: built a boat, set tickmode 1, jumped on and off - got unparented. turned on the engine, jumped off - got unparented once in the water. noclipped above with engine on - got unparented after a delay. Spawned 100 boats.
4 Days Ago
Update: BaseEntity now remember it's last LS position and can report on which axis it has moved - added unit test for it Needed for upcoming parent trigger optim Tests: ran unit test
4 Days Ago
Optim: reduce branching in BaseEntity.HasEntityInParents Saves a tiny amount (60micros for 600 checks), but the change is relatively trivial and is used in a bunch of places Tests: spawned 100 boats with 3 sleepers
4 Days Ago
▇ ▍▇▋▆▇▉ ▌█▅▉▍▌▅▍▅▌ ▌ ▍▅▆▍ ▅▆▄▆▊▊ ▌▆▆▄▍▅▋▋ ▉▆▊▊▆▊ ▋▍▌▋ ▇█▅ ▋▋▉▆ ▊▋ ▇▋▅▋▄▊▍▍▆▍▉▍▊ █▅▉▉▆▆ ▌▊▅▆▇▆▍▆█ ▅█▊▌▇▇▇▄█ ▉▊▍▇▋▉▍▆ ▋▊▄▄▆▅▇▍▋▅▅█ ▋█▄██▌▋▆ ▊▊ ▆▄ ▄▄▄▊▆▉▌▊▆▄█▆▅█▌▇▇▍ ▉▆▅▉▋ ▄ ▉▉▌▌ ▌▊▊ ▅▇▍▍ ▆▅ ▊▊▆▆ ▉ ▆▊▍ ▌▆ ▄▄█▍▋▄▄ ▍▉▇▍▅▋▊▍▌▉
4 Days Ago
Optim: TriggreParent.TickMode 1 - batch swimming checks 100 boats now take 1.6ms max (down from previous 2.1ms, -24%) vs 3.1ms (-49%) of TickMode 0. Tests: built a boat, sank it by shooting, got unparented
4 Days Ago
Update: expose StableObjectCache internal T[] - had to introduce approx equals to WaterInfo as unit tests were failing (why now?) - consolidated common logic to fix missing shoreline check in batched version (we need unit tests as part of builds) Need it to simplify code around water factor batching Tests: unit tests
21 Days Ago
Update: adding a TODO to enable minor logic caching Tests: none, trivial change
21 Days Ago
Merge: from main
21 Days Ago
Merge: from triggerparentdelayedexit_optim - Bugfix: added missing check in tickmode 1 - Bugfix: fixed TriggerParentDelayedExit cleanup logic disabling it's effects - New: paste_line command Tests: built a wonky ship with tickmode 1, jumped over it's gaps
21 Days Ago
Update: TriggerParentDelayedExit cleanup logic only runs when trigger is disabled We always ran cleanup when OnEmpty got invoked, even if decided to delay the exit, which disabled delay functionality Tests: built a wonky ship and jumped around gaps - parenting was in effect long enough
21 Days Ago
Bugfix: TickMode 1 - add missing overrideOtherTriggers check Tests: none, trivial change
21 Days Ago
Update: remove dead vars and cache == null check Tests: none, trivial change
21 Days Ago
Update: add paste_line <name> [count = 1] [offset = 1] - will spawn the clipboard in a line using player's facing with offset-sized spacing - also if pasting players, make sure they run their ForceTriggerUpdate - codegen Tests: spawned a 100 boats in a line
22 Days Ago
Merge: from main
22 Days Ago
Bugfix: TriggerParentDelayedExit::SupportsTickSkipping was always evaluating to false - switched it to be off by default, as it was likely off during my earlier testing Tests: none, trivial change
22 Days Ago
Merge: from main
22 Days Ago
Merge: from triggerparentdelayedexit_teleport_fix - Bugfix: teleporting from a player boat should no longer cause weird parenting issues Tests: built a boat, teleported away - no weird movement afterwards
22 Days Ago
Bugfix: don't try to delay unparenting when teleporting away from the boat Tests: built a small boat, spawned a player on it, turned on the engine, teleported away - didn't have the weird extra movement
23 Days Ago
Merge: from analytics_std_dev_fix - Bugfix: fix for invalid std_dev calculation Tests: none, trivial change
23 Days Ago
Update: always record high and low percentile telemetry for non-game mode It's a smidge more data, but makes building dashboards easier Tests: none, trivial change
23 Days Ago
Bugfix: fix std_dev that could generate NaNs via sqrt of a negative number Tests: none, trivial change
23 Days Ago
Merge: from triggerparentdelayedexit_optim - Bugfix: shooting a weapon can cause NREs on the client Tests: shot in the sky with a bunch of bursts - no NREs
23 Days Ago
Bugfix: VerifyRays - avoid trying to read hit array outside of working area I asssumed we always call it with tightly-sized arrays, but it's not the case on client Tests: shot in the sky with a couple bursts - no NREs
23 Days Ago
Merge: from triggerparentdelayedexit_optim - Optim: improve performance of GamePhysics.TraceRays family of queries - Optim: TickMode 1 - add UsePlayerUpdateJobs2 related shortcuts to TriggerParent Tests: built a boat with tickmode 1, spawned npc player on it, jumped on and off, flew in it's vicinity - no issues.
23 Days Ago
Merge: from main
23 Days Ago
Optim: TraceRaysUnordered - optimize collider validation using burst jobs - added UtilityJobs.FlipBoolJob and ScatterToJob<T> This brings costs down across the board: * 128 rays - 0.37ms -> 0.25ms, 33% improvement (serial was 0.49ms, 49%) * 1k rays - 2.59ms -> 1ms, 61% (serial was 4.33ms, 77%) * 8k rays - 18.9ms -> 6.26ms, 67% (serial was 34.79ms, 82%) Tests: unit tests
24 Days Ago
Optim: TraceRaysUnordered - run water traces in parallel to raycasts Not the best impl, but shows improvement for smaller ray counts (where we're not dominated by Verify): * TraceRaysUnordered - 128rays: 0.44ms -> 0.37ms, 1k+ rays same * TraceRays - 128rays: 0.56ms -> 0.50ms, 1k+ rays same Can apply the same to sphere casts as well. Tests: unit tests
24 Days Ago
Optim: TriggerParent.TickMode 1 - use cached water and ladder results in UsePlayerUpdateJobs 2 env - codegen This should allow us to skip ~30% of the overall runtime. Can be disabled via TriggerParent.UsePlayerV2Shortcuts 0 (defaults to 1) Tests: none, will check tomorrow once brain is fresh
24 Days Ago
Optim: TriggerParent.TickMode 1 - avoid unnecessary entity lookups in RunClippingChecks Microoptim, but why not Tests: none, trivial change
24 Days Ago
Optim: TriggerParent.TickMode 1 - skip RunClippingChecks for entities that failed RunCheckForObjUnderFeet Tests: none, trivial change
24 Days Ago
Clean: remove a couple TODOs Was worried about a bug, but deeper scrutiny think the code is correct Tests: none, trivial change
24 Days Ago
Clean: refactor TriggerParent.ShouldParentEntitiesJobs - Added profiling scopes No functional changes. This makes data flow easier to track and manage, and helps visualizing stages in perf snapshots. Tests: built a long-boat in tickmode 1, spawend 6 players on it, went to edit mode and back, jumped on-and-off as it was moving