branchrust_reboot/main/useplayerupdatejobs3/free_taskscancel
12 Commits over 0 Days - ∞cph!
Optim: Jobs 3 - save allocs by using UniTask for sending entity snapshots asynchonously
Think that's all existing tasks converted
Tests: loaded on craggy and teleported to/from the island
Clean: get rid of handwritten UpdateSubs_AsyncState state machine
Tests: unit tests
Optim: Jobs 3 - rewrite EAC and analytics tasks into UniTasks to remove allocs
Discovered server profiler is megaborked, no idea what caused it. Will investigate after rewrite is done
Tests: craggy in editor with jobs 3
Optim: Jobs 3 - OcclusionSendUpdates now uses UniTasks
- added UseUniTasks feature flag controlled by UsePlayerUpdateJobs 3
Positive experiemnt, can get rid of the hand-rolled state machine and use async-await.
Tests: profiled 2 players in editor beign destroyed by server occlusion - no allocs for task
Update: server enables SetPoolRunnersActive to reduce allocs of SwitchToThreadPoolAwaitable during tier0 init
Tests: loaded on craggy (with and without jobs 3), teleported around
Optim: UpdateSubscriptions - replace Tasks with UniTasks
They're slightly slower on a stress test, but they allocate an order less (and sometimes don't allocate) - 0.5MB vs 8KB over 10 run
Tests: unit tests
Update: plug in our fork of UniTask
- ecb0489
It has reduced allocations, but there are still some APIs that allocate
Tests: unit tests pass
Optim: FPTask.Run is now 0 allocs
Using reflection, manually invoke internals while sneaking in our cached callback
Tests: ran unit test
Update: add UniTask for evaluation
In simle case only has 1 alloc that's not pooled, same as FPTask - will try to solve it locally first
Tests: ran unit test
Update: basic FPTask + dumb single task scheduler
This gives us 1 alloc/40bytes per task baseline, but with a bit of hacking I think can bring it to 0
Tests: ran unit test
Update: more research - looks like we do need our own task type
Tests: uni tests
Update: initial investigation trying to reduce async-await gc overhead
Goal is to find better alternative to custom async states I've been handwriting, as they still require an alloc per task
Tests: ran unit test