2021.5.24.1203 - Thumbnail System & UIX Canvas optimizations
Hello everyone, another smaller build, but with some optimizations now! During testing the MTC we got a lead that the worlds UI is causing some hitches and this led to some more discoveries for things to be optimized, both client-side and on the server! There are some changes to the session thumbnail system to avoid wasting resources - e.g. loading and updating thumbnails when the UI cannot be seen (e.g. your dash is closed or on different screen) and recompressing, reuploading/redownloading same thumbnails and some more!
Also more general optimization, UIX canvases will now deffer the actual update if they're inactive, to avoid UI that's invisible to you (e.g. closed dash, or inactive dash screen, context menu or anything culled in world) from unnecessarily doing background computations and wasting CPU cycles and memory.
Overall these should help reduce some unnecessary background resource drain and help things run a bit better! Sorry I don't have more for now, going to be working on a weekly update next, so I'm pushing out what I have for now.
[h2]Optimizations:[/h2]
- UIX Canvas updates are now deferred when it's inactive (either directly within hierarchy), reducing performance impact of currently inactive canvases
-- This includes dash (e.g. worlds or contacts UI updating its layout in the background) as well as any world-space canvases (e.g. Context Menu when not open)
-- This should also help reduce CPU/memory impact when various avatar/level culling systems are employed, not generating the actual UI until it needs to be shown
- Tweaked session thumbnail capture intervals to reduce the load on the user starting/joining the session
- Downloading new session thumbnail for the Worlds menu is now deferred when it's inactive, preventing unecessary downloads and processing of thumbnails when the UI is not visible
-- This should help fix some cases of random hitching in worlds, even when dash is deactivated (based on report by @Rue Shejn | Artist 3D and @Nexulan | Producer)
-- On some users, this should also mitigate the gather jobs from getting overloaded and downloads stuck in some cases (reported by @ProbablePrime, @I'm Erin. and @Kitten_of_Codes)
- Moved session thumbnail downloads to the CDN, rather than direct blob download for better performance and metrics
- When StaticTexture2D is set to DirectLoad, the metadata computation task is now skipped
-- This reduces unnecessary CPU load and memory usage, particularly for session thumbnails which use DirectLoad
- Uploaded thumbnails are now associated with their public URL in the database, to avoid cases where user has to redownloaded their own thumbnail, resulting in resource waste
- Headless will no longer reupload and recompress session thumbnails from other sources (users in the session or the world thumbnail), but rather use their direct URL
-- This will reduce unnecessary network bandwidth and CPU/memory usage by redownloading different versions of the same thumbnail and better employ caching mechanisms
- Merged Spanish locale additions (including new MTC Streamer Room) by @Ruz
- Merged Czech locale addition by @rampa_3 (UTC +1, DST UTC +2)
[h2]Bugfixes:[/h2]
- Added transition code for SessionUser head output device being serialized as integer, causing potential compatibility problems when the enum changes
- Fixed UIX canvas becoming invisible when the RectTransform on the root becomes deactivated and the graphic chunks don't get flagged as dirty to re-enable it
- DynamicField and CloudValueField are now aware when pointed to read only fields (e.g. RawOutput) and will avoid any writes back to them to avoid throwing exceptions in the log (based on report by @RezilloRyker)
- Fixed Headless not being able to load certain worlds and objects due to scene hierarchy being too deep (reported by @Shadow Panther [RU/EN, UTC+3] and @Torrn)

Also more general optimization, UIX canvases will now deffer the actual update if they're inactive, to avoid UI that's invisible to you (e.g. closed dash, or inactive dash screen, context menu or anything culled in world) from unnecessarily doing background computations and wasting CPU cycles and memory.
Overall these should help reduce some unnecessary background resource drain and help things run a bit better! Sorry I don't have more for now, going to be working on a weekly update next, so I'm pushing out what I have for now.
[h2]Optimizations:[/h2]
- UIX Canvas updates are now deferred when it's inactive (either directly within hierarchy), reducing performance impact of currently inactive canvases
-- This includes dash (e.g. worlds or contacts UI updating its layout in the background) as well as any world-space canvases (e.g. Context Menu when not open)
-- This should also help reduce CPU/memory impact when various avatar/level culling systems are employed, not generating the actual UI until it needs to be shown
- Tweaked session thumbnail capture intervals to reduce the load on the user starting/joining the session
- Downloading new session thumbnail for the Worlds menu is now deferred when it's inactive, preventing unecessary downloads and processing of thumbnails when the UI is not visible
-- This should help fix some cases of random hitching in worlds, even when dash is deactivated (based on report by @Rue Shejn | Artist 3D and @Nexulan | Producer)
-- On some users, this should also mitigate the gather jobs from getting overloaded and downloads stuck in some cases (reported by @ProbablePrime, @I'm Erin. and @Kitten_of_Codes)
- Moved session thumbnail downloads to the CDN, rather than direct blob download for better performance and metrics
- When StaticTexture2D is set to DirectLoad, the metadata computation task is now skipped
-- This reduces unnecessary CPU load and memory usage, particularly for session thumbnails which use DirectLoad
- Uploaded thumbnails are now associated with their public URL in the database, to avoid cases where user has to redownloaded their own thumbnail, resulting in resource waste
- Headless will no longer reupload and recompress session thumbnails from other sources (users in the session or the world thumbnail), but rather use their direct URL
-- This will reduce unnecessary network bandwidth and CPU/memory usage by redownloading different versions of the same thumbnail and better employ caching mechanisms
- Merged Spanish locale additions (including new MTC Streamer Room) by @Ruz
- Merged Czech locale addition by @rampa_3 (UTC +1, DST UTC +2)
[h2]Bugfixes:[/h2]
- Added transition code for SessionUser head output device being serialized as integer, causing potential compatibility problems when the enum changes
- Fixed UIX canvas becoming invisible when the RectTransform on the root becomes deactivated and the graphic chunks don't get flagged as dirty to re-enable it
- DynamicField and CloudValueField are now aware when pointed to read only fields (e.g. RawOutput) and will avoid any writes back to them to avoid throwing exceptions in the log (based on report by @RezilloRyker)
- Fixed Headless not being able to load certain worlds and objects due to scene hierarchy being too deep (reported by @Shadow Panther [RU/EN, UTC+3] and @Torrn)


