506 Commits over 123 Days - 0.17cph!
Update: Replacing new occurances of obsolete Pool API with new
Tests: built all configs
Merge: from main
Also contains updated codegen binaries to conform with new API
Tests: built all modes
Clean: use a cast instead of new expr
Also dead static removal
Tests: none, trivial change
Optim: StringView.Split can use user provided temp storage
ServerInfo uses a pooled list to as a go-between the StringView and HashSet. This provides last noticeable change that reduces an allocation per ctor, with average going down by 1.3 (8.31 -> 7).
Also reinforced empty tags to not allocate a new empty set everytime.
Tests: checked ServerBrowser - tags still recognized.
Optim: Replacing ServerInfo.Region with StringView instead of string
Avoids another optional allocation, avg count went down by 0.6 (8.95 -> 8.31). This looks like mostly it for clear&easy wins.
Tests: Checked server browser, it displayed region tags
Update: Add ServerInfo.Protocol enum
Avoids us creating a string to track which protocol to use. On average, saves about 0.6allocs (9.56 -> 8.95). We already have a similar enum on the game level, but this has the "Default" member.
Tests: none, trivial change
Optim: further reduce allocs for ServerInfo
Couple easy wins - Changeset is unused so removed, construct ConnectionString on demand, avoid identifying tags if already identified.
Should've removed 2allocs per ctor, but data shows reduction by 3allocs on average(12.94 -> 9.56).
Tests: None, trivial changes
Update: Allow StringView to implicitly convert to ReadOnlySpan
This allows StringView to be friendly with APIs that Span, like int.TryParse(). It also removes 3 allocations, and weirdly my tests show a reduction of 4 allocations per ctor invocation on average.
Also merging stragler tag lookup into the main loop(avoids an extra traversal and extra lambda allocation).
Tests: Checked ServerBrowser, player count was sane.
Update: Annmotating ServerCacheQuery to track GC allocs
Should've done it at the start but ah well. This also revealed that Task.Delay doesn't seem to be doing much - worth investigating further.
Tests: took a recording during server list refresh - no errors and could see the samples displayed.
Update: Rewriting ServerInfo to use StringView for Tags
This revealed a bunch of other dependencies that needed to be updated. Some of them got plugged up by string copies, some by uninmplemented StringView.Substring. Overall, seems doable, though revealed a number of shortcomings - for example, we'll need to implement our own <numeric>.TryParse(StringView) logic. On the flipside, it allows us to do String pooling a bit more aggressively in our steam library(if we decide to go that far).
Tests: Opened GameServer, observed list being populated and interactible.
Bugfix: fixing utility algs in StringView
Tests: server browser displayed all results (next CL)
Add: new StringView utility
It's essentially a ReadOnlySpan that keeps alive it's referred-to string, and is able to be stored as a member variable. Only contains a smidgen of algorithms that are needed to use it as part of ServerBrowserList. Goal is to find out how much code we need to update to be able to eliminate most allocations in the browser refresh flow.
Tests: none
Merge: from main
Buildfix for camera shake
Buildfix: ifdef out ExplosionScreenBounceFade logic
Tests: built all target modes, all green
Buildfix: removing usused using declarations
Will trip up PC build
Tests: ran PC build locally
Buildfix: unexpose a variable
Leftover that I missed during cleanup, somehow tripped up the build.
Tests: Build in all modes - pass. Ran unit tests - pass
merge from Pool_Remove_FreeDynamic
Tests: ran new CompanionServerTests 10 times, all green
Bugfix: Close socket properly instead of aborting during test teardown
This is slower, but avoids tripping up the companion server that's polling on data and suddenly gets unexpected remote closure, triggering an exception.
Tests: ran the batch of tests 10 times, no failures
Merge: from main
When testing on main, suddenly discovered that 3rd test batch run would produce an error.
Tests: ran CompanionServerTests multiple times, 2 green batches, 1 red (on teardown) - will fix in next CL
Merge: From Main
Tests: Ran CompanionServerTests couple times, all green
Update: Treat Obsolete warnings as visible, potentially errors.
This allows us to clearly see when we have deprecation warnings. We can still clear the console if it's too spammy. Lastly, because they're treated as warnings and not flat-out-errors it allows us to control when we hard-deprecate via flag to [Obsolete].
Tests: marked a funciton as Obsolete - observed warnings instead of errors. Marked that func as obsolete-error - saw errors.
Merge: merge from main
Lets see how much extra work I got left now
Update: AssetStorage now respects compression settings for Save()
Originally it was doing nothing (because it picked a compression format as textureFormat, but then set textureCompression to Uncompressed), but now it'll try to compress on request. We only have 1 place where we attempted to compress the terrain normal map, but I'm disabling that explicitly (as it would lead to fudged normals).
Tests: Baked Heightmap on CraggyIsland - spat out the same formatted texture as before
Bugfix: Discard alpha channel for generated LUT
Originally it was saved as RGB24, but since my deprecation warning fix I re-enabled Alpha channel. This fixes it.
Tests: none, trivial change
Clean: Fixing depr warnings in Third Party/VertexToolsPro
- Adapted uncompressed texture pixel access, TextureImporterFormat -> TextureImporterCompression
- SceneView.onSceneGUIDelegate -> duringSceneGui
Holy guacamoly, it's there's no more deprecation warnings. Now to double check previous compression conversions, as I think I missed alpha channel handling in a couple places.
Tests: none, trivial changes
Clean: Fixing depr warnings in Third Party/PluginMaster
8 to go.
Tests: none, trivial changes
Clean: Fixing depr warnings in Third Party/CinematicEffects
10 to go
Tests: none, trivial changes
Clean: Fixing depr warnings in Assets/Editor
- Removed obsolete BuildOptions usage (they do nothing on native side)
- Using explicit EditorGUILayout.ObjectField with AllowSceneUsage parameter overload
- More PrefabUtility conversion
- TextureImporterFormat.AutomaticTruecolor -> TextureImporterCompression.Uncompressed
12 warnings to go.
Tests: none, trivial changes
Clean: Fixing depr warnings in Scripts/Audio
- Removed the method containing deprecated usage, as it was trying to call into a native method that no longer exists.
Tests: None, trivial change (no usage)
Bugfix: Prevent Scene2Prefab from always switching to default scene
I dingussed up in the previous commit by doing extra changes after testing. Reverted small part of the change because Scene handle becomes invalid when loading a new scene.
Tests: Ran "Locate Renderers with no LOD Components" - it returned back to original scene properly
Clean: Fixing depr warnings in Editor/Rust
- Added a bit of error checking to SceneToPrefabs to avoid accidents
- EditorApplication -> EditorSceneManager for all scene related work
- ListView event changes, onItemsChosen -> itemsChosen, onSelectionChange -> selectionChanged
27 warnings to go.
Tests: ran Scene2Prefab/Locate Renderers with no LOD Components - it detected a number of issues, so green. Other changes are trivial.
Clean: Fixing depr warnings in Scripts/Procedural
- EditorGUIUtility.LookLikeControls -> manual setting field and label widths
47 to go (I hope)
Tests: None, trivial changes
Bugfix: Reimplementing PowerLineWireUndo
Unity deprecated a couple Undo APIs that broke our utility, so replaced them with new API. Also upgraded PrefabUtility usage and nuked a couple unused public methods (since they used deprecated APIs).
Tests: Tested Undo-Redo when adding a new line on power line platform - works
Clean: Fixing depr warnings in LeavesBlowing.cs
- Also cleaned empty method
65 to go - I thought this was going to be 0, but turns out there's 65 more errors hiding, so the counter restarts
Tests: none, trivial changes
Clean: Fixing depr warnings in Rust.AI/
3 to go.
Tests: none, trivial changes
Clean: fixing depr warnings in Scripts/PostProcessing
Done by taking Unity's official repo upstream patches for our version of unity for these specific file segments. We should replace our source package via a core package.
5 to go.
Tests: Setup debug overlay for normals - still works (though wonky)
Clean: fixed depr warnings in Scripts/Analytics
Now outputs refresh rate as a decimal fraction
Tests: none, trivial change
Clean: fixing depr warnings in Scripts/Diagnostics
Now able to return 2GB+ values for dump convar. 8 to go.
Tests: Generated a dump, validated the padding is alright
Bugfix: KeyBindUI once more avoids modifying original prefab name
This got broken in 2018.3, about a year after our code submit. Also sneaking in depr fixing in UI/Main Menu
- Replaced obsolete PrefabUtils API calls in KeyBindUI
- WWW -> UnityWebRequest
10 errors to go
Tests: Checked main menu news still download and dispaly. checked KeyBinds prefab doesn't get polluted with bind names and options prefabs get renamed properly
Clean: Fixing depr warnings in Scripts/ConsoleCommands
`objects` and `textures` vars can return 2GB+ memory size values per object now.
- Application -> SceneManager
- refreshRate -> Round(refrestRateRatio.value)
14 to go
Tests: none, trivial changes
Clean: Fixing depr warnings in Scripts/ViewModel
- More ParticleSystem module usage
- Also removed obvious comments
19 to go - there's basically no more large groupings, so the CLs will continue to be small
Tests: none, trivial changes
Clean: Fixing depr warnings in Scripts/Client
- More ParticleSystem module usage
- Application -> SceneManager
23 to go
Tests: None, trivial changes
Clean: Fixing depr warnings in Scripts/Procedural
- Removal of dead Render.mateiralType
- Renderer.castShadows -> shadowCastingMode
- WWW -> UnityWebRequest
- Explicitly use default QueryParameters for a RaycastCommand
26 to go
Tests: None, trivial changes
BugFix: TerrainMeta now updates Terrain Material if it's missmatching
Unity's deprecation made it so that our validate-and-update logic broke with 2019.2 and it's been silently skipping it.
- Removed obsolete code (it always returned MaterialType.Custom)
- Updated Hapis TerrainConfig to reference Terrain.v3.Hapis material (so that new logic doesn't set the wrong material on validation)
Tests: Validated that all Release worlds have matching materials as in their TerrainConfig.
Clean: fixing depr warnings in Scripts/Effects
It's all just ParticleSystem module usage additions. 39 warnings to go.
Tests: none, trivial changes
Clean: fixing depr warnings in Scripts/Game/
- SceneToPrefab - using SaveAsPrefabAsset instead of ReplacePrefab
- More ClientRPC(RpcTarget) usage
- More ParticleSystem module usage
- CreatorGibSpawner now caches and restore entire Random state when changing seed
- prefabAssetPath -> assetPath
Tests: Tested SceneToPrefab workflow by building "water well" monument prefab - although it produced inconsistent diffs, original impl also did. Checked the generated prefab visually - it matched. Also walked through Unity's call tree - the controlling variables were the same.
About 55 left
Clean: fixing depr warnings in Scripts/Server
- Server performance can now report memory usage past 4GB
Tests: None, trivial changes