1,924 Commits over 457 Days - 0.18cph!
    
    
    
        
            
            
            
                
                Optim: OcclusionCache store sorted pairs
- Don't store SubGrids in the cache, just their indices - saves a bit of mem
Allows to double the effective capacity of the cache
Tests: 2 player session in editor with occlusion behind the hill
                
                
                
                
             
         
        
            
            
            
                
                Clean: Move all of the player server occlusion logic to it's own file
- Removed now resolved TODOs
Now that it has both task and serial modes of operation, it takes too much space in server partition file.
Tests: compiles in CLIENT+SERVER editor
                
                
                
                
             
         
        
            
            
            
                
                Update: use ConcurrentDictionary for BasePlayer.lastPlayerVisibility
Trying the simplest approach first, lets see how it scales on release pop.
Tests: 2 player local session with occlusion culling de-/spawning player
                
                
                
                
             
         
        
            
            
            
                
                Update: early out from running occlusion checks if no players to process
Tests: none, trivial change
                
                
                
                
             
         
        
            
            
            
                
                Bugfix: use cached network time of one player to avoid worker thread calls to script api
Tests: none, one more to fix
                
                
                
                
             
         
        
            
            
            
                
                Clean: wrap Task.Wait into a named lambda
This will make it appear in server snapshots
Tests: none, trivial change
                
                
                
                
             
         
        
            
            
            
                
                Update: main thread now participates in occlusion task processing
Tests: none, as I need to adapt more code to make it friendly to running on workers
                
                
                
                
             
         
        
            
            
            
                
                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