* Uses method of exposing a delegate for telemetry events to be registered by a StudioAnalytic provider implementation to avoid embedding schema in the engine
* Generic templates for RAII scoped timed telemetry events added to aid in generating timed events
#jira UE-155132
#rb Brooke.Hubert Wes.Hunt Ronald.Koppers
#preflight 645022cdee56ca4c247ef92a
[CL 25291458 by logan buchy in ue5-main branch]
Optimized Collection code invoked at each source control update to avoid comparing large set to detect if the in-memory collection is different from the collection on disk.
#rb Julien.StJean
#preflight 6346e2cf663dafe4162e8c9e
[CL 22505265 by patrick laflamme in ue5-main branch]
#rnx
#rb none
#ROBOMERGE-SOURCE: CL 10869240 via CL 10869516 via CL 10869902
#ROBOMERGE-BOT: (v613-10869866)
[CL 10870584 by ryan durand in Main branch]
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
UETOOL-332 - Collections 2.0
UETOOL-401 - Add support for dynamic collections
You can now reference both static and dynamic collections in the Content Browser text filter, including recursive references (the evaluator guards against cyclic collection references).
The text filter now recursively gathers up any dynamic collection references when the filter text is changed. These are then tested depth first as sub-expressions against each object, to see whether the object is "contained" within the given dynamic collection.
[CL 2615416 by Jamie Dale in Main branch]
UETOOL-332 - Collections 2.0
UETOOL-401 - Add support for dynamic collections
These collections can be created from a text search in the Content Browser, and allow you to store a search query so it can be reused or shared.
They have some limitations compared to static collections:
- As they never know what objects they actually contain, they can't be displayed in the "Collections" list in asset tooltips.
- They cannot contain child collections.
[CL 2615029 by Jamie Dale in Main branch]
UE-17782 - Editor must be restarted for New Collections to appear after syncing
These use FFileCache to avoid detecting changes that are made by the collection manager itself.
This also fixes some issues when merging collection sets together, and fixes some places where UI wouldn't update when a collection was changed due to an update or merge.
[CL 2612319 by Jamie Dale in Main branch]
This shows a little colored pip to the right of the collection items, where each color means:
Grey - Up-to-date and empty
Green - Up-to-date and not empty
Blue - Has local changes
Orange - Not at the latest revision
Red - Checked out by another user, in a conflicted state, or missing its source control provider
This also adds an "Update" and "Save" option to the collections context menu. Typically these won't be needed as collections mostly manage themselves, but since we now show when a collection is out-of-date or dirty, it makes sense to allow the user to take action to correct these states without having to leave the editor.
[CL 2610477 by Jamie Dale in Main branch]
UETOOL-332 - Collections 2.0
UETOOL-373 - Check robustness of Collections 2.0
The collection manager will now fix-up any references to redirectors within its collections once the asset registry has finished discovering all the available assets. It also adds a watcher so it can pick up any moves or deletes as they happen.
All of this fix-up is applied to the in-memory copy of the collection, and doesn't get persisted to disk until it needs to be (because referenced redirectors are being deleted). This helps to minimize issues with source control availability and shared/private collections.
This change also makes sure that objects that are being referenced by a collection will leave a redirector behind, and also adds some extra context (such as the collection name) to some of the source control errors that may be reported when saving a collection.
[CL 2602519 by Jamie Dale in Main branch]
UETOOL-332 - Collections 2.0
UETOOL-369 - Want nested collections with collapsing
We now have version 2 collections which maintain a persistent GUID for each collection. Existing collections will be lazily updated to this version when they need to be re-saved.
This GUID is used by child collections to keep track their parents, and the collections view (as well as the quick asset management) now show a tree of collections. Collections in the main collection view tree can be re-parented via drag and drop.
Performing Content Browser searches against a given collection will also test to see if an object exists in child collections, and the asset view will now show you folder entries for child collections when viewing a parent (if folders are enabled in your Content Browser view settings).
[CL 2593321 by Jamie Dale in Main branch]
UETOOL-332 - Collections 2.0
Removed some duplicated data from FCollection (AssetList and AssetSet) as they had to be manually kept in sync. Only AssetSet exists now, and is converted into an array and sorted before being written to disk (to keep the order consistent for diffing). DiskAssetList has also been converted into a set (now DiskAssetSet) as this is only ever used for lookup queries.
All manually memory management has been removed from FCollectionManager, and the array of maps to collections has been converted into a single map using FCollectionNameType as its key. This simplifies collection lookup code in most cases, and removes the need to manually track the total number of collections outside of the map (NumCollections has now been removed).
Renamed ICollectionManager::GetCollectionsContainingAsset to ICollectionManager::GetCollectionsContainingObject as the function checks for any objects, not just assets.
Renamed FCollection::IsAssetInCollection to FCollection::IsObjectInCollection as the function checks for any objects, not just assets.
Made ICollectionManager::IsCollectionEmpty const.
Replaced all appropriate loop usage with range-based-for, and replaced any NULL with nullptr.
[CL 2560621 by Jamie Dale in Main branch]