3,150 Commits over 761 Days - 0.17cph!
Merge: from vehicle_pooling
- Buildfix for BallistaGun
Buildfix: wrap Ballista private members in relevant mode guards
Tests: ran compile test
Merge: from hackweek_unsafescriptingaccess
- New: utility to bypass Unity's thread safety checks and conditionally execute code in async (Unsafe.UseMultithreadedScripting convar, def 1)
Tests: unit tests, manually built & ran all flavor combinations of executables, tried mac and win editors
Update: grab binaries from the merged PR
- addesses review feedback, functionality is same
Tests: ran unit tests on Win
Update: mark UseMultithreadedScripting explicitly defaulted to enabled
It kept disabling it despite underlying var being enabled
Tests: booted into craggy, looked at var state in console
Update: codegen
Tests: none
Clean: unify style, add comments
Tests: none, trivial changes
Clean: missed meta file deletion
Tests: none, trivial change
Update: move UnsafeScriptingAccess to Facepunch.Unity
- add unit tests
- delete old TLStest and it's scene
Tests: ran unit tests
Update: re-enable the feature for clients as well
- add editor only RustNative_Editor
- rewrapped the code behind UNITY_ASSERTIONS
Tests: built all flavors of Rust locally (win, linux, mac | client,server | debug,dev,release) and ran them, got passes everywhere
Bugfix: make sure we modify EnsureMainThread in release builds
That check is always active
Tests: booted TLS scene
Update: integrate TLSTest into client bootstrap and server boot routines
- copied over linux rustnative.so, to be tested
Temp measure to test standalone builds
Tests: booted both bootstrap and craggy in win editor - saw output (disabled in client, enabled in server)
Update: replacing with a remotely built dylib
Surprisingly, it works
Tests: ran TLS test scene
Update: add MacOS support for UnsafeScriptingAccess
- using locally built debug dylib for now
Need to figure out if remotely built dylib is going to work or not (didn't when I broke sig locally)
Tests: using locally built dylib was able to run TLSTest setup
Update: consolidate OS specific calls to RustNative
Still gotta build and test linux and mac, gonna do that tomorrow
Tests: ran temp scene
Update: disable Unsafe.UseMultithreadedScripting on CLIENT
- codegen
Need to figure out how to better patch out the managed check when doing an IL2CPP build, will leave that for later
Tests: tested booting test scene both in CLIENT(ran on main thread) and SERVER(ran on thread pool) modes
Merge: from mt_snapshot_saving
- Bugfix for thread race in Jobs 4 mode when saving BasePlayer
Tests: booted craggyisland_missions, completed a mission
Bugfix: avoid a thread race on PlayerState MRU dictionary when saving BasePlayer
- use readonly access in Save that doesn't update MRU
- push to cache on player connect
Tests: ran CraggyIsland_missions, completed a mission - saw states change in UI
Update: avoid calling db queries when saving BasePlayer.PersistentPlayerInfo
- instead resolved on player join
It should be safe according to docs(mt calls are serialized), but this way is just simpler.
Tests: booted into craggy
Update: implement UnsafeScriptingAcccess.SwitchToMultithreading awaitable
Works with ConVar.Unsafe.UseMultithreadedScripting to either keep task on main thread of offload it to thread pool
Tests: TLSTest script, with covnar being in both states after system runs
Clean: do TLS search after assemblies loaded, not after domain reload
- add comments
- add temp scene and TLS test script (will remove later)
Tests: ran temp scene
Update: rewrite UnsafeScriptingAccess to search for TLS slot dynamically
- ran codegen
Weirdly SwitchToMultithreading doesn't work, might be my UniTask todo
Tests: on windows, using local scripts was able to get and read transform pos
Merge: from unitask_threadpoolawaitable_fix
- Bugfix for deadlocking when frequently moving tasks to thread pool
Tests: ran unit test - passes
Bugfix: fix races in parameter caches when slamming SwitchToThreadPool
- UniTask synced up to commit c995d2b
Tests: ran SwitchToThreadPool test - now passes
New(tests): add TaskTests.SwitchToThreadPool that reproduces deadlock reported by community
Tests: gets stuck as expected when PooledRunners are active
Update: add SwitchToMultithreading helper
- added ConVar.Unsafe.UseMultithreadedScripting to disable experimental multithreading
Tests: compiles
Update: added standalone win TLS slot to allow
- also wrapped into OS & config dependent compile guards
Tests: built all flavors of standalone and checked that code succesfully executes in other project
Merge: from mt_snapshot_saving
- Bugfix for exception when saving ApartmentRooms in Jobs 4 mode
Tests: rented a room in Jobs 4 mode, verified with debugger that code was hit and no exception produced
Bugfix: use transform handles when saving ApartmentRoom.GetDailyUpkeepCost in Jobs 4 mode
Bypasses transform access which avoids tripping up on unity MT checks
Tests: rented a room in Jobs 4 mode, had a breakpoint in the code - no exceptions
Merge: from benchmark_fixes
- fixes all-bar-one NREs happening when running `benchmark` command
Tests: ran benchmark in editor
Update: clean up spawned players before unloading BaseRaidBenchmark scene
Helps deal with breadcrumb logs for zombie players in the list, but there's still an NRE from Client.LateUpdate - not confident to much with it just yet.
Tests: ran entire benchmark suite
Update: add a null check to FoliageGrid
It depends on terrain, but some scenes might not have terrain available (FireworkBenchmark)
Tests: ran the scene
Bugfix: add missing initialization to BaseRaidBenchmarkScene
- Initialize ProjectileCache (no idea where that has gone)
- Initialize admin overlay component
Tests: BaseRaidBenchmark runs without exceptions
Update: assign CraggyIsland terrain data in MonumentBenchmark
Was causing an NRE when trying to run that benchmark from bootstrap
Tests: benchmark MonumentBenchmark
Merge: from mt_snapshot_saving
- Bugfix for invalid-api exception when trying to save attackheli turret with ammo/gun
Tests: spawned one, loaded it up and shot all while in Jobs 4 mode
Bugfix: cache ammo for heli turret, avoid TryGetComponent in Save which is not safe in MT
Tests: spawend a heli, setup an ak turret with 100 bullets, shot in Jobs 4 mode - no errors
Merge: from fix_skipinit_error
- Buildfix(editor) - replace unsupported intrinsic
Tests: no errors in editor on script compile, checked asm
Buildfix: get rid of SkipInit, LLVM optimizes out variable initialization from final asm
Tests: triggered compile - no errors in editor. Checked asm against externally stack allocated storage - same asm
Merge: from pool_leak_experiments
- Optim: replace FuzzyPool with LPRQ segment - it can be up to 20% faster and doesn't leak/spill sporadically
Tests: unit + perf tests, loaded 2.5k procgen map, checked print_memory - no spills
Clean: remove editor-only add/remove fail counters
- also cache cell buffer length - jit might already do it automatically, so might be moot
Tests: compiles
Merge: from lprq
Prepping LPRQ segment implementation to use instead of current FuzzyPool
Tests: ran unit tests
Update(tests): expand TestAllocWhenEmpty test slightly to sanity check leaking behavior
Tests: ran unit test
Clean: Add general explanation on the pool implementation
- remove TODOs
- buildfix for non-editor builds
- bugfix of setting the wrong epoch for a slot for stale cells
Tests: ran unit and perf tests