branchrust_reboot/main/soundmodulator_leakcancel
80 Commits over 91 Days - 0.04cph!
Update: Helicopter now drops sound resources when disabled/retired
- Also fixed a potential NRE when requesting a sound fails
Tests: spawned an attack heli and flew around in it with jumping out at various stages. Also destroyed it to trigger sound recycling.
Bugfix: Bicycle now uses it's coasting sound when not pedaling
Tests: rode the bicycle with pedaling on and off.
Update: Bycicle drops all sound resources when sound definition changes
- Previously it tried to manage lifetime of modulators internally, but since we can pool it'll happen automatically now.
Tests: rode the bike with jumping off during different moments. Noclipped away and back, redid same actions - all stable.
Update: DPV stops all sounds when no longer simulating
In theory, there were edge cases where previously it was possible that some sounds would not be cleaned up.
Tests: rode the DPV, jumped off at various points, picked it up and redeployed. Noclipped around the area
Update: MovementSounds releases sound resources on disable
- Also got rid of IOnParentDestroying implementation - it's handled by OnDisable now
Tests: ran in water. Killed self mid run to test onDisable - all good
Update: Minigun and Fishing Rod drop their sounds on destroy/cleanup
Tests: Spooled up and fired the minigun with switching in between. Fished with switching at various stages(holding, throwing, fish catching, fish pulling).
Bugfix: Ignore sound fadeout requests on retired sounds
Because sound is a shared-ownership resource and we have scenarios where owners don't know that the sound sometimes has been retired, we need to be a bit more permissive with existing cleanup logic.
Tests: Had a fish bite with the fishing rod, started pulling then switched over to a different item, then tried fishing again - with sound pooling this would sometimes throw, but not anymore. Confirmed with audio logs that bad scenario did happen but didn't fail.
Bugfix: AmbienceEmitter now drops occlusion modulator on fade-out
Tests: noclipped around Craggy with audio recycling logs on - no NREs
Update: Implementing retiring of SoundModifier
Tests: none, trivial change
Optim: Recycle footsteps earlier
Previously sound would get recycled when the effect would be destroyed(1.7s), but it happens much later(instead of 0.5s)
Tests: Ran around on craggy - coast, grasslands, water.
Update: Log Sound stop-and-recycle requests
- Log level 3 for Audio
Tests: observed logs when running around (footsteps)
Update: updating audio debug output to make cross-referencing easier
Tests: Rode a zipline on Craggy, was able to track the looping sound
Bugfix: Zipline stops playing audio when reaching the end
This avoids trying to fade out a sound that was already recycled due GO being destroyed by server. Haven't found a better solution.
Tests: on Craggy with sound pooling enabled, used the zipline twice, then noclipped out in the distance, and rode the zipline twice - no NREs. Logs also didn't show double-retire
Update: rewrote the comment
Forgot to press save in VS before submitting.
Tests: none, trivial change
Update: Allow use of client-side commands for GameSetup in Editor context
This simplifies some testing scenarios.
Tests: Boted craggy with a couple client-only debug commands - they changed as required
Update: add sound logging under audio category
Tests: Ran in editor, confirmed output
Merge: from main
Tests: built in editor
Bugfix: don't clear modulators when not pooling, fixes zipline NRE
This was caused by my previous fix
Tests: rode the zipline twice on Craggy, then noclipped away from the island, and rode the zipline again - no NREs
Bugfix: when sound pooling is disabled, don't validate if we own the removed modulator
Originally, it didn't check but tried to return to the pool - this change restores this aspect.
Tests: noclipped on craggy across the entire world to cause entitiy destruction - no asserts
Update: RPC Codegen
Somehow missed it despite generating previously.
Tests: validated that I can dynamically switch it(even if it triggers my asserts - it's intentional)
Merge: from main
Tests: none
Update: Add console switch to enable sound pooling
- Disabled by default while I'm investigating ongoing NREs in the area
Tests: spawned 20 scientists and killed them. Ran around placing 100 barricades. Cut down 2 trees. Telemetry showed no pooled sound modulators.
Merge: from main
Tests: none
Bugfix: Don't update disabled sound players
I haven't seen it happen, but it is possible that someone could add a SoundPlayer to the Manager's queue, retire it, and next frame Manager would try to update it triggering an NRE.
Tests: spawned 10 scientists and killed them - no nres, audio was good
Bugfix: recycle sounds used by SoundPlayer when owner is returned to pool
Tests: Killed 60 scientistnpc_patrol in batches of 10 - NRE didn't reproduce.
Merge: from main
Tests: none
Merge: from main
Tests: built all modes in editor
Optim: lazy-allocate Sound Modulator lists
- Added an assert to trigger when we try to remove a modulator we don't own
Noticed that we have 3 modulators on average per 4 lists of modulators, so we can save 1-3 lists per sound and recycle better.
Tests: When driving around, got max 42 SoundModulation instances with 66 lists (instead of 168 previously)
Update: don't expose modulators outside of SoundModulation
- Changed printEngineSounds cmd to update more detialed info while removing redundant info
- Simplified checks since we can now guarantee that our object is safe by construction.
Tests: drove around in a car and checked the output in console.
Bugfix: Cleanup leaking Sound modulators
- Sound now gets notified when it gets retired
- Moved cleanup from Init to Retire and added safety asserts to Init
- Recycle more of SoundModulation state (revealed that we have more storage than modulators)
Tests: Ran around on Craggy, gathered resources, smashed a tree, crushed myself with a car by accident, drove around, swam - sound was good.