1,956 Commits over 488 Days - 0.17cph!
Optim: junkpile_water_* - enable client interpolation and use InvokeHandler instead of InvokeHandlerFixedTime
Fixed time handler fires off 10x more by default, and it would generate 3x more position tick messages than InvokeHandler. Will need validating on naval_update
Tests: observed transofrm values of a junkpile in editor while close and at a distance - interpolation didn't throw it anywhere
Buildfix: remove stale debug code
Tests: editor compiles
Optim: OceanWreckBuoy/-Small skips syncing position if there are no nearby players
- set Sync Position to false by default
- marking buoys to always interpolate (need to do the same to junkpiles_water)
Tests: observed transform in editor from craggy and from nearby. Buoys didn't sink/fly off due to continual interpolation (need to double check what's stopping it)
Optim: set junkpile_water_a/b/c Sync Position to false
It is now script controlled, and having it off by default saves allocating an action per entity
Tests: observed transform in editor on craggy at spawn then when close
Optim: junkpile_water_a/b/c replicate positions only if player is in sight
- also switched them to the fixed time invoke handler, since their positionsare ran per fixed update
Tests: booted craggy, validated they weren't moving while I was on island. Flew close, observed them moving and checked in inspector that values change
Update: bring over jarryd's
124139 - BasePlayer.ToggleNetworkPositionTick
Slightly different form - lets us save on the IsInvoking lookups, fixed a bug with fixed time callbacks
Tests: booted on craggy, pushed a car, observed buoys and junkpile_water movement
Add: profile.CountSyncMoveEntities server var
Reports number of "Sync Positions" on the server. Some entities don't get into saves, so this is the only way to see what's putting pressure on InvokeHandler
Tests: ran it in editor on craggy
Bugfix(editor): if invoke throws, don't lose Profiler.EndSample
There's bigger problems out there, but this was making profiling a bit annoying
Tests: loaded playtest save and profiled it in editor
Update: Enable AnalyticsV2 by default
Staging servers ran this for a couple days now and this'll switch over clients as well.
Tests: none, trivial change
Merge: from save_viewer_extras
- Save viewer can now filter for mobile(Sync Position) prefabs
- It can also aggregate by prefab
Tests: opened a save from the playtest
Update(editor): SaveViewer - adjust what we display if we're in aggregate mode or not
Shows count in aggregate mode, otherwise shows ID and Parent ID
Tests: opened a save from playtest
Update(editor): SaveViewer - sort aggregates in descending order by default
Tests: viewed a save in aggregate mode
Update(editor): SaveViewer - add toggle to aggregate by prefab
Tests: inspected aggregated entities from playtest save
Update(editor): SaveViewer - add a "SyncPos Only" toggle
Need it to figure out what caused high counts of syncpos networkables on the server
Tests: viewed a save from the playtest
Merge: from analytics_v2_expose_telem
- Can view AnalyticsV2 stats via analytics.stats, analytics.tablestats and analytics.uploaderstats
Tests: used above to check stats in editor
Buildfix: missing return path in NetworkReadEx
Tests: ran "Test Compile Errors"
Merge: from main
Needs codegen
Update: AnalyticsV2 - Azure uploader will update uploading client if endpoint settings change
Tests: changed settings and checked with debugger
Clean: replace ClientVar + ServerVar with ConsoleVar
Generates less commands, avoids duplication in console autocomplete
Tests: ran stats command - it worked
Update: AnalyticsV2 - allow resetting stat tracking
Tests: logged stats before and after reset
Update: AnalyticsV2 - expose stats via convars
Available via analytics.stats, analytics.tablestats and analytics.uploaderstats
Tests: enabled v2 analytics and ran above commands
Merge: from voice_when_invis_fixes
- Voice chat is now heard by nearby invisible players and spectators
Tests: tested voice replication between 2 players, when invis and when spectating. invis case also tested disconnect-reconnect while invis.
Update: allow invis players to listen to nearby voice
- invis players are now tracked in BasePlayer.invisPlayers
Tests: 2p on Craggy, 2nd player went invis, host tapped mic - replicated. 2nd player disconencted and reconnected, host tapped mic - replicated
Update: Spectators can listen to voice of spectated and nearby players
- Spectators now exclude themselves from EntityGrid
Tests: 2p on Craggy, flew away from the island, started spectating player on island and tapped the mic - it came through
Update: minor ServerProfiler function filtering adjustment
- built from b90a83e5
Was annotating everything from SubGrid, instead of ignoring everything
Tests: unit tests
Merge: from baseplayer_serverupdateparallel
- Optimizes ServerOcclusion by reordering work and reducing number of pairs considered
- Optimizes parallel snapshot send out by reducing Pool contention
- General optims via reduced profiler instrumentation (new ServerProfiler.Core binaries)
Tests: 2p session on craggy with teleporting around and various occlusion scenarios (invis, dead, normal occluded, in view)
Update: new ServerProfiler with more filters
- Built on 276b03cf
Excludes a bunch of BasePlayer, BaseEntity, BaseNetworkable light functions, Native calls to RakNet and EAC, StableCache iterators.
Tests: booted in editor, took a snapshot of 10 frames
Optim: Set Pool<BufferStream> capacity to 32k (sum of NetRead and NetWrite caps)
We end up eating up default capacity on busy servers(1.1k BufferStreams on 330p server), causing allocs. This should help avoid that.
Tests: none, trivial change
Optim: UsePlayerTasks - pre-allocate NetWrites when sending snapshot queues
This should reduce contention on the Pool<NetWrite>'s lock and let worker threads blast as fast as possible. Will need to revisit after measuring the pre-alloc overhead for main thread.
Tests: On Craggy with UsePlayerUpdateJobs 2 flew away from island's network range then back - entities were where there have been before flying away.
Merge: from spectating_disconnect_nre_fix
- Bugfix for server NRE when spectating player disconnects
Tests: 2p on Craggy, disconnected while spectating - no more NRE
Bugfix: stop spectating when disconnecting
This cleans up cached spectators on spectated player's end, which avoids server NREs and leaks
Tests: 2p on craggy, started spectating then disconnected - no NRE
Merge: from main
- brings bugfix for player not seeing items on cargo ship(and other global networked entities)
- new analytics mode (switched off)
Tests: editor compiles, spawned cargoship on craggy and threw a rock on it - it replicated
Merge: from basepalyer_netgroup_interit_fix
- Fixes cargoships(and other global entities) putting players into global network group which stops replication with "outside" world
Tests: 2p session on Craggy, spawned a cargo ship and threw items, killed other player, tried spectating
Bugfix: stop player from inheriting parent's network group
Unintentional change as part of baseplayer_vis_nre merge. This caused player to inherit global network group on cargoship, which stops replicating anything outside of it.
Tests: 2p session on Craggy, spawned a cargo ship and threw items, killed other player, tried spectating
Merge: from analytics_queue_rewrite
- Bugfix for missing session-start event from Client, invalid session-end event from Client, malformed json aggregation
- Added support to edit upload intervals (tied to existing same server vars)
- Adjusted uploaders for some tables to avoid trying to send to our backend
Tests: unit tests + manual testing on Craggy (S+C mode) and Bootstrap (C only)
▊▊▉▇▋▇: ▅▅▅▆▅█▊▌▉▊▉ - ▆▉▍▅▄▋ ▍█▆▇ ▆▉▉▋▄▊▇ ▆▊▉█ ▍▌▇▍▄▊▅▍▊▆▄▆▌▉▉▆▄ ▉▍▊▍
▉▄▌▊ ▊▉▅▌▇▊ ▌▄▅ ▇▋▉▆▄▅-▋▉▊▅▆▆▊▅▉ █▆▊▋▍▉▇▋▉ ▆▇ ▄▍-▅▇▊ ▅▅▋ ▆▋▊▌█▌ ▌▇▌▍▉▇▍ ▇▊▇ ▄▍▄▅ ▊▍▍▄▍▊▄▋ ▇▇ █▄▅▌▍▋▌
█▆▌▄▅: ▉▌▍▍▇▋▇ ▋▆▋▄ ▄▅▇▌▉▌, ▋▌▄▄▉██▆▄ █▍▉▊ ▊▆▄▉█▄▄ ▄▇▆ █▉▄▋▄▄▋▊/▍▆▉█▄▍▄▍██▋
Update(editor): AnalyticsV2 - emit session start event
This is to make validating analytics on the backend easier (as this helps to form a full session)
Tests: with logging enabled observed session-start being fired before player_connect for server is sent
Update: AnalyticsV2 - add support for changing upload intervals
- made RuntimeProfiler and TickLogger adjust their intervals
Tests: enabled runtime profiler and changed interval - confirmed sent when expected
Update: AnalyticsV2 - restore gameplay_events upload interval
Accidentally submitted while testing it yesterday
Tests: none, trivial change
Bugfix: AnalyticsV2 - don't spam "appended 0 bytes" when logging is enabled
Tests: none, trivial change
Bugfix: AnalyticsV2 - ensure events sent at shutdown have valid steam tickets
Done by pumping steam event queue while analytics thread is shutting down
Tests: unit tests and ran Client mode in editor
Bugfix: AnalyticsV2 - only recycle auth tickets if not consumed them
- Added extra checks for early steam shutdowns
Previously we would eagerly cancel tickets, which is not api-appropriate. Now only doing so if either an exception occured or we're in dry-run mode
Tests: ran unit tests. Still can't catch why auth ticket is sometimes null on shutdown
Bugfix: AnalyticsV2 - fix invalid Json aggregation
- logs are aggregated again to reduce spam
This breaks azure bulk aggregation, but now the code structure is in place to support both
Tests: ran unit tests
Bugfix: AnalyticsV2 - don't miss client-only initialization during bootstrap flow
Tests: monitored client bootstrap analytics
Bugfix: AnalyticsV2 - skip client analytics if steam hasn't been started
Tests: none, trivial change
Bugfix: AnalyticsV2 - Log and DryRun no longer skip accumulators and uploaders once changed
As an extra, it got rid of a bunch of inheritance code
Tests: ran unit tests and logged analytics in editor