1,469 Commits over 396 Days - 0.15cph!
Update: work-in-progress task splitting for server's occlusion checks
Rewrote the high level code to be able to run PlayerFound/Lost in batches on worker threads - need to confirm if it's legal
Tests: none
Update: reimplement how occlusion treats overrides
- this is a reimplementation of
118512
Allows to further simplify OcclusionLineOfSight code - enables removal of OcclusionPlayerFound/Lost
Tests: on craggy with 2 players, ran behind the hill, disappeared, turned on occlusion override - player appeared
Update: plug in batched occlusion logic
- fix early-disposed container
Need to figure out how to factor out the OnPlayerFound/Lost, but getting close
Tests: 2p on craggy in editor - walked behind the mountain and disappeared
Update: plug in new batched server occlusion job
Tests: none, need to hook up the calling code
Update: extract algorithm from ServerOcclusionJobs.CalculatePathBetweenGridsJob
Tests: inspected asssembly
Update: batched OcclusionLineOfsight skeleton
Tests: none, not engaged yet
Update: refactor server occlusion job to take out grid definition
Prep for adding a batch version
Tests: on craggy in editor with 2 players, ran behind the hill and got despawned
Update: refactor occlusion loop to be friendly for batching
Need to simplify BasePlayer.OcclusionLineOfSight before I can start working on batched job
Tests: none, no functional changes for now
UPdate: move serverocclusion caching logic a level higher
Goal is to get rid of OcclusionPlayerFound/Lost in the query, so this is first baby step
Tests: none, trivial change
Update: Don't step players that have been kicked by antihack
Tests: none, trivial change
Bugfix: avoid scripting API when sending EventRecords from RunAnalyticsJob task
- EventRecord.New now can be created on worker threads
Tests: hacked code to enable analytics in editor, then ran around on craggy
Bugfix: avoid scripting API in EACServer.LogPlayerTick
- cache more of player state on main thread
Tests: hacked code to run EAC in editor and activated player tasks - no more exceptions
Update: add "Server.UsePlayerTasks" feature switch
- also submitting updated ResetStaticFields
Tests: turned it on and off in the editor and validated in profiler
Update: experimenting with offloading tick analytics for players to worker thread
In editor delays are pretty small, should win us 0.7ms on 200pop server, but tasks library is al-locating cosntantly - still investigating alternatives.
Tests: ran around in editor on craggy, checked profiler
Clean: dead variable
Tests: none, trivial change
Clean: fix code formatting
Tests: none, trivial change
Merge: from benchmarking_update
- Log results after single scene run
- Fix extra timers in results
- Fix scene load exception for no longer existing effects benchmark
Tests: ran benchmarks in editor
Update: different approach to skipping persistent BenchmarkTimers
Old way didn't work because of pauses between benchmark runs (global systems would step and recreate them).
Tests: ran in editor, confirmed output didn't contain specific timers
Update: log results when running benchmarks in single scene mode
Tests: checked logs after running the scene
Clean: remove EFfectsBenchmark from the list
I've removed it in the past, but apparantly forgot to remove it from this list as well
Tests: none, trivial change
Update: BaseRaidBench - clean up custom timers from tracking
Otherwise they end up in results with their generic names
Tests: none, trivial change
Merge: from camerarenderer_leak
- Fixes memory leaks related to Rust+'s camera renderer and Nexus mugshot savings
Tests: print_arraypool when connected to turret - before ProtocolParser 16KB set would grow, now stays constant
Bugfix: properly recycle mugshot data pooled array on nexus servers
Tests: none, same type of change as previous
Bugfix: properly recycle pooled array for camerarenderer
Tests: connected to a turret, printed array pool - before ProtocolParser 16KB pool would grow, now stays constant
Update: rewrite print_arraypool to support multiple array pool output
- also added logic to take into account T size
Useful to validate we're not leeking across pools
Tests: used in editor, both text and json options
Merge: from benchmarking_update
- Cleanup of obsolete EffectsBenchmark
- Editor-only DemoBuildingsViewer supports user modification of scene, scene export and import into scene
- Bugfix for infinite load loop in benchmarking flow
Tests: used the DemoBuildingsViewer to modify and export couple bases, built standalone client to run BaseRaidBench
Bugfix: fix infinite loading loop when running benchmarks
Caused by us hiding the loading screen and then loading monument scenes, which would leave them in limbo
Tests: ran the benchmark flow in editor and standalone client
Clean: DemoBuildingsViewer - complete remaining TODOs
- moved all InvalidBuildingId to Benchmark.Building
- consolidated some of Benchmark.Building's initialization logic
- fixed wrong comment
Tests: compiles in editor
Update: DemoBuildingsViewer - support exporting user placed building blocks
Requires them to have the BuildingBlockMetadata component
Tests: exported base with an extra wall, checked json - had expected values
Update: DemoBuildingsViewer - import handles domain reload events to avoid duplication
Tests: loaded a base from demo, triggered domain reload, deleted a wall, reimported - only wall came back
Update: DemoBuildingsViewer - can now export scene
- BuildingBlockMetadata now caches ParentEntityId and PrefabId
This enables the workflow of manually modifying bases in editor before export
Tests: diffed the Export merged and Export scene outputs (mostly the same, different sorting and slightly differeing floats by tiny epsilon), imported base from export scene - it's the same
Update: DemoBuildingsViewer - annotate spawned building blocks with metadata
- Also fixed building marker deduplication only spawning 1 marker
Allows to implement export of a scene (with manual edits), rather than demo protobuf.
Tests: used the tool, gizmos confirmed link up with building markers
Bugfix: DemoBuildingsViewer - don't spawn extra building markers on import
Tests: used the tool
Update: DemoBuildingsViewer - add debug toggle to spawn from source protobuf
Helps validating that everything is spawning correctly
Tests: used the tool in editor
Update: DemoBuildingsViewer - use processed protobufs, instead of raw demo protobufs, for scene spawning
- Benchmark.Building no longer caches raw protobufs
This standardizes logic between benchmarks and the viewer tool.
Tests: opened a couple bases from a demo
Update: DemoBuildingsViewer - can now recreate entities that have been deleted
Tests: spawned a base, deleted a bunch of walls, reimported - all back to normal
Bugfix: DemoBuilidngsViewer - ensure first building block instances have skin applied to them
- caused by invalid stability triggering early skin change, instead of deferring it till after we preprocess skins
Tests: imported base, looked the same as in demo
Update: DemoBuildingsViewer - support reimport of building blocks from base json
Takes us closer to being able to edit bases and export. Spotted it failing to create a correct wall (even though other same prefabs are okay).
Tests: used the tool
Bugfix: DemoBuildingsViewer - tag imported spawn markers to allow export
Tests: ran the tool
Update: DemoBuildingViewer - add ability to import markers from previously exported base
- spawn markers now visualize if their override is invalid
Makes it possible to do incremental fixups via the editor
Tests: used the tool in editor
Clean: mark BiomeBenchmark as enabled for build
It doesn't have an effect on the build as far as I can see, but makes it clearer to readers that it is included in the build
Tests: none, trivial change
Clean: remove EffectsBenchmark
Superseded by BaseRaidBenchmark
Tests: editor compiles
Update: BaseRaidBench - ensure results use 3-part format for key
Tests: none, trivial change
New: Scenes/Benchmark editor top bar menu
Tests: used all in editor - correct scenes opened
Merge: from main
Tests: ran BaseRaidBenchmark via bootstrap flow
Update: BaseRaidBench - players outside base now aim at random players in base
Tests: ran the scene