diff --git a/Documentation/assetbundle-format.md b/Documentation/assetbundle-format.md index f85389e..7e03089 100644 --- a/Documentation/assetbundle-format.md +++ b/Documentation/assetbundle-format.md @@ -91,6 +91,42 @@ In UnityDataTool output, these layers appear in different places: Keeping those layers separate helps explain why a query over `refs` may show cross-bundle relationships without directly mentioning an AssetBundle filename on each reference row. +## Built-in resources + +Bundle content can reference objects in Unity's two built-in resource files (described in +[Built-in resource files](playerbuild-format.md#built-in-resource-files) on the Player build page). +`BuildPipeline.BuildAssetBundles` handles the two differently: + +- References to **`Library/unity default resources`** objects (default meshes, the RenderSettings + spot cookie, and so on) always stay external references. This is safe: that file is identical in + every Player of the same Unity version, so the referenced objects are always available at runtime. +- Objects from **`Resources/unity_builtin_extra`** (built-in shaders and materials) are treated like + user assets and copied into the bundle that uses them — with one exception: shaders in the + project's **Always Included Shaders** list (Graphics Settings) are not copied, but referenced + externally from `Resources/unity_builtin_extra`. A Player build writes exactly those shaders into + its copy of that file, so the references resolve when the bundles and the Player are built from + the same project settings. + +For example, in the reference scene bundle in `TestCommon/Data/LeadingEdgeBuilds/AssetBundles`, the +`Sprites-Default` Material and the default reflection Cubemap are copied into the bundle's +`.sharedAssets` file, but the material's `Sprites/Default` *shader* stays an external reference into +`Resources/unity_builtin_extra`, because that shader is in the default Always Included Shaders list. + +Those external shader references couple a bundle to the Player that loads it: if the Player was +built with a different Always Included Shaders list (a different project, or settings that changed +between builds), the bundle can reference a shader the Player does not contain. When you run +[`analyze`](command-analyze.md) on bundles, references into either built-in file show up in +`dangling_refs_view`, because the built-in files themselves are never part of the bundle build +output. + +The Scriptable Build Pipeline avoids the coupling entirely: it never references the Player's +`unity_builtin_extra`, and instead copies the referenced built-in objects into each bundle that uses +them (references to `unity default resources` stay external, as above). The cost is duplication when +several bundles use the same built-in shader; the optional `CreateBuiltInBundle` build task removes +that by collecting the built-in objects into a single dedicated bundle. The Addressables package +enables that task in its default build, so Addressables content contains its own copy of the +built-in shaders it needs and does not depend on the Player's Always Included Shaders list. + ## Inspecting a bundle with UnityDataTool The [`archive`](command-archive.md) command lists or extracts the files inside a bundle, and diff --git a/Documentation/contentdirectory-format.md b/Documentation/contentdirectory-format.md index fe1ed7c..00f10d0 100644 --- a/Documentation/contentdirectory-format.md +++ b/Documentation/contentdirectory-format.md @@ -52,7 +52,7 @@ runtime. Every build artifact is named by the hash of its own content: -- **Content Files** use the `.cf` extension (for example `a77f98db89b6aa1aeaaad01d857e5115.cf`). +- **Content Files** use the `.cf` extension (for example `c0152db4dd710be51b2decb997325f34.cf`). - **`.resS`** files hold streamed texture and mesh data. - **`.resource`** files hold audio and video data. @@ -73,7 +73,7 @@ are present both for loose files and for entries packed inside an archive. ### The build manifest The build manifest is a JSON file, also named by its content hash (for example -`15d5df98d98434e67e06716cfabfad1b.json`). It records everything needed to load the content: the list of +`baff06b928d147276f2245dd3b19216a.json`). It records everything needed to load the content: the list of Content Files, their dependencies, and the loadable objects and scenes. Its schema is internal and may change substantially, so this page does not document it. Instead, use [`ContentLayout.json`](contentlayout.md), which presents the same information (plus source-asset @@ -106,7 +106,7 @@ many files contain just a single Unity object (a Material, Shader, Texture, Audi few grouping rules shape the result: - **Scenes and Prefabs** store their whole GameObject/Component hierarchy together in a single Content - File, just as they are represented in the Editor. + File, just as they are represented in the Editor (see [Scenes](#scenes) below). - **Assets with sub-assets** are split across multiple Content Files. For example an FBX is separated so that the component hierarchy and the meshes land in different files. - **Scripts** are grouped: the `MonoScript` objects for several source scripts can share one Content @@ -116,10 +116,84 @@ few grouping rules shape the result: to break a cycle is to convert one of the references into a `Loadable` (an on-demand reference) instead of a direct reference. -Built-in resources are handled specially. The manifest carries an entry for `unity default resources` -flagged as built-in (with no content hash); references to it resolve through the runtime's built-in -resource mechanism and the `PersistentManager`, rather than through the `ContentLoadManager` that -manages Content Files. +Unity's two built-in resource files are handled in different ways: + +- **`unity default resources`** is referenced but not included in the build, because those resources + are always present in the Player that loads the content directory. The manifest carries an entry + for it flagged as built-in (with no content hash); references to it resolve through the runtime's + built-in resource mechanism and the `PersistentManager`, rather than through the + `ContentLoadManager` that manages Content Files. +- **`Resources/unity_builtin_extra`** gets no such special treatment: any referenced objects from it + (for example the default sprite material and its shader) are included directly in the content + directory output, in a Content File named by its content hash just like any other file in the + build. This is because the `unity_builtin_extra` file in a Player is generated per build and + contains only the project's "Always Included Shaders" — copying the referenced objects into the + content directory makes it independent of what a particular Player build happens to contain. + +## Scenes + +Content directory builds can include Unity Scenes. The build parameters only accept ScriptableObject +assets as roots, so a scene enters the build by being referenced through a `LoadableSceneId` field (a +small serializable struct identifying the scene) on an asset reachable from the roots. Every scene +referenced this way is added to the output, along with the assets the scene itself references. At +runtime, such a scene is loaded with `SceneManager.LoadSceneAsync(LoadableSceneId)` once the content +directory is registered. + +Each scene produces exactly one Content File, containing only the scene's own GameObject/Component +hierarchy and scene settings objects. The assets the scene references (textures, materials, and so +on) are not packed with it — they land in their own Content Files following the normal +[granularity rules](#build-layout-granularity), and the scene's file reaches them through the +manifest dependency list. This differs from Player builds, where each scene comes with companion +`sharedassets` files holding its assets. Scene Content Files also differ in their object IDs: the +scene's objects get small sequential IDs (1, 2, 3, ...), rather than the 64-bit hash-based IDs used +in other Content Files. + +In `ContentLayout.json` (schema details on the [ContentLayout.json](contentlayout.md) page), the +top-level `LoadableSceneIds` array lists each scene with its source path and the Content File that +holds it. From the reference build in `TestCommon/Data/LeadingEdgeBuilds`, which includes two small +scenes: + +```json +"LoadableSceneIds": [ + { "GUID": "590cfeb4e0ff90f4e92f9e1262bcfe6f", "Path": "Assets/Scenes/Scene2.unity", "SerializedFile": 6 }, + { "GUID": "162c015549f8733449ac70ae78ad3aa5", "Path": "Assets/Scenes/Scene1.unity", "SerializedFile": 2 } +] +``` + +The scene's own `SerializedFiles` entry names the scene as its single source asset, and its symbolic +`ID` is derived from the scene's GUID: + +```json +{ + "Index": 2, + "ID": "162c015549f8733449ac70ae78ad3aa5.cfid", + "SourceAssets": [ "Assets/Scenes/Scene1.unity" ], + "SerializedFileDependencies": [ 0, 1, 9 ], + "ContentHash": "c271b85494f5e4cc35c4ec4a776324af" +} +``` + +So this scene lives in `c271b85494f5e4cc35c4ec4a776324af.cf`, and depends on three other files: the +built-in `unity default resources` entry, the Content File built from `Resources/unity_builtin_extra` +(the default sprite material), and the file holding the Sprite it shows. + +A `LoadableSceneId` reference is an on-demand reference, like a `Loadable`: loading the referencing +file does not load the scene. The file holding the reference records the scene by path in its +`LoadableSceneDependencies`, not in `SerializedFileDependencies`, and nothing appears in its +external-reference table — the serialized `LoadableSceneId` field itself only holds the scene's +GUID. The reference build's `SceneList` asset, a ScriptableObject with a dictionary of +`LoadableSceneId` values, shows this: + +```json +{ + "Index": 7, + "ID": "70a210050f71a924aa83be7146547111.cfid", + "SourceAssets": [ "Assets/ScriptableObjects/SceneList.asset" ], + "SerializedFileDependencies": [ 8 ], + "LoadableSceneDependencies": [ "Assets/Scenes/Scene2.unity", "Assets/Scenes/Scene1.unity" ], + "ContentHash": "8ad4924ac5e264fde63d8e95a0dab8ab" +} +``` ## Build history @@ -157,19 +231,19 @@ ordered list of the files it depends on: ```json { - "Index": 3, + "Index": 5, "ID": "52b43dad178849b42ac753005736e7bb.cfid", "SourceAssets": [ "Assets/ScriptableObjects/ContentDirectoryRoot.asset" ], - "SerializedFileDependencies": [ 4, 2, 6, 7 ], - "ContentHash": "a77f98db89b6aa1aeaaad01d857e5115" + "SerializedFileDependencies": [ 8, 4, 11, 13, 7 ], + "ContentHash": "c0152db4dd710be51b2decb997325f34" } ``` -The `ContentHash` tells us this asset lives in `a77f98db89b6aa1aeaaad01d857e5115.cf`. Dumping that file +The `ContentHash` tells us this asset lives in `c0152db4dd710be51b2decb997325f34.cf`. Dumping that file shows the object's references and the file's external-reference table: ``` -UnityDataTool dump --stdout a77f98db89b6aa1aeaaad01d857e5115.cf +UnityDataTool dump --stdout c0152db4dd710be51b2decb997325f34.cf ``` ``` External References @@ -177,6 +251,7 @@ path(1): "a2a42d71dddef12e8889849faf59bdd7.cfid" GUID: 0000000000000000000000000 path(2): "4038ff673d390134d924b57fcbed0432.cfid" GUID: 00000000000000000000000000000000 Type: 0 path(3): "21679be819d6e9146a63bb02a7e51f2f.cfid" GUID: 00000000000000000000000000000000 Type: 0 path(4): "78532141fd7679a458405eb16bdb75fd.cfid" GUID: 00000000000000000000000000000000 Type: 0 +path(5): "70a210050f71a924aa83be7146547111.cfid" GUID: 00000000000000000000000000000000 Type: 0 ID: -775554941117088049 (ClassID: 114) MonoBehaviour ... @@ -196,29 +271,29 @@ through the build. A key goal of the content directory design is to reduce the a Because of that, the content of the external table is effectively ignored by the loading system for Content File references. What counts is the ordered dependency list in the manifest. The -`"SerializedFileDependencies": [4, 2, 6, 7]` array corresponds, in exact size and order, to the four -entries of the external table. +`"SerializedFileDependencies": [8, 4, 11, 13, 7]` array corresponds, in exact size and order, to the +five entries of the external table. So resolving the reference to `SingleAudioClipLoadableReference` above: 1. The `PPtr` has `m_FileID` 3. A non-zero `m_FileID` is a 1-based index into the external table (0 would mean "this same file"). -2. Index 3 maps to the 3rd entry of `SerializedFileDependencies`, which is `6`. -3. `ContentLayout.json` entry with `"Index": 6` is `SingleAudioClipLoadableReference.asset`, whose +2. Index 3 maps to the 3rd entry of `SerializedFileDependencies`, which is `11`. +3. `ContentLayout.json` entry with `"Index": 11` is `SingleAudioClipLoadableReference.asset`, whose `ContentHash` is `5c43454a3823f172a2a326410a36ba6b`. 4. The referenced file is therefore `5c43454a3823f172a2a326410a36ba6b.cf`. -The full mapping for this file, showing how each `m_FileID` in the external table resolves through the -dependency list `[4, 2, 6, 7]` to a content-hash filename: +A partial mapping for this file, showing how `m_FileID` values in the external table resolve through +the dependency list `[8, 4, 11, 13, 7]` to a content-hash filename: ```mermaid flowchart TD - Root["ContentDirectoryRoot
cfid 52b43dad…
file a77f98db….cf
deps [4, 2, 6, 7]"] - Loadable["LoadableAudioClipReference
Index 2 · cfid 4038ff67…
file bfcf18a2….cf"] - Single["SingleAudioClipLoadableReference
Index 6 · cfid 21679be8…
file 5c43454a….cf"] + Root["ContentDirectoryRoot
cfid 52b43dad…
file c0152db4….cf
deps [8, 4, 11, 13, 7]"] + Loadable["LoadableAudioClipReference
Index 4 · cfid 4038ff67…
file bfcf18a2….cf"] + Single["SingleAudioClipLoadableReference
Index 11 · cfid 21679be8…
file 5c43454a….cf"] - Root -->|"m_FileID 2 → dep 2 → Index 2"| Loadable - Root -->|"m_FileID 3 → dep 6 → Index 6"| Single + Root -->|"m_FileID 2 → dep 4 → Index 4"| Loadable + Root -->|"m_FileID 3 → dep 11 → Index 11"| Single ``` > [!NOTE] diff --git a/Documentation/playerbuild-format.md b/Documentation/playerbuild-format.md index 56e574f..7fa4089 100644 --- a/Documentation/playerbuild-format.md +++ b/Documentation/playerbuild-format.md @@ -41,7 +41,7 @@ files directly, but they show up throughout UnityDataTool output: | `resources.assets` | Everything found in `Resources` folders, whether or not a scene references it. Loadable at runtime with `Resources.Load`. | | `globalgamemanagers` | Core engine data and global project settings (Quality, Graphics, Physics, Tags, Layers, and so on). | | `globalgamemanagers.assets` | Assets referenced from `globalgamemanagers` (for example a render-pipeline settings ScriptableObject). | -| `Resources/unity_builtin_extra` | Built-in shaders and resources, when referenced by the build. | +| `Resources/unity_builtin_extra` | The shaders in the project's **Always Included Shaders** list, compiled for the target platform. | | `Resources/unity default resources` | Built-in assets (default materials, fonts, meshes) shipped with the Editor. | Each SerializedFile can be accompanied by binary companion files: @@ -199,10 +199,15 @@ differently from the rest of the build output: errors when analyzing it, even in a build made with TypeTrees enabled (see [TypeTrees in the Player](#typetrees-in-the-player)). - **`Resources/unity_builtin_extra`** — built-in shaders (for the Built-in Render Pipeline), stored - in the editor as uncompiled shader source. Only the built-in shaders actually referenced by your content are - compiled and written into the build output. The file is small or absent when you use a scriptable - render pipeline such as URP or HDRP. The project's "Always Included Shaders" list forces specific shaders in even when nothing - references them directly — useful for shaders you locate at runtime with `Shader.Find()`. + in the editor as uncompiled shader source. The player's copy of this file is generated by the + build and holds only the shaders in the project's **Always Included Shaders** list (Graphics + Settings), compiled for the target platform. Built-in shaders that content references without + being in that list are copied into the regular content files like any other asset. The file is + small or absent when you use a scriptable render pipeline such as URP or HDRP. The Always + Included list serves two purposes: it makes those shaders findable at runtime with + `Shader.Find()`, and it is what AssetBundles built with `BuildPipeline.BuildAssetBundles` + rely on when they reference built-in shaders from this file instead of embedding copies (see + [Built-in resources](assetbundle-format.md#built-in-resources) on the AssetBundle page). ## TypeTrees in the Player diff --git a/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles index ebb2351..0fa34fe 100644 Binary files a/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles and b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles.manifest b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles.manifest index 1e77c6d..d3bcfd7 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles.manifest +++ b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/AssetBundles.manifest @@ -1,6 +1,6 @@ ManifestFileVersion: 0 -UnityVersion: 6000.6.0b3 -CRC: 3235539447 +UnityVersion: 6000.6.0b5 +CRC: 3421127840 HashAppended: 0 AssetBundleManifest: AssetBundleInfos: @@ -28,3 +28,6 @@ AssetBundleManifest: Info_5: Name: a Dependencies: {} + Info_6: + Name: scenes + Dependencies: {} diff --git a/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/scenes b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/scenes new file mode 100644 index 0000000..91ea299 Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/scenes differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/scenes.manifest b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/scenes.manifest new file mode 100644 index 0000000..e013f7d --- /dev/null +++ b/TestCommon/Data/LeadingEdgeBuilds/AssetBundles/scenes.manifest @@ -0,0 +1,42 @@ +ManifestFileVersion: 0 +UnityVersion: 6000.6.0b5 +CRC: 2898964469 +Hashes: + AssetFileHash: + serializedVersion: 2 + Hash: d8376e25b646b14d36812f6e9b0b1eaa + TypeTreeHash: + serializedVersion: 2 + Hash: ac9f267e89a2ef550e0850cabce2b0d3 + IncrementalBuildHash: + serializedVersion: 2 + Hash: 219f878f01ce3e202ce41dc4589c7036 +HashAppended: 0 +ClassTypes: +- Class: 1 + Script: {instanceID: 0} +- Class: 4 + Script: {instanceID: 0} +- Class: 21 + Script: {instanceID: 0} +- Class: 28 + Script: {instanceID: 0} +- Class: 48 + Script: {instanceID: 0} +- Class: 89 + Script: {instanceID: 0} +- Class: 104 + Script: {instanceID: 0} +- Class: 157 + Script: {instanceID: 0} +- Class: 196 + Script: {instanceID: 0} +- Class: 212 + Script: {instanceID: 0} +- Class: 213 + Script: {instanceID: 0} +SerializeReferenceClassIdentifiers: [] +Assets: +- Assets/Scenes/Scene1.unity +- Assets/Scenes/Scene2.unity +Dependencies: [] diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-AssetBundles/LastBuild.buildreport b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-AssetBundles/LastBuild.buildreport index d52d4d7..ea5cff3 100644 Binary files a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-AssetBundles/LastBuild.buildreport and b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-AssetBundles/LastBuild.buildreport differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildContentTEP.json b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildContentTEP.json index c21ed12..3604806 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildContentTEP.json +++ b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildContentTEP.json @@ -11,145 +11,198 @@ "PhysicalProcessorCount": 16, "PhysicalMemoryMB": 65277, "traceEvents": [ -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348514934662, "dur": 24055, "name": "ApplyBuildHistoryRetention"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348514958721, "dur": 3987542, "name": "UnifiedBuild"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348514958773, "dur": 71, "name": "Validate Root Assets"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348514962417, "dur": 20702, "name": "InitializeBuildCallbacks:BuildProcessors, SceneProcessors, FilterAssembliesProcessors, ShaderProcessors, ComputeShaderProcessors"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348514983138, "dur": 16, "name": "OnBuildStepBegin", "args": {"step": "Refresh Asset Database", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348514983461, "dur": 32460, "name": "BuildPipeline::RegisterCustomDependencies"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515016217, "dur": 257, "name": "OnBuildStepEnd", "args": {"step": "Refresh Asset Database", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515016540, "dur": 13, "name": "OnBuildStepBegin", "args": {"step": "Call Pre-Process callbacks", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515017348, "dur": 159, "name": "ContentSelectionBuildPreprocessor.OnPreprocessBuild:WithContext"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515017525, "dur": 9, "name": "OnBuildStepEnd", "args": {"step": "Call Pre-Process callbacks", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515017565, "dur": 21495, "name": "ConfigureTargetPlatform"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515017568, "dur": 7, "name": "OnBuildStepBegin", "args": {"step": "Configure target platform", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515021372, "dur": 17639, "name": "CompressAssets"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515039016, "dur": 21, "name": "OnBuildStepEnd", "args": {"step": "Configure target platform", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515039061, "dur": 2419319, "name": "ReCompileScripts"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348515039067, "dur": 12, "name": "OnBuildStepBegin", "args": {"step": "Compile scripts", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348517458313, "dur": 29, "name": "OnBuildStepEnd", "args": {"step": "Compile scripts", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348517458672, "dur": 1419, "name": "LoadingTypeDB"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348517460104, "dur": 3037, "name": "DeleteCachedBuildArtifacts"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348517463151, "dur": 1337275, "name": "GatherBuildMetaData"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348517463163, "dur": 20, "name": "OnBuildStepBegin", "args": {"step": "Gather and collect build metadata", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348517463494, "dur": 1336793, "name": "BuildPipeline::GatherAllAssetMetadata"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800292, "dur": 14, "name": "BuildPipeline::GatherMainObjectIdsForInitialAssets"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800311, "dur": 2, "name": "BuildPipeline::GatherBuiltInObjectIds"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800318, "dur": 4, "name": "BuildPipeline::BuildObjectIdToGlobalObjectIdMap"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800325, "dur": 5, "name": "BuildPipeline::BuildObjectIdToObjectBuildMetaDataMap"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800336, "dur": 16, "name": "BuildPipeline::CombineGlobalUsageFromMetadata"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800384, "dur": 15, "name": "OnBuildStepEnd", "args": {"step": "Gather and collect build metadata", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800434, "dur": 13, "name": "OnBuildStepBegin", "args": {"step": "Calculate build layout", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800775, "dur": 148, "name": "BuildLayout"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800926, "dur": 7, "name": "OnBuildStepEnd", "args": {"step": "Calculate build layout", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518800959, "dur": 9, "name": "OnBuildStepBegin", "args": {"step": "Aggregate build usage for objects", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801264, "dur": 14, "name": "BuildPipeline::AggregateBuildUsageForObjectIds"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801279, "dur": 6, "name": "OnBuildStepEnd", "args": {"step": "Aggregate build usage for objects", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801304, "dur": 5, "name": "OnBuildStepBegin", "args": {"step": "Generate build instructions", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801497, "dur": 110, "name": "BuildPipeline::BuildInstructionHelper::GenerateBuildInstructions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801505, "dur": 28, "name": "GenerateBuildInstruction"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801545, "dur": 12, "name": "GenerateBuildInstruction"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801563, "dur": 11, "name": "GenerateBuildInstruction"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801577, "dur": 5, "name": "GenerateBuildInstruction"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801585, "dur": 3, "name": "GenerateBuildInstruction"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801592, "dur": 5, "name": "GenerateBuildInstruction"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801601, "dur": 5, "name": "GenerateBuildInstruction"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801613, "dur": 62015, "name": "SerializeInstructions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801618, "dur": 8, "name": "OnBuildStepBegin", "args": {"step": "Serialize build instructions", "depth": "2"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801806, "dur": 4632, "name": "SerializeBuildInstructions", "args": {"Count": "7", "changedCount": "7", "unchangedCount": "0", "bytesWritten": "3600", "bytesHashed": "3600"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801809, "dur": 50, "name": "InstructionSet:LoadVersions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801859, "dur": 5, "name": "InstructionSet:HashInstructions", "args": {"totalBytesHashed": "3600"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801867, "dur": 34, "name": "InstructionSet:PrepareWriteTasks", "args": {"taskCount": "7", "bytesWritten": "3600"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518801902, "dur": 4229, "name": "InstructionSet:WriteChangedInstructions", "args": {"changedCount": "7", "bytesWritten": "3600"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518806133, "dur": 277, "name": "InstructionSet:UpdateVersionMap"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518806439, "dur": 57152, "name": "AssetDatabase Refresh"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863595, "dur": 10, "name": "OnBuildStepEnd", "args": {"step": "Serialize build instructions", "depth": "2"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863629, "dur": 3, "name": "OnBuildStepEnd", "args": {"step": "Generate build instructions", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863659, "dur": 6, "name": "OnBuildStepBegin", "args": {"step": "Execute instructions", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863943, "dur": 51804, "name": "ExecuteBuildInstructions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863951, "dur": 51795, "name": "BuildPipeline::BuildInstructionHelper::ProduceSerializedFilesForBuildInstructions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863953, "dur": 30, "name": "Build Instructions to GUIDs"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863984, "dur": 5, "name": "Filter Up to Date Build Instructions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863990, "dur": 818, "name": "Precompile Shaders From Build Instructions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518863991, "dur": 7, "name": "OnBuildStepBegin", "args": {"step": "Precompile Shaders", "depth": "2"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518864319, "dur": 455, "name": "BuildPipeline::PreCompileShadersFromInstructions"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518864762, "dur": 11, "name": "BuildPipeline::PreCompileShaders"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518864776, "dur": 12, "name": "OnBuildStepEnd", "args": {"step": "Precompile Shaders", "depth": "2"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518864810, "dur": 16, "name": "OnBuildStepBegin", "args": {"step": "Write serialized files", "depth": "2"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518865016, "dur": 50669, "name": "Write serialized files"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518915692, "dur": 21, "name": "OnBuildStepEnd", "args": {"step": "Write serialized files", "depth": "2"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518915748, "dur": 3, "name": "OnBuildStepEnd", "args": {"step": "Execute instructions", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518915760, "dur": 662, "name": "BuildPipeline::BuildInstructionHelper::PopulateContentFileBuildResults"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518916428, "dur": 16, "name": "OnBuildStepBegin", "args": {"step": "Generate build manifest", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518916754, "dur": 130, "name": "BuildPipeline::CreateManifestJsonText"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518916884, "dur": 111, "name": "WriteBuildManifestToUDS"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518917026, "dur": 7, "name": "OnBuildStepEnd", "args": {"step": "Generate build manifest", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518917050, "dur": 6809, "name": "BuildPipeline::ExportPlayerArtifactsToDirectory"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518923907, "dur": 19, "name": "OnBuildStepBegin", "args": {"step": "Clean output directory", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518924245, "dur": 122, "name": "BuildPipeline::CleanupUnreferencedFilesFromBuildOutput"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518924370, "dur": 8, "name": "OnBuildStepEnd", "args": {"step": "Clean output directory", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518924623, "dur": 2019, "name": "PopulateBuildReport"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518924627, "dur": 17, "name": "OnBuildStepBegin", "args": {"step": "Populate build report", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518924990, "dur": 1524, "name": "BuildPipeline::CalculateAndRecordContentSummary"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518926585, "dur": 34, "name": "OnBuildStepEnd", "args": {"step": "Populate build report", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518926647, "dur": 10, "name": "OnBuildStepBegin", "args": {"step": "Record type usage", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518926897, "dur": 8858, "name": "BuildPipeline::WriteTypeUsage"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518927747, "dur": 5351, "name": "BuildPipeline::PopulateRuntimeClassRegistry"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518935763, "dur": 18, "name": "OnBuildStepEnd", "args": {"step": "Record type usage", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518935822, "dur": 9, "name": "OnBuildStepBegin", "args": {"step": "Generate build layout", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518936167, "dur": 232, "name": "BuildPipeline::CreateLayoutJsonText"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518936728, "dur": 11, "name": "OnBuildStepEnd", "args": {"step": "Generate build layout", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518936909, "dur": 11, "name": "OnBuildStepBegin", "args": {"step": "Finalize ContentBuildRoot", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518937323, "dur": 6, "name": "OnBuildStepEnd", "args": {"step": "Finalize ContentBuildRoot", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518937346, "dur": 0, "name": "ResetActiveTargetPlatform"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518937347, "dur": 862, "name": "BuildPipeline::CleanupAfterBuild"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518937349, "dur": 5, "name": "OnBuildStepBegin", "args": {"step": "Clean up after build", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518938182, "dur": 7, "name": "OnBuildStepEnd", "args": {"step": "Clean up after build", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518938236, "dur": 7667, "name": "Unloading unused assets immediately"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518938239, "dur": 6, "name": "OnBuildStepBegin", "args": {"step": "Unloading unused assets", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518945849, "dur": 23, "name": "OnBuildStepEnd", "args": {"step": "Unloading unused assets", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518946260, "dur": 0, "name": "ResetActiveTargetPlatform"}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518946268, "dur": 14, "name": "OnBuildStepBegin", "args": {"step": "Call Post-Process callbacks", "depth": "1"}}, -{"pid": 29752, "tid": 70424, "ph": "X", "ts": 348518947099, "dur": 44, "name": "OnBuildStepEnd", "args": {"step": "Call Post-Process callbacks", "depth": "1"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518756877, "dur": 13547, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/ContentDirectoryRoot.asset"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518756942, "dur": 1451, "name": "LoadingTypeDB"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518758425, "dur": 11786, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518779523, "dur": 1719, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/LoadableAudioClipReference.asset"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518779591, "dur": 1529, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518783243, "dur": 2393, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/SerializationDemo.asset"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518783307, "dur": 2206, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518787014, "dur": 313, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scripts/DirectScriptableObjectReference.cs"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518787077, "dur": 158, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518788214, "dur": 2541, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/SingleAudioClipLoadableReference.asset"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518788264, "dur": 2341, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518792334, "dur": 588, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Audio/a.mp3"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518792397, "dur": 434, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518793893, "dur": 348, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scripts/SerializationDemo.cs"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518793985, "dur": 159, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518795268, "dur": 691, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Audio/6.mp3"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518795330, "dur": 532, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518797133, "dur": 303, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scripts/LoadableAudioClipReference.cs"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518797192, "dur": 148, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518874839, "dur": 9346, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/21679be819d6e9146a63bb02a7e51f2f.buildinst"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518874980, "dur": 9148, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/21679be819d6e9146a63bb02a7e51f2f.cfid"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518875111, "dur": 495, "name": "BuildPipeline::PopulateWriteData"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518887808, "dur": 1860, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/4038ff673d390134d924b57fcbed0432.buildinst"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518887957, "dur": 1675, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/4038ff673d390134d924b57fcbed0432.cfid"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518888004, "dur": 424, "name": "BuildPipeline::PopulateWriteData"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518891559, "dur": 3033, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/52b43dad178849b42ac753005736e7bb.buildinst"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518891656, "dur": 2892, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/52b43dad178849b42ac753005736e7bb.cfid"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518891716, "dur": 1153, "name": "BuildPipeline::PopulateWriteData"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518896534, "dur": 1815, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/20408785117e138f38c2cc4ca0e638c8.buildinst"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518896651, "dur": 1663, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/20408785117e138f38c2cc4ca0e638c8.cfid"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518896689, "dur": 585, "name": "BuildPipeline::PopulateWriteData"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518900105, "dur": 1191, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/a2a42d71dddef12e8889849faf59bdd7.buildinst"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518900210, "dur": 1050, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/a2a42d71dddef12e8889849faf59bdd7.cfid"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518900226, "dur": 12, "name": "BuildPipeline::PopulateWriteData"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518902916, "dur": 1357, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/dd30e3af3b8bddf1ea36d768fc41aafd.buildinst"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518903016, "dur": 1224, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/dd30e3af3b8bddf1ea36d768fc41aafd.cfid"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518903046, "dur": 339, "name": "BuildPipeline::PopulateWriteData"}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518905821, "dur": 2779, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/78532141fd7679a458405eb16bdb75fd.buildinst"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518905930, "dur": 2632, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/78532141fd7679a458405eb16bdb75fd.cfid"}}, -{"pid": 14952, "tid": 41256, "ph": "X", "ts": 348518905952, "dur": 380, "name": "BuildPipeline::PopulateWriteData"} +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362598077, "dur": 34236, "name": "ApplyBuildHistoryRetention"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362632316, "dur": 7444502, "name": "UnifiedBuild"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362632361, "dur": 43, "name": "Validate Root Assets"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362635968, "dur": 38037, "name": "InitializeBuildCallbacks:BuildProcessors, SceneProcessors, FilterAssembliesProcessors, ShaderProcessors, ComputeShaderProcessors"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362674023, "dur": 17, "name": "OnBuildStepBegin", "args": {"step": "Refresh Asset Database", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362674340, "dur": 71987, "name": "BuildPipeline::RegisterCustomDependencies"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362746611, "dur": 248, "name": "OnBuildStepEnd", "args": {"step": "Refresh Asset Database", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362746897, "dur": 13, "name": "OnBuildStepBegin", "args": {"step": "Call Pre-Process callbacks", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362747701, "dur": 106, "name": "ContentSelectionBuildPreprocessor.OnPreprocessBuild:WithContext"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362747816, "dur": 7, "name": "OnBuildStepEnd", "args": {"step": "Call Pre-Process callbacks", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362751163, "dur": 58703, "name": "ConfigureTargetPlatform"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362751166, "dur": 11, "name": "OnBuildStepBegin", "args": {"step": "Configure target platform", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362755616, "dur": 54191, "name": "CompressAssets"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362809813, "dur": 24, "name": "OnBuildStepEnd", "args": {"step": "Configure target platform", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362809868, "dur": 1564153, "name": "ReCompileScripts"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367362809874, "dur": 13, "name": "OnBuildStepBegin", "args": {"step": "Compile scripts", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367364373957, "dur": 27, "name": "OnBuildStepEnd", "args": {"step": "Compile scripts", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367364374447, "dur": 12585, "name": "LoadingTypeDB"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367364387044, "dur": 292487, "name": "DeleteCachedBuildArtifacts"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367364679545, "dur": 4805694, "name": "GatherBuildMetaData"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367364679561, "dur": 22, "name": "OnBuildStepBegin", "args": {"step": "Gather and collect build metadata", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367364679845, "dur": 4805096, "name": "BuildPipeline::GatherAllAssetMetadata"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369484945, "dur": 10, "name": "BuildPipeline::GatherMainObjectIdsForInitialAssets"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369484958, "dur": 46, "name": "BuildPipeline::GatherBuiltInObjectIds"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485008, "dur": 74, "name": "BuildPipeline::BuildObjectIdToGlobalObjectIdMap"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485084, "dur": 50, "name": "BuildPipeline::BuildObjectIdToObjectBuildMetaDataMap"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485138, "dur": 17, "name": "BuildPipeline::CombineGlobalUsageFromMetadata"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485192, "dur": 20, "name": "OnBuildStepEnd", "args": {"step": "Gather and collect build metadata", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485246, "dur": 11, "name": "OnBuildStepBegin", "args": {"step": "Calculate build layout", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485546, "dur": 154, "name": "BuildLayout"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485702, "dur": 7, "name": "OnBuildStepEnd", "args": {"step": "Calculate build layout", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369485727, "dur": 8, "name": "OnBuildStepBegin", "args": {"step": "Aggregate build usage for objects", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486002, "dur": 17, "name": "BuildPipeline::AggregateBuildUsageForObjectIds"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486020, "dur": 5, "name": "OnBuildStepEnd", "args": {"step": "Aggregate build usage for objects", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486042, "dur": 5, "name": "OnBuildStepBegin", "args": {"step": "Generate build instructions", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486213, "dur": 196, "name": "BuildPipeline::BuildInstructionHelper::GenerateBuildInstructions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486220, "dur": 29, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486261, "dur": 30, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486295, "dur": 3, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486302, "dur": 8, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486316, "dur": 12, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486334, "dur": 16, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486354, "dur": 6, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486364, "dur": 5, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486372, "dur": 5, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486380, "dur": 3, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486387, "dur": 6, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486396, "dur": 3, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486403, "dur": 5, "name": "GenerateBuildInstruction"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486432, "dur": 92721, "name": "SerializeInstructions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486438, "dur": 8, "name": "OnBuildStepBegin", "args": {"step": "Serialize build instructions", "depth": "2"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486639, "dur": 4466, "name": "SerializeBuildInstructions", "args": {"Count": "13", "changedCount": "13", "unchangedCount": "0", "bytesWritten": "8288", "bytesHashed": "8288"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486640, "dur": 49, "name": "InstructionSet:LoadVersions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486690, "dur": 6, "name": "InstructionSet:HashInstructions", "args": {"totalBytesHashed": "8288"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486698, "dur": 41, "name": "InstructionSet:PrepareWriteTasks", "args": {"taskCount": "13", "bytesWritten": "8288"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369486740, "dur": 4098, "name": "InstructionSet:WriteChangedInstructions", "args": {"changedCount": "13", "bytesWritten": "8288"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369490840, "dur": 234, "name": "InstructionSet:UpdateVersionMap"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369491106, "dur": 87994, "name": "AssetDatabase Refresh"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579106, "dur": 17, "name": "OnBuildStepEnd", "args": {"step": "Serialize build instructions", "depth": "2"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579154, "dur": 3, "name": "OnBuildStepEnd", "args": {"step": "Generate build instructions", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579184, "dur": 8, "name": "OnBuildStepBegin", "args": {"step": "Execute instructions", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579496, "dur": 444475, "name": "ExecuteBuildInstructions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579502, "dur": 444468, "name": "BuildPipeline::BuildInstructionHelper::ProduceSerializedFilesForBuildInstructions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579503, "dur": 49, "name": "Build Instructions to GUIDs"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579553, "dur": 12, "name": "Filter Up to Date Build Instructions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579566, "dur": 343033, "name": "Precompile Shaders From Build Instructions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579568, "dur": 8, "name": "OnBuildStepBegin", "args": {"step": "Precompile Shaders", "depth": "2"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369579840, "dur": 342697, "name": "BuildPipeline::PreCompileShadersFromInstructions"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369580263, "dur": 342246, "name": "BuildPipeline::PreCompileShaders"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369580283, "dur": 342214, "name": "Compiling Shader", "args": {"Shader": "Sprites/Default"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369602565, "dur": 8652, "name": "OnPreprocessShaderVariants", "args": {"shader": "Sprites/Default"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369611626, "dur": 199, "name": "OnPreprocessShaderVariants", "args": {"shader": "Sprites/Default"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369612128, "dur": 194, "name": "OnPreprocessShaderVariants", "args": {"shader": "Sprites/Default"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369612567, "dur": 180, "name": "OnPreprocessShaderVariants", "args": {"shader": "Sprites/Default"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369922544, "dur": 25, "name": "OnBuildStepEnd", "args": {"step": "Precompile Shaders", "depth": "2"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369922602, "dur": 14, "name": "OnBuildStepBegin", "args": {"step": "Write serialized files", "depth": "2"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367369922910, "dur": 101013, "name": "Write serialized files"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370023928, "dur": 16, "name": "OnBuildStepEnd", "args": {"step": "Write serialized files", "depth": "2"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370023972, "dur": 3, "name": "OnBuildStepEnd", "args": {"step": "Execute instructions", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370023984, "dur": 1131, "name": "BuildPipeline::BuildInstructionHelper::PopulateContentFileBuildResults"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370025121, "dur": 13, "name": "OnBuildStepBegin", "args": {"step": "Generate build manifest", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370025432, "dur": 161, "name": "BuildPipeline::CreateManifestJsonText"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370025594, "dur": 99, "name": "WriteBuildManifestToUDS"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370025724, "dur": 6, "name": "OnBuildStepEnd", "args": {"step": "Generate build manifest", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370025744, "dur": 16437, "name": "BuildPipeline::ExportPlayerArtifactsToDirectory"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370042255, "dur": 31, "name": "OnBuildStepBegin", "args": {"step": "Clean output directory", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370042675, "dur": 844, "name": "BuildPipeline::CleanupUnreferencedFilesFromBuildOutput"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370043525, "dur": 22, "name": "OnBuildStepEnd", "args": {"step": "Clean output directory", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370044119, "dur": 2573, "name": "PopulateBuildReport"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370044126, "dur": 23, "name": "OnBuildStepBegin", "args": {"step": "Populate build report", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370044532, "dur": 2027, "name": "BuildPipeline::CalculateAndRecordContentSummary"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370046649, "dur": 16, "name": "OnBuildStepEnd", "args": {"step": "Populate build report", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370046698, "dur": 11, "name": "OnBuildStepBegin", "args": {"step": "Record type usage", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370046975, "dur": 5926, "name": "BuildPipeline::WriteTypeUsage"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370047732, "dur": 1663, "name": "BuildPipeline::PopulateRuntimeClassRegistry"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370052908, "dur": 20, "name": "OnBuildStepEnd", "args": {"step": "Record type usage", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370052970, "dur": 8, "name": "OnBuildStepBegin", "args": {"step": "Generate build layout", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370053283, "dur": 348, "name": "BuildPipeline::CreateLayoutJsonText"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370054085, "dur": 13, "name": "OnBuildStepEnd", "args": {"step": "Generate build layout", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370054366, "dur": 13, "name": "OnBuildStepBegin", "args": {"step": "Finalize ContentBuildRoot", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370054757, "dur": 6, "name": "OnBuildStepEnd", "args": {"step": "Finalize ContentBuildRoot", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370054779, "dur": 0, "name": "ResetActiveTargetPlatform"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370054781, "dur": 8607, "name": "BuildPipeline::CleanupAfterBuild"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370054782, "dur": 6, "name": "OnBuildStepBegin", "args": {"step": "Clean up after build", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370063334, "dur": 15, "name": "OnBuildStepEnd", "args": {"step": "Clean up after build", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370063390, "dur": 10762, "name": "Unloading unused assets immediately"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370063393, "dur": 8, "name": "OnBuildStepBegin", "args": {"step": "Unloading unused assets", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370074105, "dur": 22, "name": "OnBuildStepEnd", "args": {"step": "Unloading unused assets", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370076813, "dur": 1, "name": "ResetActiveTargetPlatform"}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370076822, "dur": 16, "name": "OnBuildStepBegin", "args": {"step": "Call Post-Process callbacks", "depth": "1"}}, +{"pid": 69268, "tid": 67564, "ph": "X", "ts": 367370077629, "dur": 8, "name": "OnBuildStepEnd", "args": {"step": "Call Post-Process callbacks", "depth": "1"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368569908, "dur": 36341, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/ContentDirectoryRoot.asset"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368569990, "dur": 15153, "name": "LoadingTypeDB"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368585199, "dur": 20723, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368620401, "dur": 2803, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/SceneList.asset"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368620488, "dur": 2522, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368630899, "dur": 2304, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/LoadableAudioClipReference.asset"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368631008, "dur": 2052, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368635069, "dur": 2965, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/SerializationDemo.asset"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368635173, "dur": 2695, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368639960, "dur": 4252, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Audio/a.mp3"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368640015, "dur": 4049, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368645709, "dur": 254483, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scenes/Scene2.unity"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368652566, "dur": 4569, "name": "InitializeBuildCallbacks:SceneProcessors"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368657205, "dur": 55295, "name": "BuildPipeline::CalculateBuildMetaDataForScene"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368699911, "dur": 1934, "name": "UGUIBuildAnalytics.OnProcessScene:WithReport:Scene2"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368701870, "dur": 3614, "name": "TimelineAnalyticsProcess.OnProcessScene:WithReport:Scene2"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368705508, "dur": 671, "name": "MuiltiplayerRolesScenePostprocessor.OnProcessScene:WithReport:Scene2"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368706196, "dur": 2011, "name": "UnityBuildPostprocessor.OnProcessScene:WithReport:Scene2"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368914029, "dur": 486, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scripts/SceneList.cs"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368914139, "dur": 239, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368916085, "dur": 562, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scripts/SerializationDemo.cs"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368916160, "dur": 245, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368918359, "dur": 2405, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Textures/GreenStatic.png"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368918510, "dur": 1919, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368922591, "dur": 49503, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/0000000000000000e000000000000000.metadataimportproxy"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368922667, "dur": 49117, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368974934, "dur": 394, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scripts/DirectScriptableObjectReference.cs"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368975008, "dur": 198, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368976516, "dur": 382697, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/0000000000000000f000000000000000.metadataimportproxy"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367368976577, "dur": 382386, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369360749, "dur": 1514, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/ScriptableObjects/SingleAudioClipLoadableReference.asset"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369360818, "dur": 1316, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369363654, "dur": 13755, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scenes/Scene1.unity"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369363742, "dur": 92, "name": "InitializeBuildCallbacks:SceneProcessors"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369363874, "dur": 9393, "name": "BuildPipeline::CalculateBuildMetaDataForScene"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369371340, "dur": 12, "name": "UGUIBuildAnalytics.OnProcessScene:WithReport:Scene1"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369371360, "dur": 25, "name": "TimelineAnalyticsProcess.OnProcessScene:WithReport:Scene1"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369371390, "dur": 8, "name": "MuiltiplayerRolesScenePostprocessor.OnProcessScene:WithReport:Scene1"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369371402, "dur": 43, "name": "UnityBuildPostprocessor.OnProcessScene:WithReport:Scene1"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369478448, "dur": 870, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Audio/6.mp3"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369478550, "dur": 670, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369480842, "dur": 329, "name": "BuildMetaDataImporter(worker)", "args": {"assetPath": "Assets/Scripts/LoadableAudioClipReference.cs"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369480906, "dur": 164, "name": "BuildPipeline::CalculateBuildMetaDataForAsset"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369925282, "dur": 6406, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/21679be819d6e9146a63bb02a7e51f2f.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369925403, "dur": 6240, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/21679be819d6e9146a63bb02a7e51f2f.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369925632, "dur": 722, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369933892, "dur": 1565, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/4038ff673d390134d924b57fcbed0432.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369934003, "dur": 1419, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/4038ff673d390134d924b57fcbed0432.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369934044, "dur": 375, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369937330, "dur": 10975, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/590cfeb4e0ff90f4e92f9e1262bcfe6f.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369937439, "dur": 8824, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/590cfeb4e0ff90f4e92f9e1262bcfe6f.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369944428, "dur": 12, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369957909, "dur": 2040, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/34814583296b527bf650f548effcd62c.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369958063, "dur": 1842, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/34814583296b527bf650f548effcd62c.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369958084, "dur": 483, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369961954, "dur": 3038, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/52b43dad178849b42ac753005736e7bb.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369962061, "dur": 2894, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/52b43dad178849b42ac753005736e7bb.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369962142, "dur": 1390, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369966962, "dur": 1838, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/baf46637edbb6ff884858f6630b66eda.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369967066, "dur": 1699, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/baf46637edbb6ff884858f6630b66eda.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369967083, "dur": 481, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369970678, "dur": 6548, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/0000000000000000f000000000000000.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369970800, "dur": 6348, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/0000000000000000f000000000000000.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369970814, "dur": 7, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369979323, "dur": 1741, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/20408785117e138f38c2cc4ca0e638c8.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369979434, "dur": 1596, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/20408785117e138f38c2cc4ca0e638c8.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369979474, "dur": 476, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369982756, "dur": 1623, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/a2a42d71dddef12e8889849faf59bdd7.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369982863, "dur": 1477, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/a2a42d71dddef12e8889849faf59bdd7.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369982881, "dur": 9, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369986184, "dur": 1620, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/70a210050f71a924aa83be7146547111.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369986298, "dur": 1472, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/70a210050f71a924aa83be7146547111.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369986324, "dur": 387, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369989676, "dur": 9586, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/162c015549f8733449ac70ae78ad3aa5.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369989789, "dur": 7521, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/162c015549f8733449ac70ae78ad3aa5.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367369996158, "dur": 12, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367370009818, "dur": 1787, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/dd30e3af3b8bddf1ea36d768fc41aafd.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367370009956, "dur": 1611, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/dd30e3af3b8bddf1ea36d768fc41aafd.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367370010006, "dur": 427, "name": "BuildPipeline::PopulateWriteData"}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367370013464, "dur": 2861, "name": "BuildInstructionImporter(worker)", "args": {"assetPath": "Library/BuildInstructions/78532141fd7679a458405eb16bdb75fd.buildinst"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367370013572, "dur": 2713, "name": "BuildPipeline::WriteSerializedFile", "args": {"filePath": "mem:/Temp/78532141fd7679a458405eb16bdb75fd.cfid"}}, +{"pid": 60488, "tid": 12660, "ph": "X", "ts": 367370013598, "dur": 429, "name": "BuildPipeline::PopulateWriteData"} ] } \ No newline at end of file diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildLog.jsonl b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildLog.jsonl index d1794ec..018a102 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildLog.jsonl +++ b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildLog.jsonl @@ -1,45 +1,46 @@ -{"timestamp":"2026-07-14T13:23:06.522283400Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"BuildStart\",\"rootAssetCount\":1,\"startTime\":\"2026-07-14T13:23:06.5007879Z\",\"targetPlatform\":19,\"subtarget\":2,\"metadataPath\":\"Library/BuildHistory/20260714-132306Z-ff7b7f37\",\"outputPath\":\"C:/UnitySrc/UnityDataTools_Cursor/UnityProjects/LeadingEdge/../../TestCommon/Data/LeadingEdgeBuilds/ContentDirectory\",\"rootAssetPaths\":[\"Assets/ScriptableObjects/ContentDirectoryRoot.asset\"]}"} -{"timestamp":"2026-07-14T13:23:06.571372500Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Refresh Asset Database\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:06.604701500Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Refresh Asset Database\",\"depth\":1,\"durationTicks\":327896}"} -{"timestamp":"2026-07-14T13:23:06.604734600Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Call Pre-Process callbacks\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:06.605722400Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Call Pre-Process callbacks\",\"depth\":1,\"durationTicks\":9839}"} -{"timestamp":"2026-07-14T13:23:06.605756300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Configure target platform\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:06.627229800Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Configure target platform\",\"depth\":1,\"durationTicks\":214462}"} -{"timestamp":"2026-07-14T13:23:06.627260000Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Compile scripts\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:09.046579700Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Compile scripts\",\"depth\":1,\"durationTicks\":24192704}"} -{"timestamp":"2026-07-14T13:23:09.051409400Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Gather and collect build metadata\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.388643100Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Gather and collect build metadata\",\"depth\":1,\"durationTicks\":13372389}"} -{"timestamp":"2026-07-14T13:23:10.388676300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Calculate build layout\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.389173800Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Calculate build layout\",\"depth\":1,\"durationTicks\":4908}"} -{"timestamp":"2026-07-14T13:23:10.389196700Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Aggregate build usage for objects\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.389519400Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Aggregate build usage for objects\",\"depth\":1,\"durationTicks\":3200}"} -{"timestamp":"2026-07-14T13:23:10.389538100Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Generate build instructions\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.389858900Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Serialize build instructions\",\"depth\":2}"} -{"timestamp":"2026-07-14T13:23:10.451848300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Serialize build instructions\",\"depth\":2,\"durationTicks\":619781}"} -{"timestamp":"2026-07-14T13:23:10.451861200Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Generate build instructions\",\"depth\":1,\"durationTicks\":623258}"} -{"timestamp":"2026-07-14T13:23:10.451895100Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Execute instructions\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.452231500Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Precompile Shaders\",\"depth\":2}"} -{"timestamp":"2026-07-14T13:23:10.453028500Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Precompile Shaders\",\"depth\":2,\"durationTicks\":7835}"} -{"timestamp":"2026-07-14T13:23:10.453055900Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Write serialized files\",\"depth\":2}"} -{"timestamp":"2026-07-14T13:23:10.503963700Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Write serialized files\",\"depth\":2,\"durationTicks\":508781}"} -{"timestamp":"2026-07-14T13:23:10.503981300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Execute instructions\",\"depth\":1,\"durationTicks\":520896}"} -{"timestamp":"2026-07-14T13:23:10.504681500Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Generate build manifest\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.505266900Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Generate build manifest\",\"depth\":1,\"durationTicks\":5981}"} -{"timestamp":"2026-07-14T13:23:10.512121800Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"BuildStatistic\",\"context\":\"BuildOutput\",\"statistics\":[{\"name\":\"sizeReusedContentInOutputDirectory\",\"value\":0,\"unit\":\"bytes\"},{\"name\":\"sizeWrittenToOutputDirectory\",\"value\":94871,\"unit\":\"bytes\"},{\"name\":\"filesReusedInOutputDirectory\",\"value\":0,\"unit\":\"count\"},{\"name\":\"filesWrittenToOutputDirectory\",\"value\":10,\"unit\":\"count\"}]}"} -{"timestamp":"2026-07-14T13:23:10.512158900Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Clean output directory\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.512614500Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Clean output directory\",\"depth\":1,\"durationTicks\":4634}"} -{"timestamp":"2026-07-14T13:23:10.512887400Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Populate build report\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.514861400Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Populate build report\",\"depth\":1,\"durationTicks\":19569}"} -{"timestamp":"2026-07-14T13:23:10.514888300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Record type usage\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.524031000Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Record type usage\",\"depth\":1,\"durationTicks\":91106}"} -{"timestamp":"2026-07-14T13:23:10.524063100Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Generate build layout\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.524979300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Generate build layout\",\"depth\":1,\"durationTicks\":9033}"} -{"timestamp":"2026-07-14T13:23:10.525008700Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"BuildStatistic\",\"context\":\"BuildComplete\",\"statistics\":[{\"name\":\"loadableCount\",\"value\":3,\"unit\":\"count\"},{\"name\":\"objectsProcessed\",\"value\":18,\"unit\":\"count\"},{\"name\":\"objectsBuilt\",\"value\":9,\"unit\":\"count\"},{\"name\":\"scenesBuilt\",\"value\":0,\"unit\":\"count\"},{\"name\":\"serializedFilesBuilt\",\"value\":7,\"unit\":\"count\"},{\"name\":\"archivesBuilt\",\"value\":0,\"unit\":\"count\"},{\"name\":\"serializedFilesReused\",\"value\":0,\"unit\":\"count\"},{\"name\":\"serializedFilesRebuilt\",\"value\":7,\"unit\":\"count\"},{\"name\":\"reusedSerializedFileSize\",\"value\":0,\"unit\":\"bytes\"},{\"name\":\"rebuiltSerializedFileSize\",\"value\":15056,\"unit\":\"bytes\"}]}"} -{"timestamp":"2026-07-14T13:23:10.525151200Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Finalize ContentBuildRoot\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.525563900Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Finalize ContentBuildRoot\",\"depth\":1,\"durationTicks\":4126}"} -{"timestamp":"2026-07-14T13:23:10.525585100Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Clean up after build\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.526430300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Clean up after build\",\"depth\":1,\"durationTicks\":8315}"} -{"timestamp":"2026-07-14T13:23:10.526477500Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Unloading unused assets\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.534122600Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Unloading unused assets\",\"depth\":1,\"durationTicks\":76055}"} -{"timestamp":"2026-07-14T13:23:10.534518300Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Call Post-Process callbacks\",\"depth\":1}"} -{"timestamp":"2026-07-14T13:23:10.535402000Z","thread_id":"70424","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Call Post-Process callbacks\",\"depth\":1,\"durationTicks\":8285}"} +{"timestamp":"2026-07-14T18:37:14.230563100Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"BuildStart\",\"rootAssetCount\":1,\"startTime\":\"2026-07-14T18:37:14.2095142Z\",\"targetPlatform\":19,\"subtarget\":2,\"metadataPath\":\"Library/BuildHistory/20260714-183714Z-f64157fb\",\"outputPath\":\"C:/UnitySrc/UnityDataTools/UnityProjects/LeadingEdge/../../TestCommon/Data/LeadingEdgeBuilds/ContentDirectory\",\"rootAssetPaths\":[\"Assets/ScriptableObjects/ContentDirectoryRoot.asset\"]}"} +{"timestamp":"2026-07-14T18:37:14.307101700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Refresh Asset Database\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:14.379914600Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Refresh Asset Database\",\"depth\":1,\"durationTicks\":723116}"} +{"timestamp":"2026-07-14T18:37:14.379954000Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Call Pre-Process callbacks\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:14.380867700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Call Pre-Process callbacks\",\"depth\":1,\"durationTicks\":9190}"} +{"timestamp":"2026-07-14T18:37:14.384219100Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Configure target platform\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:14.442890200Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Configure target platform\",\"depth\":1,\"durationTicks\":586438}"} +{"timestamp":"2026-07-14T18:37:14.442923300Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Compile scripts\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:16.007045100Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Compile scripts\",\"depth\":1,\"durationTicks\":15640772}"} +{"timestamp":"2026-07-14T18:37:16.312658400Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Gather and collect build metadata\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:20.600853000Z","thread_id":"67564","log_level":"Warning","message":"[Worker0] Fallback fonts are not supported in content directory builds. Skipping fallback fonts for font LegacyRuntime."} +{"timestamp":"2026-07-14T18:37:21.118264900Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Gather and collect build metadata\",\"depth\":1,\"durationTicks\":48056324}"} +{"timestamp":"2026-07-14T18:37:21.118294500Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Calculate build layout\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.118751100Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Calculate build layout\",\"depth\":1,\"durationTicks\":4561}"} +{"timestamp":"2026-07-14T18:37:21.118771700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Aggregate build usage for objects\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.119066000Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Aggregate build usage for objects\",\"depth\":1,\"durationTicks\":2929}"} +{"timestamp":"2026-07-14T18:37:21.119082700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Generate build instructions\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.119485600Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Serialize build instructions\",\"depth\":2}"} +{"timestamp":"2026-07-14T18:37:21.212177400Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Serialize build instructions\",\"depth\":2,\"durationTicks\":926677}"} +{"timestamp":"2026-07-14T18:37:21.212194500Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Generate build instructions\",\"depth\":1,\"durationTicks\":931121}"} +{"timestamp":"2026-07-14T18:37:21.212228900Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Execute instructions\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.212616700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Precompile Shaders\",\"depth\":2}"} +{"timestamp":"2026-07-14T18:37:21.555624500Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Precompile Shaders\",\"depth\":2,\"durationTicks\":3429711}"} +{"timestamp":"2026-07-14T18:37:21.555652700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Write serialized files\",\"depth\":2}"} +{"timestamp":"2026-07-14T18:37:21.656995800Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Write serialized files\",\"depth\":2,\"durationTicks\":1013235}"} +{"timestamp":"2026-07-14T18:37:21.657011800Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Execute instructions\",\"depth\":1,\"durationTicks\":4447880}"} +{"timestamp":"2026-07-14T18:37:21.658176900Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Generate build manifest\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.658769600Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Generate build manifest\",\"depth\":1,\"durationTicks\":6036}"} +{"timestamp":"2026-07-14T18:37:21.675268600Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"BuildStatistic\",\"context\":\"BuildOutput\",\"statistics\":[{\"name\":\"sizeReusedContentInOutputDirectory\",\"value\":0,\"unit\":\"bytes\"},{\"name\":\"sizeWrittenToOutputDirectory\",\"value\":980052,\"unit\":\"bytes\"},{\"name\":\"filesReusedInOutputDirectory\",\"value\":0,\"unit\":\"count\"},{\"name\":\"filesWrittenToOutputDirectory\",\"value\":18,\"unit\":\"count\"}]}"} +{"timestamp":"2026-07-14T18:37:21.675327700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Clean output directory\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.676605500Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Clean output directory\",\"depth\":1,\"durationTicks\":12714}"} +{"timestamp":"2026-07-14T18:37:21.677202600Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Populate build report\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.679717700Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Populate build report\",\"depth\":1,\"durationTicks\":25225}"} +{"timestamp":"2026-07-14T18:37:21.679745900Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Record type usage\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.685985100Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Record type usage\",\"depth\":1,\"durationTicks\":62055}"} +{"timestamp":"2026-07-14T18:37:21.686015000Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Generate build layout\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.687145400Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Generate build layout\",\"depth\":1,\"durationTicks\":11120}"} +{"timestamp":"2026-07-14T18:37:21.687177200Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"BuildStatistic\",\"context\":\"BuildComplete\",\"statistics\":[{\"name\":\"loadableCount\",\"value\":3,\"unit\":\"count\"},{\"name\":\"objectsProcessed\",\"value\":810,\"unit\":\"count\"},{\"name\":\"objectsBuilt\",\"value\":28,\"unit\":\"count\"},{\"name\":\"scenesBuilt\",\"value\":2,\"unit\":\"count\"},{\"name\":\"serializedFilesBuilt\",\"value\":13,\"unit\":\"count\"},{\"name\":\"archivesBuilt\",\"value\":0,\"unit\":\"count\"},{\"name\":\"serializedFilesReused\",\"value\":0,\"unit\":\"count\"},{\"name\":\"serializedFilesRebuilt\",\"value\":13,\"unit\":\"count\"},{\"name\":\"reusedSerializedFileSize\",\"value\":0,\"unit\":\"bytes\"},{\"name\":\"rebuiltSerializedFileSize\",\"value\":158832,\"unit\":\"bytes\"}]}"} +{"timestamp":"2026-07-14T18:37:21.687419000Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Finalize ContentBuildRoot\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.687802300Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Finalize ContentBuildRoot\",\"depth\":1,\"durationTicks\":3912}"} +{"timestamp":"2026-07-14T18:37:21.687823800Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Clean up after build\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.696410500Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Clean up after build\",\"depth\":1,\"durationTicks\":85462}"} +{"timestamp":"2026-07-14T18:37:21.696438900Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Unloading unused assets\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.707177300Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Unloading unused assets\",\"depth\":1,\"durationTicks\":107079}"} +{"timestamp":"2026-07-14T18:37:21.709880500Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepStart\",\"stepName\":\"Call Post-Process callbacks\",\"depth\":1}"} +{"timestamp":"2026-07-14T18:37:21.710682200Z","thread_id":"67564","log_level":"Info","message":"{\"type\":\"StepEnd\",\"stepName\":\"Call Post-Process callbacks\",\"depth\":1,\"durationTicks\":8055}"} diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildReportSummary.json b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildReportSummary.json index fb4fdf6..e1bf60d 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildReportSummary.json +++ b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/BuildReportSummary.json @@ -3,7 +3,7 @@ "BuildContentOptions": [ "CleanBuildCache" ], - "BuildManifestHash": "15d5df98d98434e67e06716cfabfad1b", + "BuildManifestHash": "baff06b928d147276f2245dd3b19216a", "BuildName": "ContentDirectory", "BuildOptions": [ "None" @@ -11,17 +11,17 @@ "BuildProfilePath": "", "BuildResult": 1, "BuildResultName": "Succeeded", - "BuildSessionGUID": "ff7b7f370f4f65d4c870bf25d72893e7", - "BuildStartedAt": "2026-07-14T13:23:06.5007879Z", + "BuildSessionGUID": "f64157fb08bb9f645971d39c1203bd03", + "BuildStartedAt": "2026-07-14T18:37:14.2095142Z", "BuildType": 3, "BuildTypeName": "ContentDirectory", - "OutputPath": "C:/UnitySrc/UnityDataTools_Cursor/UnityProjects/LeadingEdge/../../TestCommon/Data/LeadingEdgeBuilds/ContentDirectory", + "OutputPath": "C:/UnitySrc/UnityDataTools/UnityProjects/LeadingEdge/../../TestCommon/Data/LeadingEdgeBuilds/ContentDirectory", "Platform": 19, "PlatformName": "StandaloneWindows64", "Subtarget": 2, "SubtargetName": "Player", "TotalErrors": 0, - "TotalSizeBytes": 94903, - "TotalTimeMs": 4044, - "TotalWarnings": 0 + "TotalSizeBytes": 980084, + "TotalTimeMs": 7515, + "TotalWarnings": 1 } \ No newline at end of file diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentLayout.json b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentLayout.json index 143006c..3fad48c 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentLayout.json +++ b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentLayout.json @@ -1 +1 @@ -{"Version":2,"BuildManifestHash":"15d5df98d98434e67e06716cfabfad1b","SerializedFiles":[{"Index":0,"ID":"Library/unity default resources","IsBuiltIn":true,"SourceAssets":[],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[]},{"Index":1,"ID":"20408785117e138f38c2cc4ca0e638c8.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Audio/6.mp3"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"93bb3159569284a5c7bcceb4acb91bae"},{"Index":2,"ID":"4038ff673d390134d924b57fcbed0432.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/LoadableAudioClipReference.asset"],"LoadableDependencies":["20408785117e138f38c2cc4ca0e638c8","dd30e3af3b8bddf1ea36d768fc41aafd"],"LoadableSceneDependencies":[],"SerializedFileDependencies":[4],"ContentHash":"bfcf18a244e45f867750e0223a9b3a43"},{"Index":3,"ID":"52b43dad178849b42ac753005736e7bb.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/ContentDirectoryRoot.asset"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[4,2,6,7],"ContentHash":"a77f98db89b6aa1aeaaad01d857e5115"},{"Index":4,"ID":"a2a42d71dddef12e8889849faf59bdd7.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Scripts/DirectScriptableObjectReference.cs","Assets/Scripts/LoadableAudioClipReference.cs","Assets/Scripts/SerializationDemo.cs"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"dfa73a08ed0fba634f160c6d26a5e830"},{"Index":5,"ID":"dd30e3af3b8bddf1ea36d768fc41aafd.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Audio/a.mp3"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"730d2d641a53eeb1e633f2ff60d730e9"},{"Index":6,"ID":"21679be819d6e9146a63bb02a7e51f2f.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/SingleAudioClipLoadableReference.asset"],"LoadableDependencies":["dd30e3af3b8bddf1ea36d768fc41aafd"],"LoadableSceneDependencies":[],"SerializedFileDependencies":[4],"ContentHash":"5c43454a3823f172a2a326410a36ba6b"},{"Index":7,"ID":"78532141fd7679a458405eb16bdb75fd.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/SerializationDemo.asset"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[4],"ContentHash":"51690f09f541d7442ce8faf26fd84696"}],"RootAssets":["3dcb957e6cb206bfec2aaadd3d11d85c"],"LoadableObjectIds":[{"ObjectIdHash":"20408785117e138f38c2cc4ca0e638c8","GUID":"278c261333bf8604eb5c83790d02004d","AssetPath":"Assets/Audio/6.mp3","LFID":8300000,"IdentifierType":3,"SerializedFile":1,"OutputLFID":6313987888022012634},{"ObjectIdHash":"3dcb957e6cb206bfec2aaadd3d11d85c","GUID":"52b43dad178849b42ac753005736e7bb","AssetPath":"Assets/ScriptableObjects/ContentDirectoryRoot.asset","LFID":11400000,"IdentifierType":2,"SerializedFile":3,"OutputLFID":-775554941117088049},{"ObjectIdHash":"dd30e3af3b8bddf1ea36d768fc41aafd","GUID":"b65a7916245593b4e89f4bd0aa920533","AssetPath":"Assets/Audio/a.mp3","LFID":8300000,"IdentifierType":3,"SerializedFile":5,"OutputLFID":-6933612096100796476}],"LoadableSceneIds":[],"BinaryArtifacts":[{"Index":0,"ContentHash":"93bb3159569284a5c7bcceb4acb91bae","Category":"contentfile","Size":1288,"ArtifactReferences":[1]},{"Index":1,"ContentHash":"68c9d0b12420e1951eec7790bd0754fe","Category":"audio","Size":30688},{"Index":2,"ContentHash":"bfcf18a244e45f867750e0223a9b3a43","Category":"contentfile","Size":2184},{"Index":3,"ContentHash":"a77f98db89b6aa1aeaaad01d857e5115","Category":"contentfile","Size":1448},{"Index":4,"ContentHash":"dfa73a08ed0fba634f160c6d26a5e830","Category":"contentfile","Size":1900},{"Index":5,"ContentHash":"730d2d641a53eeb1e633f2ff60d730e9","Category":"contentfile","Size":1288,"ArtifactReferences":[6]},{"Index":6,"ContentHash":"4226b5c16a50dab6eff0f08dd1253d4b","Category":"audio","Size":47424},{"Index":7,"ContentHash":"5c43454a3823f172a2a326410a36ba6b","Category":"contentfile","Size":2136},{"Index":8,"ContentHash":"51690f09f541d7442ce8faf26fd84696","Category":"contentfile","Size":4812},{"Index":9,"ContentHash":"15d5df98d98434e67e06716cfabfad1b","Category":"manifest","Size":1703,"ArtifactReferences":[0,2,3,4,5,7,8]}]} \ No newline at end of file +{"Version":2,"BuildManifestHash":"baff06b928d147276f2245dd3b19216a","SerializedFiles":[{"Index":0,"ID":"Library/unity default resources","IsBuiltIn":true,"SourceAssets":[],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[]},{"Index":1,"ID":"0000000000000000f000000000000000.cfid","IsBuiltIn":false,"SourceAssets":["Resources/unity_builtin_extra"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"6a60c190881f43bb4a91a360b9e8850d"},{"Index":2,"ID":"162c015549f8733449ac70ae78ad3aa5.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Scenes/Scene1.unity"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[0,1,9],"ContentHash":"c271b85494f5e4cc35c4ec4a776324af"},{"Index":3,"ID":"20408785117e138f38c2cc4ca0e638c8.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Audio/6.mp3"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"93bb3159569284a5c7bcceb4acb91bae"},{"Index":4,"ID":"4038ff673d390134d924b57fcbed0432.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/LoadableAudioClipReference.asset"],"LoadableDependencies":["20408785117e138f38c2cc4ca0e638c8","dd30e3af3b8bddf1ea36d768fc41aafd"],"LoadableSceneDependencies":[],"SerializedFileDependencies":[8],"ContentHash":"bfcf18a244e45f867750e0223a9b3a43"},{"Index":5,"ID":"52b43dad178849b42ac753005736e7bb.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/ContentDirectoryRoot.asset"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[8,4,11,13,7],"ContentHash":"c0152db4dd710be51b2decb997325f34"},{"Index":6,"ID":"590cfeb4e0ff90f4e92f9e1262bcfe6f.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Scenes/Scene2.unity"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[0,1,9],"ContentHash":"4d49f1aa2acf2ecf20f51660e1bf77ea"},{"Index":7,"ID":"70a210050f71a924aa83be7146547111.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/SceneList.asset"],"LoadableDependencies":[],"LoadableSceneDependencies":["Assets/Scenes/Scene2.unity","Assets/Scenes/Scene1.unity"],"SerializedFileDependencies":[8],"ContentHash":"8ad4924ac5e264fde63d8e95a0dab8ab"},{"Index":8,"ID":"a2a42d71dddef12e8889849faf59bdd7.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Scripts/DirectScriptableObjectReference.cs","Assets/Scripts/LoadableAudioClipReference.cs","Assets/Scripts/SceneList.cs","Assets/Scripts/SerializationDemo.cs"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"86d71ff2bb38e064697257d35d6421b8"},{"Index":9,"ID":"baf46637edbb6ff884858f6630b66eda.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Textures/GreenStatic.png"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[12],"ContentHash":"61fa28f6b22b739b19ece22ea0b3f29f"},{"Index":10,"ID":"dd30e3af3b8bddf1ea36d768fc41aafd.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Audio/a.mp3"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"730d2d641a53eeb1e633f2ff60d730e9"},{"Index":11,"ID":"21679be819d6e9146a63bb02a7e51f2f.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/SingleAudioClipLoadableReference.asset"],"LoadableDependencies":["dd30e3af3b8bddf1ea36d768fc41aafd"],"LoadableSceneDependencies":[],"SerializedFileDependencies":[8],"ContentHash":"5c43454a3823f172a2a326410a36ba6b"},{"Index":12,"ID":"34814583296b527bf650f548effcd62c.cfid","IsBuiltIn":false,"SourceAssets":["Assets/Textures/GreenStatic.png"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[],"ContentHash":"c046f78347acd69f03fa7f80362fde94"},{"Index":13,"ID":"78532141fd7679a458405eb16bdb75fd.cfid","IsBuiltIn":false,"SourceAssets":["Assets/ScriptableObjects/SerializationDemo.asset"],"LoadableDependencies":[],"LoadableSceneDependencies":[],"SerializedFileDependencies":[8],"ContentHash":"51690f09f541d7442ce8faf26fd84696"}],"RootAssets":["3dcb957e6cb206bfec2aaadd3d11d85c"],"LoadableObjectIds":[{"ObjectIdHash":"20408785117e138f38c2cc4ca0e638c8","GUID":"278c261333bf8604eb5c83790d02004d","AssetPath":"Assets/Audio/6.mp3","LFID":8300000,"IdentifierType":3,"SerializedFile":3,"OutputLFID":6313987888022012634},{"ObjectIdHash":"3dcb957e6cb206bfec2aaadd3d11d85c","GUID":"52b43dad178849b42ac753005736e7bb","AssetPath":"Assets/ScriptableObjects/ContentDirectoryRoot.asset","LFID":11400000,"IdentifierType":2,"SerializedFile":5,"OutputLFID":-775554941117088049},{"ObjectIdHash":"dd30e3af3b8bddf1ea36d768fc41aafd","GUID":"b65a7916245593b4e89f4bd0aa920533","AssetPath":"Assets/Audio/a.mp3","LFID":8300000,"IdentifierType":3,"SerializedFile":10,"OutputLFID":-6933612096100796476}],"LoadableSceneIds":[{"GUID":"590cfeb4e0ff90f4e92f9e1262bcfe6f","Path":"Assets/Scenes/Scene2.unity","SerializedFile":6},{"GUID":"162c015549f8733449ac70ae78ad3aa5","Path":"Assets/Scenes/Scene1.unity","SerializedFile":2}],"BinaryArtifacts":[{"Index":0,"ContentHash":"6a60c190881f43bb4a91a360b9e8850d","Category":"contentfile","Size":96364,"ArtifactReferences":[1]},{"Index":1,"ContentHash":"ea7c9fa2d58ef71544726747da8ade6d","Category":"texture","Size":524280},{"Index":2,"ContentHash":"c271b85494f5e4cc35c4ec4a776324af","Category":"contentfile","Size":17572},{"Index":3,"ContentHash":"93bb3159569284a5c7bcceb4acb91bae","Category":"contentfile","Size":1288,"ArtifactReferences":[4]},{"Index":4,"ContentHash":"68c9d0b12420e1951eec7790bd0754fe","Category":"audio","Size":30688},{"Index":5,"ContentHash":"bfcf18a244e45f867750e0223a9b3a43","Category":"contentfile","Size":2184},{"Index":6,"ContentHash":"c0152db4dd710be51b2decb997325f34","Category":"contentfile","Size":1524},{"Index":7,"ContentHash":"4d49f1aa2acf2ecf20f51660e1bf77ea","Category":"contentfile","Size":17572},{"Index":8,"ContentHash":"8ad4924ac5e264fde63d8e95a0dab8ab","Category":"contentfile","Size":1304},{"Index":9,"ContentHash":"86d71ff2bb38e064697257d35d6421b8","Category":"contentfile","Size":2012},{"Index":10,"ContentHash":"61fa28f6b22b739b19ece22ea0b3f29f","Category":"contentfile","Size":8516},{"Index":11,"ContentHash":"730d2d641a53eeb1e633f2ff60d730e9","Category":"contentfile","Size":1288,"ArtifactReferences":[12]},{"Index":12,"ContentHash":"4226b5c16a50dab6eff0f08dd1253d4b","Category":"audio","Size":47424},{"Index":13,"ContentHash":"5c43454a3823f172a2a326410a36ba6b","Category":"contentfile","Size":2136},{"Index":14,"ContentHash":"c046f78347acd69f03fa7f80362fde94","Category":"contentfile","Size":2260,"ArtifactReferences":[15]},{"Index":15,"ContentHash":"f0a44ad4a4babd121543fd44032928e7","Category":"texture","Size":215970},{"Index":16,"ContentHash":"51690f09f541d7442ce8faf26fd84696","Category":"contentfile","Size":4812},{"Index":17,"ContentHash":"baff06b928d147276f2245dd3b19216a","Category":"manifest","Size":2858,"ArtifactReferences":[0,2,3,5,6,7,8,9,10,11,13,14,16]}]} \ No newline at end of file diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentSizeSummary.txt b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentSizeSummary.txt index e30800b..33f9a8b 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentSizeSummary.txt +++ b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ContentSizeSummary.txt @@ -1,19 +1,21 @@ ------------------------------------------------------------------------------- Build Report - Content Size Statistics -Serialized File count 7 -Resource file count 2 -Object count 9 -Serialized Files 14.7 kb 16.2% -Serialized Files Headers 11.5 kb 12.6% -Resource data (Texture,Audio...) 76.3 kb 83.8% -Total build size 91.0 kb +Serialized File count 13 +Resource file count 4 +Object count 28 +Serialized Files 155.1 kb 16.3% +Serialized Files Headers 142.0 kb 14.9% +Resource data (Texture,Audio...) 799.2 kb 83.7% +Total build size 954.3 kb Largest Types: - 76.5 kb 84.1% AudioClip - 2.7 kb 3.0% MonoBehaviour + 512.2 kb 53.7% Cubemap + 211.1 kb 22.1% Texture2D + 76.5 kb 8.0% AudioClip Largest Assets: - 46.4 kb 51.0% Assets/Audio/a.mp3 - 30.1 kb 33.0% Assets/Audio/6.mp3 - 2.2 kb 2.5% Assets/ScriptableObjects/SerializationDemo.asset + 519.5 kb 54.4% Resources/unity_builtin_extra + 211.5 kb 22.2% Assets/Textures/GreenStatic.png + 46.4 kb 4.9% Assets/Audio/a.mp3 + 30.1 kb 3.2% Assets/Audio/6.mp3 ------------------------------------------------------------------------------- diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ScriptsOnlyCache.yaml b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ScriptsOnlyCache.yaml index 30f509a..ef2bfee 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ScriptsOnlyCache.yaml +++ b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ScriptsOnlyCache.yaml @@ -3,6 +3,7 @@ ScriptsOnlyBuild: Assembly-CSharp.dll: - DirectScriptableObjectReference - LoadableAudioClipReference + - SceneList - SerializationDemo serializedClasses: Assembly-CSharp: @@ -11,11 +12,12 @@ ScriptsOnlyBuild: - Unity.Loading.Loadable`1 UnityEngine.CoreModule: - Unity.Loading.LoadableObjectId + - Unity.Loading.LoadableSceneId - UnityEngine.DictionarySerialization/SerializedKeyValue`2 methodsToPreserve: [] sceneClasses: {} scriptHashData: [] platform: 19 scenePathNames: [] - nativeClasses: 000000001200000082000000530000007de237150f0100000200000072000000080000003100000073000000i + nativeClasses: 000000003000000012000000820000001c0000001b00000059000000150000000900000003000000680000009d00000004000000020000000100000019000000d4000000c4000000530000007de237150f01000072000000080000003100000073000000d5000000i playerPath: diff --git a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ff7b7f370f4f65d4c870bf25d72893e7.buildreport b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/f64157fb08bb9f645971d39c1203bd03.buildreport similarity index 51% rename from TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ff7b7f370f4f65d4c870bf25d72893e7.buildreport rename to TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/f64157fb08bb9f645971d39c1203bd03.buildreport index 32e0cb2..db603fe 100644 Binary files a/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/ff7b7f370f4f65d4c870bf25d72893e7.buildreport and b/TestCommon/Data/LeadingEdgeBuilds/BuildReport-ContentDirectory/f64157fb08bb9f645971d39c1203bd03.buildreport differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/15d5df98d98434e67e06716cfabfad1b.json b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/15d5df98d98434e67e06716cfabfad1b.json deleted file mode 100644 index 70f5fdd..0000000 --- a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/15d5df98d98434e67e06716cfabfad1b.json +++ /dev/null @@ -1 +0,0 @@ -{"Version":1,"BuildInfo":{"BuildName":"ContentDirectory","BuiltWithTypeTrees":true},"RootAssets":["3dcb957e6cb206bfec2aaadd3d11d85c"],"Loadables":[{"ObjectIdHash":"20408785117e138f38c2cc4ca0e638c8","SerializedFile":1,"Identifier":6313987888022012634},{"ObjectIdHash":"3dcb957e6cb206bfec2aaadd3d11d85c","SerializedFile":3,"Identifier":-775554941117088049},{"ObjectIdHash":"dd30e3af3b8bddf1ea36d768fc41aafd","SerializedFile":5,"Identifier":-6933612096100796476}],"LoadableScenes":[],"SerializedFiles":[{"Index":0,"ID":"Library/unity default resources","IsBuiltIn":true,"SerializedFileDependencies":[]},{"Index":1,"ID":"20408785117e138f38c2cc4ca0e638c8.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"93bb3159569284a5c7bcceb4acb91bae"},{"Index":2,"ID":"4038ff673d390134d924b57fcbed0432.cfid","IsBuiltIn":false,"SerializedFileDependencies":[4],"ContentHash":"bfcf18a244e45f867750e0223a9b3a43"},{"Index":3,"ID":"52b43dad178849b42ac753005736e7bb.cfid","IsBuiltIn":false,"SerializedFileDependencies":[4,2,6,7],"ContentHash":"a77f98db89b6aa1aeaaad01d857e5115"},{"Index":4,"ID":"a2a42d71dddef12e8889849faf59bdd7.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"dfa73a08ed0fba634f160c6d26a5e830"},{"Index":5,"ID":"dd30e3af3b8bddf1ea36d768fc41aafd.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"730d2d641a53eeb1e633f2ff60d730e9"},{"Index":6,"ID":"21679be819d6e9146a63bb02a7e51f2f.cfid","IsBuiltIn":false,"SerializedFileDependencies":[4],"ContentHash":"5c43454a3823f172a2a326410a36ba6b"},{"Index":7,"ID":"78532141fd7679a458405eb16bdb75fd.cfid","IsBuiltIn":false,"SerializedFileDependencies":[4],"ContentHash":"51690f09f541d7442ce8faf26fd84696"}]} \ No newline at end of file diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/4d49f1aa2acf2ecf20f51660e1bf77ea.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/4d49f1aa2acf2ecf20f51660e1bf77ea.cf new file mode 100644 index 0000000..b805513 Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/4d49f1aa2acf2ecf20f51660e1bf77ea.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/61fa28f6b22b739b19ece22ea0b3f29f.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/61fa28f6b22b739b19ece22ea0b3f29f.cf new file mode 100644 index 0000000..b5c3c31 Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/61fa28f6b22b739b19ece22ea0b3f29f.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/6a60c190881f43bb4a91a360b9e8850d.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/6a60c190881f43bb4a91a360b9e8850d.cf new file mode 100644 index 0000000..101d567 Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/6a60c190881f43bb4a91a360b9e8850d.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/dfa73a08ed0fba634f160c6d26a5e830.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/86d71ff2bb38e064697257d35d6421b8.cf similarity index 67% rename from TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/dfa73a08ed0fba634f160c6d26a5e830.cf rename to TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/86d71ff2bb38e064697257d35d6421b8.cf index e87bbb4..fca0685 100644 Binary files a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/dfa73a08ed0fba634f160c6d26a5e830.cf and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/86d71ff2bb38e064697257d35d6421b8.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/8ad4924ac5e264fde63d8e95a0dab8ab.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/8ad4924ac5e264fde63d8e95a0dab8ab.cf new file mode 100644 index 0000000..b81825d Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/8ad4924ac5e264fde63d8e95a0dab8ab.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/BuildManifestHash.txt b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/BuildManifestHash.txt index 5a2a338..647aa06 100644 --- a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/BuildManifestHash.txt +++ b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/BuildManifestHash.txt @@ -1 +1 @@ -15d5df98d98434e67e06716cfabfad1b \ No newline at end of file +baff06b928d147276f2245dd3b19216a \ No newline at end of file diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/baff06b928d147276f2245dd3b19216a.json b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/baff06b928d147276f2245dd3b19216a.json new file mode 100644 index 0000000..5cac3c9 --- /dev/null +++ b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/baff06b928d147276f2245dd3b19216a.json @@ -0,0 +1 @@ +{"Version":1,"BuildInfo":{"BuildName":"ContentDirectory","BuiltWithTypeTrees":true},"RootAssets":["3dcb957e6cb206bfec2aaadd3d11d85c"],"Loadables":[{"ObjectIdHash":"20408785117e138f38c2cc4ca0e638c8","SerializedFile":3,"Identifier":6313987888022012634},{"ObjectIdHash":"3dcb957e6cb206bfec2aaadd3d11d85c","SerializedFile":5,"Identifier":-775554941117088049},{"ObjectIdHash":"dd30e3af3b8bddf1ea36d768fc41aafd","SerializedFile":10,"Identifier":-6933612096100796476}],"LoadableScenes":[{"GUID":"162c015549f8733449ac70ae78ad3aa5","Path":"Assets/Scenes/Scene1.unity","SerializedFile":2},{"GUID":"590cfeb4e0ff90f4e92f9e1262bcfe6f","Path":"Assets/Scenes/Scene2.unity","SerializedFile":6}],"SerializedFiles":[{"Index":0,"ID":"Library/unity default resources","IsBuiltIn":true,"SerializedFileDependencies":[]},{"Index":1,"ID":"0000000000000000f000000000000000.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"6a60c190881f43bb4a91a360b9e8850d"},{"Index":2,"ID":"162c015549f8733449ac70ae78ad3aa5.cfid","IsBuiltIn":false,"SerializedFileDependencies":[0,1,9],"ContentHash":"c271b85494f5e4cc35c4ec4a776324af"},{"Index":3,"ID":"20408785117e138f38c2cc4ca0e638c8.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"93bb3159569284a5c7bcceb4acb91bae"},{"Index":4,"ID":"4038ff673d390134d924b57fcbed0432.cfid","IsBuiltIn":false,"SerializedFileDependencies":[8],"ContentHash":"bfcf18a244e45f867750e0223a9b3a43"},{"Index":5,"ID":"52b43dad178849b42ac753005736e7bb.cfid","IsBuiltIn":false,"SerializedFileDependencies":[8,4,11,13,7],"ContentHash":"c0152db4dd710be51b2decb997325f34"},{"Index":6,"ID":"590cfeb4e0ff90f4e92f9e1262bcfe6f.cfid","IsBuiltIn":false,"SerializedFileDependencies":[0,1,9],"ContentHash":"4d49f1aa2acf2ecf20f51660e1bf77ea"},{"Index":7,"ID":"70a210050f71a924aa83be7146547111.cfid","IsBuiltIn":false,"SerializedFileDependencies":[8],"ContentHash":"8ad4924ac5e264fde63d8e95a0dab8ab"},{"Index":8,"ID":"a2a42d71dddef12e8889849faf59bdd7.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"86d71ff2bb38e064697257d35d6421b8"},{"Index":9,"ID":"baf46637edbb6ff884858f6630b66eda.cfid","IsBuiltIn":false,"SerializedFileDependencies":[12],"ContentHash":"61fa28f6b22b739b19ece22ea0b3f29f"},{"Index":10,"ID":"dd30e3af3b8bddf1ea36d768fc41aafd.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"730d2d641a53eeb1e633f2ff60d730e9"},{"Index":11,"ID":"21679be819d6e9146a63bb02a7e51f2f.cfid","IsBuiltIn":false,"SerializedFileDependencies":[8],"ContentHash":"5c43454a3823f172a2a326410a36ba6b"},{"Index":12,"ID":"34814583296b527bf650f548effcd62c.cfid","IsBuiltIn":false,"SerializedFileDependencies":[],"ContentHash":"c046f78347acd69f03fa7f80362fde94"},{"Index":13,"ID":"78532141fd7679a458405eb16bdb75fd.cfid","IsBuiltIn":false,"SerializedFileDependencies":[8],"ContentHash":"51690f09f541d7442ce8faf26fd84696"}]} \ No newline at end of file diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/a77f98db89b6aa1aeaaad01d857e5115.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c0152db4dd710be51b2decb997325f34.cf similarity index 68% rename from TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/a77f98db89b6aa1aeaaad01d857e5115.cf rename to TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c0152db4dd710be51b2decb997325f34.cf index efd76e0..03a4020 100644 Binary files a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/a77f98db89b6aa1aeaaad01d857e5115.cf and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c0152db4dd710be51b2decb997325f34.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c046f78347acd69f03fa7f80362fde94.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c046f78347acd69f03fa7f80362fde94.cf new file mode 100644 index 0000000..2126d12 Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c046f78347acd69f03fa7f80362fde94.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c271b85494f5e4cc35c4ec4a776324af.cf b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c271b85494f5e4cc35c4ec4a776324af.cf new file mode 100644 index 0000000..1a9ca1c Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/c271b85494f5e4cc35c4ec4a776324af.cf differ diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/ea7c9fa2d58ef71544726747da8ade6d.resS b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/ea7c9fa2d58ef71544726747da8ade6d.resS new file mode 100644 index 0000000..9f52137 --- /dev/null +++ b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/ea7c9fa2d58ef71544726747da8ade6d.resS @@ -0,0 +1 @@ + !!!!!!!!!!"""""""""""""##########$$$$$$$$$$%%%% !!!!!!!!!!"""""""""""""#########$$$$$$$$$$$%%%%% !!!!!!!!!!"""""""""""""#########$$$$$$$$$$%%%%%%% !!!!!!!!!!""""""""""""#########$$$$$$$$$$%%%%%%%%% !!!!!!!!!!""""""""""""#########$$$$$$$$$$%%%%%%%%%% !!!!!!!!!!""""""""""""#########$$$$$$$$$%%%%%%%%%%%% !!!!!!!!!""""""""""""########$$$$$$$$$$%%%%%%%%%%%&& !!!!!!!!!""""""""""""########$$$$$$$$$%%%%%%%%%%%&&&& !!!!!!!!!!"""""""""""########$$$$$$$$$%%%%%%%%%%%&&&&& !!!!!!!!!!""""""""""########$$$$$$$$$%%%%%%%%%%%&&&&&&& !!!!!!!!!!""""""""""########$$$$$$$$$%%%%%%%%%%&&&&&&&&& !!!!!!!!!!""""""""""########$$$$$$$$%%%%%%%%%%&&&&&&&&&&& !!!!!!!!!!""""""""""#######$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&& !!!!!!!!!!"""""""""########$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&'' !!!!!!!!!!"""""""""########$$$$$$$$%%%%%%%%%%&&&&&&&&&&&'''' !!!!!!!!!!"""""""""#######$$$$$$$$%%%%%%%%%%&&&&&&&&&&&'''''' !!!!!!!!!"""""""""#######$$$$$$$$%%%%%%%%%&&&&&&&&&&&'''''''' !!!!!!!!!""""""""########$$$$$$$$%%%%%%%%%&&&&&&&&&&'''''''''' !!!!!!!!!""""""""#######$$$$$$$$%%%%%%%%%&&&&&&&&&&&''''''''''' !!!!!!!!!""""""""#######$$$$$$$$%%%%%%%%%&&&&&&&&&&''''''''''''( !!!!!!!!""""""""########$$$$$$$%%%%%%%%%&&&&&&&&&&''''''''''''((( !!!!!!!!!""""""""#######$$$$$$$$%%%%%%%%&&&&&&&&&&''''''''''''((((( !!!!!!!!!""""""""########$$$$$$$$%%%%%%%%&&&&&&&&&&'''''''''''((((((( !!!!!!!!!!""""""""########$$$$$$$%%%%%%%%&&&&&&&&&&'''''''''''((((((((( !!!!!!!!!!""""""""########$$$$$$$$%%%%%%%%&&&&&&&&&'''''''''''((((((((()) !!!!!!!!!!!""""""""########$$$$$$$%%%%%%%%&&&&&&&&&'''''''''''((((((((())))  !!!!!!!!!!""""""""########$$$$$$$$%%%%%%%%&&&&&&&&&''''''''''(((((((()))))))  !!!!!!!!!!""""""""########$$$$$$$$%%%%%%%%&&&&&&&&&''''''''''(((((((()))))))))  !!!!!!!!!!"""""""""########$$$$$$$$%%%%%%%&&&&&&&&&'''''''''(((((((())))))))))** !!!!!!!!!!!!""""""""########$$$$$$$$%%%%%%%%&&&&&&&&'''''''''(((((((()))))))))***** !!!!!!!!!!!!!"""""""""########$$$$$$$$%%%%%%%&&&&&&&&&''''''''(((((((()))))))))*******!!!!! !!!!!!!!!!!!!"""""""""########$$$$$$$$%%%%%%%%&&&&&&&&''''''''((((((()))))))))**********!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!"""""""""########$$$$$$$$%%%%%%%%&&&&&&&&'''''''(((((((())))))))**********+++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""#########$$$$$$$$%%%%%%%%&&&&&&&'''''''((((((()))))))))*********++++++""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""#########$$$$$$$$%%%%%%%%&&&&&&&'''''''((((((())))))))*********+++++++++"""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""########$$$$$$$$%%%%%%%%&&&&&&''''''''((((((())))))))*********++++++++,,,""""""""""""""!!!!!!!!!!!!!!!!!!!!!"""""""""""""""""#########$$$$$$$$%%%%%%%&&&&&&&'''''''((((((())))))))*********++++++++,,,,,,####""""""""""""""""""""""""""""""""""""""""""""###########$$$$$$$$%%%%%%%&&&&&&&'''''''((((((()))))))*********+++++++,,,,,,,,,-##########""""""""""""""""""""""""""""""""""###########$$$$$$$$$$%%%%%%%&&&&&&&'''''''((((((()))))))********+++++++,,,,,,,,,----$#################""""""""""""""""""""##############$$$$$$$$$$%%%%%%%&&&&&&&'''''''((((((()))))))********+++++++,,,,,,,,--------$$$$$$$##########################################$$$$$$$$$$%%%%%%%%&&&&&&&'''''''((((((()))))))*******+++++++,,,,,,,,---------..$$$$$$$$$$$$$################################$$$$$$$$$$%%%%%%%%%&&&&&&&'''''''((((((()))))))*******+++++++,,,,,,,---------......%%%%$$$$$$$$$$$$$$$$$$$$$$##########$$$$$$$$$$$$$$$$%%%%%%%%%&&&&&&&&'''''''((((((())))))*******++++++,,,,,,,,---------.........%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%&&&&&&&'''''''((((((())))))******+++++++,,,,,,,---------..........///&%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&'''''''(((((())))))******+++++++,,,,,,,--------..........///////&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&''''''''((((((())))))******+++++++,,,,,,,--------........./////////00&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&''''''''((((((()))))))******+++++++,,,,,,,-------........./////////000000''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''''''''(((((((())))))*******++++++,,,,,,,--------......./////////00000000001'''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''(((((((()))))))*******++++++,,,,,,,-------.......////////0000000001111111((((((('''''''''''''''''''''''''''''''''''''''''''((((((((())))))))******+++++++,,,,,,,------.......////////00000000111111111112((((((((((((((((''''''''''''''''''''''''''((((((((((((())))))))*******+++++++,,,,,,------.......///////0000000001111111112222222)))))))))(((((((((((((((((((((((((((((((((((((((())))))))))*******+++++++,,,,,,-------......///////00000000111111111222222222233**)))))))))))))))))))(((((((((((((((((())))))))))))))*********+++++++,,,,,,-------......///////000000011111111122222222233333333************))))))))))))))))))))))))))))))))))***********++++++++,,,,,,-------......///////0000000111111122222222223333333333344+++++**********************************************+++++++++,,,,,,,-------......//////000000011111112222222223333333333344444444+++++++++++++++++***********************++++++++++++++,,,,,,,,-------.......//////0000000111111122222222333333333444444444444555,,,,,,,,,+++++++++++++++++++++++++++++++++++++,,,,,,,,,,,--------......///////00000011111112222222233333333444444444445555555555---,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------........//////0000000111111222222233333333344444444455555555555555666------------------,,,,,,,,,,,,,,,,,,,,,--------------.........///////00000011111112222222333333344444444455555555555566666666666.........-----------------------------------............////////0000001111111222222233333334444444455555555555666666666666667777////............................................//////////0000000011111122222223333333444444455555555556666666666677777777777777//////////////////////////////////////////////////000000000111111112222222333333344444455555555566666666667777777777777788888888000000000000000000//////////////////000000000000000011111111122222223333333444444455555555666666666777777777778888888888888888891111111111111000000000000000000000000001111111111111122222222233333334444444555555556666666677777777778888888888888899999999999911111111110000000000000000000000000000000000000000000011111111111111222222222223333333333444444444455555555555555566666666666666///////////////..................------,,,,,,,,,,,,,+++++++++++++++++++++++,,,,,,,,,,,,,------............////////////0000000000**)))))))(((((((''''''&&&&&&%%%%%%$$$$##"""""""!!!!!! !!!!!""""""""##$$$%%%%%%%&&&&&&'''''((((((()))))))***""""!!!!!  !!!!""""" !!!!!""""""#####$$$$$%%% !!!!!""""""#####$$$$$%%%% !!!!!""""""#####$$$$$%%%%% !!!!""""""####$$$$$%%%%%%& !!!!!""""#####$$$$%%%%%%&&& !!!!!""""####$$$$$%%%%%&&&&& !!!!!""""####$$$$%%%%%&&&&&&' !!!!!""""####$$$$%%%%%&&&&&''' !!!!"""""####$$$%%%%%&&&&&&'''' !!!!!""""####$$$$%%%%%&&&&&'''''( !!!!""""####$$$$%%%%&&&&&'''''((( !!!!"""""###$$$$%%%%&&&&&'''''((((( !!!!!""""####$$$$%%%%&&&&'''''((((())  !!!!!""""#####$$$%%%%&&&&&''''((((()))) !!!!!"""""####$$$$%%%%&&&&''''(((()))))**!! !!!!!!!""""####$$$$%%%%&&&&''''(((()))))****!!!!!!!!!!!!!!!!!!!!!!!!"""""#####$$$%%%%&&&&''''(((())))****+++""""!!!!!!!!!!!!!!!!!""""""#####$$$$%%%%&&&'''(((()))))****++++,#"""""""""""""""""""""""#####$$$$$%%%&&&''''(((())))****+++,,,,,########"""""""""""#######$$$$$%%%%&&&''''((())))****+++,,,,,---$$$$$#################$$$$$$%%%%&&&&'''(((()))****+++,,,,,----..%%%%$$$$$$$$$$$$$$$$$$$$$%%%%&&&&''''((())))***+++,,,,----...../&&&&%%%%%%%%%%%%%%%%%%%%%&&&&&''''((()))****+++,,,,----..../////''&&&&&&&&&&&&&&%&&&&&&&&&''''(((()))****+++,,,----....////00000((''''''''''''&'&'''''''''((((()))***++++,,,----...////000001111))((((((((((((((((((((((()))))****+++,,,----...////0000111112222***))))))))))))))))))))))*****+++,,,,---...////00001112222223333++++********************+++++,,,,---...////000111122223333334444,,,,,,+++++++++++++++,,,,,,,----...///00001111222333334444445555--------,,,,,,,,,,,--------....///000011122223333344444555555555.-..------------------......///000001112222333344444455555555566--------------,-------------......//0000011111122223333333344444+++++************)))))))))))))*******+++++,,,,-----.....////////&&&%%%%%%%%$$$$########""""""""""""####$##$$$$%%%&&&&&''''((((()  ! !!!""###$$$%% !!!""###$$%%%& !!!""##$$$%%%&& !!!""##$$%%%&&&' !!!""##$$%%&&&''( !!""##$$$%%&&''((( !!!""##$$%%&&''((())!!!!!!!!!!!!!""##$$%%&&''((())**"""""!!!"""""##$$$%%&''(())***++######""#####$$%%&&''(())**++,,,%$$$$$$$$$$$%%%&&''(()**++,,,--.&&&%%%%%%%%&&&''(())**+,,,--.../'''''''''''''(())**++,,--..////0((((((((((()))**++,,--..///00000))))))))))))***++,,--...///00000(((((((((((()))***++,,,----.....%%%$$$$$$$$$$$%%%%&&'''((()))))*  !!!"""##$$ !"##$%% !!"#$$%&& !!"#$%%&'(!!!!!!"##$%&'(()"""""##$%&''()**$$$$$$%%&'()**++$$$%%%&''()**+++$$$$$%%&&'(()))*!!!!!!!""##$$%%& ! !"#$%!!!"#$&'"""#%&''!!"#$%&& !"# !#$ !#$ !          ! !! !!! !!!! !!!!!! !!!!!!! !!!!!!!!! !!!!!!!!!! ""!!!!!!!!!  """"!!!!!!!!!  """"""!!!!!!!!!  """"""""!!!!!!!!  !!!#"""""""""!!!!!!!!  !!!!!!##""""""""""!!!!!!!!  !!!!!!!!!!####""""""""""!!!!!!!!  !!!!!!!!!""""######""""""""""!!!!!!!!  !!!!!!!!!!"""""""########""""""""""!!!!!!!!  !!!!!!!!!""""""""""#$#########"""""""""!!!!!!!!  !!!!!!!!!!""""""""""####$$$$########""""""""""!!!!!!!  !!!!!!!!!""""""""""#######$$$$$$$#########"""""""""!!!!!!!!  !!!!!!!!!""""""""""########$$$$%%$$$$$$$########"""""""""!!!!!!!!!!  !!!!!!!!!""""""""""########$$$$$$%%%%%%$$$$$$$########"""""""""!!!!!!!!!!!  !!!!!!!!!!"""""""""########$$$$$$$%%%%%%%%%%%%$$$$$$$########"""""""""!!!!!!!!!!!!  !!!!!!!!!!!!"""""""""########$$$$$$$%%%%%%%&&&&%%%%%%%%$$$$$$$#######""""""""""!!!!!!!!!!!!! !!!!!!!!!!!!!""""""""""########$$$$$$$%%%%%%%&&&&&&&&&&&%%%%%%%$$$$$$$$########""""""""""!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!"""""""""""#######$$$$$$$%%%%%%%%&&&&&&&'''&&&&&&&&%%%%%%%$$$$$$$$#########""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""########$$$$$$$%%%%%%%&&&&&&&&''''''''''&&&&&&&&%%%%%%%$$$$$$$$$#########"""""""""""""!!!!!!!!!!!!!!!!!!!!!"""""""""""""""#########$$$$$$$%%%%%%%%&&&&&&&'''''''''(((''''''&&&&&&&%%%%%%%%%$$$$$$$$$##########""""""""""""""""""""""""""""""""""""""#########$$$$$$$$%%%%%%%%&&&&&&&&''''''''(((((((('''''''''&&&&&&&%%%%%%%%%%$$$$$$$$$##############""""""""""""""""""""""###########$$$$$$$$$%%%%%%%%&&&&&&&&''''''''((((((((())))(((''''''''&&&&&&&&&%%%%%%%%%%$$$$$$$$$$$$#################################$$$$$$$$$$%%%%%%%%%&&&&&&&&''''''''((((((((())))))))*((((((('''''''&&&&&&&&&&%%%%%%%%%%$$$$$$$$$$$$$$$$$$#############$$$$$$$$$$$$$$%%%%%%%%%&&&&&&&&&''''''''((((((((()))))))*******))((((((((''''''''&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&'''''''''(((((((()))))))********+++++)))))(((((((((''''''''''&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&''''''''''((((((())))))))*******+++++++++,,))))))))))(((((((('''''''''''&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&'''''''''(((((((()))))))********+++++++++,,,,,,,,*****)))))))))(((((((((('''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''((((((((()))))))********++++++++,,,,,,,,,------*********))))))))))((((((((((('''''''''''''''''''&&&&''''''''''''''''''''((((((((()))))))))*******+++++++++,,,,,,,,--------.....+++++**********)))))))))))(((((((((((((('''''''''''''''''''''''(((((((((((()))))))))********++++++++,,,,,,,---------.........///++++++++++***********)))))))))))))((((((((((((((((((((((((((((((())))))))))))********++++++++,,,,,,,--------.........//////////0,,,,,+++++++++++*************)))))))))))))))))))))))))))))))))))))))*********++++++++,,,,,,,,--------......../////////0000000000,,,,,,,,,,,+++++++++++++********************************************+++++++++,,,,,,,,--------......../////////000000000011111111------,,,,,,,,,,,,++++++++++++++++++******************++++++++++++++,,,,,,,,,,--------........////////00000000111111111122222222--------------,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++,,,,,,,,,,,,---------........///////00000000111111111222222222223333333.......-----------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------........////////0000000011111111222222222233333333333344444/...............------------------------------------------...........////////000000001111111122222222333333333334444444444445555////////////...............................................//////////00000000111111122222222333333333444444444455555555555555666000000///////////////////////////......../////////////////00000000011111111222222233333333444444444555555555556666666666666667770000000000000000000000////////////////////000000000000000111111111222222233333333444444455555555556666666666667777777777777777881111111111111110000000000000000000000000001111111111111122222222233333334444444555555555666666666777777777777888888888888888888911111111111100000000000000000000000000000000000000000000111111111111112222222222233333333333444444444445555555555555555566666666////////////////.................------,,,,,,,,,,,,,++++++++++++++++++++++++,,,,,,,,,,,,,--------............/////////////000000**))))))))((((((''''''&&&&&&%%%%%%$$$$##"""""""!!!!!! !!!!!"""""""##$$$$%%%%%%%&&&&&&''''''(((((())))))))*""""!!!!!  !!!!""""     ! !! !!!! !!!!! ""!!!!!  """"!!!!!  !#"""""!!!!  !!!!!###"""""!!!!  !!!!!"""$####"""""!!!!  !!!!""""###$$$####"""""!!!!  !!!!!""""####$$%%$$$$####""""!!!!!  !!!!!"""""####$$$$%%%%%%$$$$#####""""!!!!!! !!!!!!"""""####$$$$%%%&&&&&&%%%%$$$$$####"""""!!!!!!!!!!!!!!!!!!!"""""####$$$$%%%%%&&&'''''&&&&%%%%$$$$$#####""""""""""""""""""""#####$$$$%%%%&&&&''''((((''''&&&&&%%%%$$$$$$##################$$$$$%%%%%&&&'''''(((())))(((((''''&&&&&%%%%%%$$$$$$$$$$$$$$$$$%%%%&&&&&''''((((())))****+))))((((''''''&&&&&&%%%%%%%%%%%%%%&&&&&&''''((((())))***+++++,,,***))))))(((((''''''''&&&&&&&&''''''''(((()))))***++++,,,,,-----+++******)))))((((((((((((((((((((()))))****++++,,,,----.....///,,,+++++++*******))))))))))))*******+++++,,,,----..../////000000---,,,,,,,++++++++++++++++++++++,,,,,----.....////00001111112222..---------,,,,,,,,,,,,,,,,,------....////0000011112222223333333.......-------------------.......////000011112222233333334444444.--.----------,--,-,,,---------...../////00000011112222222233333++++++***********)))))))))))))))))******+++++,,,,-----........//&&&%%%%%%%%$$$$#####""#""""""""""""#"######$$$$%%%%&&&''''''((((   ! !! "!!!  """!!  !!##"""!!  !!"""$$##"""!!  !!!""##$$%%$$###""!!!! !!!!""###$$%%&&&%%%$$###"""""""""###$$$%%&&''''''&&&%%%$$$$$$$$$$%%%&&'''(()))(((('''&&&&&&%&&&&&'''(())***+++))))(((((''''''(((())***+++,,,,-)))))))(((((())))***+++,,,,-----(((((((((((((((()))****++++,,,,,%%%%%$$$$$$$$$$$$%%%%&&&''''((((!  !!!"""# ! "!  #"!!  !""$##""!!!!!!""#$$%%$$###"###$%%&&%%%%$$$$%%%&&'''$$$$$$$$$%%&&&&&"!!! !!!"""###! "!  !#"!!!!""""!!"""# !  !!!!!!!!!!!!!!!!!!!!"""""""""""""""########################$$$$$$$$$$$$$$$$$$%%%% !!!!!!!!!!!!!!!!!!!"""""""""""""""#########################$$$$$$$$$$$$$$$$$%%% !!!!!!!!!!!!!!!!!!!"""""""""""""""#########################$$$$$$$$$$$$$$$$$% !!!!!!!!!!!!!!!!!!""""""""""""""""########################$$$$$$$$$$$$$$$$$ !!!!!!!!!!!!!!!!!!""""""""""""""""########################$$$$$$$$$$$$$$$ !!!!!!!!!!!!!!!!!"""""""""""""""""########################$$$$$$$$$$$$$ !!!!!!!!!!!!!!!!""""""""""""""""""#######################$$$$$$$$$$$$ !!!!!!!!!!!!!!!!""""""""""""""""""#######################$$$$$$$$$$ !!!!!!!!!!!!!!!!"""""""""""""""""""#######################$$$$$$$$ !!!!!!!!!!!!!!!!"""""""""""""""""""######################$$$$$$$ !!!!!!!!!!!!!!!!"""""""""""""""""""#######################$$$$$ !!!!!!!!!!!!!!!""""""""""""""""""""######################$$$$ !!!!!!!!!!!!!!!!"""""""""""""""""""######################$$ !!!!!!!!!!!!!!!!!"""""""""""""""""""###################### !!!!!!!!!!!!!!!!""""""""""""""""""""#################### !!!!!!!!!!!!!!!!""""""""""""""""""""################## !!!!!!!!!!!!!!!!"""""""""""""""""""""################ !!!!!!!!!!!!!!!!""""""""""""""""""""""############# !!!!!!!!!!!!!!!!""""""""""""""""""""""########### !!!!!!!!!!!!!!!!"""""""""""""""""""""""######### !!!!!!!!!!!!!!!!"""""""""""""""""""""""####### !!!!!!!!!!!!!!!""""""""""""""""""""""""##### !!!!!!!!!!!!!!!!""""""""""""""""""""""""### !!!!!!!!!!!!!!!!""""""""""""""""""""""""" !!!!!!!!!!!!!!!!""""""""""""""""""""""" !!!!!!!!!!!!!!!!""""""""""""""""""""" !!!!!!!!!!!!!!!!!""""""""""""""""""" !!!!!!!!!!!!!!!!!""""""""""""""""" !!!!!!!!!!!!!!!!!!""""""""""""""" !!!!!!!!!!!!!!!!!!""""""""""""" !!!!!!!!!!!!!!!!!!""""""""""" !!!!!!!!!!!!!!!!!!""""""""" !!!!!!!!!!!!!!!!!!""""""" !!!!!!!!!!!!!!!!!!!""""" !!!!!!!!!!!!!!!!!!!""" !!!!!!!!!!!!!!!!!!!" !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!! !!!!!!!!!!! !!!!!!!!! !!!!!!!! !!!!!! !!!!! !!! !          !!!!!!!!!!"""""""###########$$$$$$$$$$%% !!!!!!!!!""""""""###########$$$$$$$$$$ !!!!!!!!!""""""""###########$$$$$$$$ !!!!!!!!"""""""""###########$$$$$$ !!!!!!!"""""""""############$$$$ !!!!!!!!""""""""""##########$$$ !!!!!!!""""""""""###########$ !!!!!!!!""""""""""########## !!!!!!!!""""""""""######## !!!!!!!!!""""""""""###### !!!!!!!!""""""""""""### !!!!!!!!""""""""""""# !!!!!!!!!""""""""""" !!!!!!!!!""""""""" !!!!!!!!!""""""" !!!!!!!!!""""" !!!!!!!!!""" !!!!!!!!!!" !!!!!!!!! !!!!!!! !!!!! !!! !      !!!!!""""#####$$$$$%% !!!!!""""#####$$$$$ !!!!"""""#####$$$ !!!!"""""#####$ !!!!""""##### !!!!"""""### !!!!"""""# !!!!"""" !!!!!"" !!!!! !!! !    !!"""##$$$% !!""###$$ !!""### !!""# !!"" !! !  !!""#$$ !""# !" !  !"# ! !"    !!!!  !!!!!!!!  "!!!!!!!!!!!  """""!!!!!!!!!!!  """""""""!!!!!!!!!!!  !!!#"""""""""""""!!!!!!!!!!  !!!!!!######""""""""""""!!!!!!!!!!!  !!!!!!!!!!$#########"""""""""""""!!!!!!!!!!!  !!!!!!!!!!!!""$$$$$###########""""""""""""!!!!!!!!!!!!  !!!!!!!!!!!!!"""""%%$$$$$$$$###########""""""""""""!!!!!!!!!!!!!  !!!!!!!!!!!!!!"""""""""%%%%%%%$$$$$$$$############""""""""""""!!!!!!!!!!!!!! !!!!!!!!!!!!!!!"""""""""""###&&&%%%%%%%%%$$$$$$$$#############"""""""""""""!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!"""""""""""########&&&&&&&&&%%%%%%%%%$$$$$$$$#############"""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""""############$''''&&&&&&&&&&%%%%%%%%%$$$$$$$$$##############"""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""############$$$$$$''''''''''&&&&&&&&&&%%%%%%%%%$$$$$$$$$$################""""""""""""""""""""""""""""""""""""""""""""""""#############$$$$$$$$$$$$((((('''''''''''&&&&&&&&&&&%%%%%%%%%$$$$$$$$$$###################"""""""""""""""""""""""""""""#################$$$$$$$$$$$$$%%%%(((((((((((('''''''''''&&&&&&&&&&&%%%%%%%%%%$$$$$$$$$$$$##############################################$$$$$$$$$$$$$$$$%%%%%%%%%%))))))(((((((((((((''''''''''''&&&&&&&&&&%%%%%%%%%%%$$$$$$$$$$$$$$$###############$$$$###$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%&*)))))))))))))(((((((((((((''''''''''''&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%&&&&&&&&**********)))))))))))))((((((((((((''''''''''''&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&+++++++************)))))))))))))(((((((((((('''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&''''''',,,++++++++++++++***********)))))))))))))(((((((((((((''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''',,,,,,,,,,,,,,+++++++++++++***********)))))))))))))((((((((((((((('''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((----------,,,,,,,,,,,,,,,++++++++++++***********))))))))))))))((((((((((((((((('''''''''''''''''''''''''((((((((((((((((((((((((........---------------,,,,,,,,,,,,,++++++++++++************))))))))))))))))(((((((((((((((((((((((((((((((((((((((())))))))))))//////................-------------,,,,,,,,,,,,,++++++++++++**************)))))))))))))))))))))))))))))))))))))))))))))))))))***00///////////////////..............------------,,,,,,,,,,,,++++++++++++++*******************************************************000000000000000000000///////////////............-----------,,,,,,,,,,,,,++++++++++++++++++++++++*******************+++++++++++++1111111111111111111000000000000000000////////////............------------,,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++222222222222222222221111111111111111100000000000000///////////...........---------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,333333333333333333333222222222222222222111111111111100000000000///////////..............----------------------------------------4444444444444444444433333333333333333333332222222222221111111111100000000000////////////....................--------------------5555555555555555555555444444444444444444444433333333333332222222222111111111100000000000///////////////.........................66666666666666666666666655555555555555555555554444444444443333333333222222222111111111100000000000000///////////////////////////777777777777777777777777777777766666666666666666665555555555544444444433333333332222222221111111111110000000000000000000000/////888888888888888888888888888888888888888777777777777777666666666655555555544444444333333333222222222221111111111111111100000000009999999999999999999999999999999999999999999888888888888887777777777666666655555555544444444333333333322222222222222111111111111166666666666666666666666666655555555555555555555554444444444444433333333333333333222222222222222222222111111111111111111111111111000000/////////////............-------,,,,,,,,,,,,,++++++++++++++++++++++++++,,,,,,,,,,,,-------.................///////////////*))))))))((((((''''''&&&&&&%%%%%%$$$$$##""""""!!!!!! !!!!!"""""""##$$$$%%%%%%%&&&&&&'''''((((((()))))))**""""!!!!  !!!!!"""" !  !!!!!  """"!!!!!!  !!####"""""!!!!!  !!!!!$$$#####""""""!!!!!!  !!!!!!"""%%%$$$$######""""""!!!!!!!! !!!!!!!!""""""#&&&%%%%%$$$$$######"""""""!!!!!!!!!!!!!!!!!!!!!!!!!!""""""######''''&&&&&%%%%%$$$$$$#######""""""""""""""""""""""""""######$$$$$(((((''''''&&&&&%%%%%$$$$$$$########################$$$$$$$$%%%%)))))))((((('''''&&&&&&%%%%%%%$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%&&&++*******)))))((((((''''''&&&&&&&&&%%%%%%%%%%%%%%%&%&&&&&&&&&&'',,,,,++++++*******)))))))((((((''''''''''''''''&&'''''''''''''((.--------,,,,,,,++++++*******)))))))((((((((((((((((((((((((()))///////.......-------,,,,,,,++++++*********)*))))))))))))*******1000000000000/////////.....------,,,,,,,++++++++++++++++++++++++222222222222111111111100000///////.....--------,,,,,,,,,,,,,,,,,33334343333333333333222222221111100000//////..........----------444444444444444444444444333333222221111100000////////...........3333333333333333333322222222111110000000//////./.........--..---///./..........-.-----,,,,,,,,,,+++++++++*++*+++++++++++++++++++(((('''''''&&&&%%%%$$$%$$$$$#################$$$$$$%%%%%%%%%&&&&  !!!  #"""!!!  !!$$###"""!!! !!!"""&%%%$$$###""""!!!!!!!!!!"""""###('''&&&%%%%$$$#############$$$$%)))))(((''''&&&%%%%%%%%%%%%%%&&&+++++*****)))(((('''''''''''''''-----,,,,,,++++****)))))((((((((---.....------,,,++++****))))))),,,,,,,,,,,,,,++++***)))))((((((((((((((('''''&&&&&%%%%%%%%%%%%%##""""!!!!    ""!!  !!$$###""!!!!!!"""&&&%%%$$$#####$$'''''''&&%%%%%$$'''''''&&%%%$$$$$#####""""!!!!!!!  #"""!!!!####""!!  %%%%%%%$$$$$$$$$$$$$$$$$#######################"""""""""""""""!!!!!!!!!!!!!!!!!!!!! %%%%%%%%%$$$$$$$$$$$$$$$$$$######################"""""""""""""""!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%$$$$$$$$$$$$$$$$$$#####################"""""""""""""""!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$####################"""""""""""""""!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$###################"""""""""""""""!!!!!!!!!!!!!!!!!!! &%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$#################""""""""""""""""!!!!!!!!!!!!!!!!!!! &&&&%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$#################""""""""""""""""!!!!!!!!!!!!!!!!!! &&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$################""""""""""""""""!!!!!!!!!!!!!!!!! &&&&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$################""""""""""""""""!!!!!!!!!!!!!!!!! &&&&&&&&&&&&&%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$###############""""""""""""""""!!!!!!!!!!!!!!!!!!!!! &&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$###############""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!! &&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$###############""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!! '&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$###############""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!! ''''&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$##############""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ''''''''&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$##############"""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ''''''''''''&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$##############""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ''''''''''''''''&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$##############""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!''''''''''''''''''''&&&&&&&&&&&&&&&&%%%%%%%%%%%$$$$$$$$$$$$$$$$#############""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!''''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$##############""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!((''''''''''''''''''''''''''&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$###############"""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!((((((('''''''''''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$###############""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!(((((((((((('''''''''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$#################"""""""""""""""""""""""""""!!!!!!!!!!!!((((((((((((((((''''''''''''''''''''&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$##################""""""""""""""""""""""""""!!!!!!!!!((((((((((((((((((((('''''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$####################""""""""""""""""""""""""""""""))))(((((((((((((((((((((('''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$####################"""""""""""""""""""""""""""))))))))((((((((((((((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$####################""""""""""""""""""""""""))))))))))))(((((((((((((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$####################"""""""""""""""""""""))))))))))))))))((((((((((((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$#######################""""""""""""""""*****)))))))))))))))(((((((((((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$####################################**********)))))))))))))))(((((((((((((((((('''''''''''''&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$$################################**************)))))))))))))))))((((((((((((((('''''''''''''&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$$#############################+******************)))))))))))))))((((((((((((((('''''''''''''&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$####################+++++++*****************))))))))))))))(((((((((((((('''''''''''''&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#########++++++++++++*****************)))))))))))))((((((((((((((''''''''''''&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++++++++++++++++++****************))))))))))))((((((((((((('''''''''''&&&&&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,,,,,,++++++++++++++++++**************))))))))))))(((((((((((('''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$,,,,,,,,,,,,++++++++++++++++++*************)))))))))))(((((((((((''''''''''''&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--,,,,,,,,,,,,,,,++++++++++++++++++************)))))))))))(((((((((((''''''''''''&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%---------,,,,,,,,,,,,,,,++++++++++++++++************))))))))))((((((((((((''''''''''''&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%----------------,,,,,,,,,,,,,,++++++++++++++************))))))))))(((((((((((('''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.....-----------------,,,,,,,,,,,,,,+++++++++++++***********)))))))))))((((((((((('''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.............----------------,,,,,,,,,,,,+++++++++++++**********)))))))))))(((((((((('''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&....................---------------,,,,,,,,,,,++++++++++++**********))))))))))((((((((((((((''''''''''''''''''''''''''''''''''''/////////...................-------------,,,,,,,,,,+++++++++++**********)))))))))))))(((((((((((((((((''''''''''''''''''''''''''///////////////////................------------,,,,,,,,,++++++++++************)))))))))))))(((((((((((((((((((((((''''''''''''''0000///////////////////////..............-----------,,,,,,,,,,++++++++++************)))))))))))))))(((((((((((((((((((((((((((((0000000000000000///////////////////............-----------,,,,,,,,,,++++++++++***********))))))))))))))))))(((((((((((((((((((((11110000000000000000000000////////////////...........----------,,,,,,,,,,+++++++++++************))))))))))))))))))))))))))))))))11111111111111111100000000000000000/////////////..........----------,,,,,,,,,,+++++++++++****************)))))))))))))))))))))))222111111111111111111111111100000000000000////////////..........---------,,,,,,,,,,++++++++++++**************************)))))))2222222222222222222211111111111111111000000000000//////////..........---------,,,,,,,,,,,++++++++++++++++***********************33333322222222222222222222222222111111111111100000000000/////////.........----------,,,,,,,,,,,,+++++++++++++++++++++++++*******33333333333333333333333322222222222222222111111111111000000000/////////.........-----------,,,,,,,,,,,,,,,++++++++++++++++++++++44444444443333333333333333333333333322222222222221111111111000000000/////////.........-------------,,,,,,,,,,,,,,,,,,,,,,,,+++++44444444444444444444444444444333333333333333322222222222111111111000000000/////////..........---------------,,,,,,,,,,,,,,,,,,,,55555555555555555554444444444444444444444333333333333222222222211111111000000000/////////............--------------------------,55555555555555555555555555555555555544444444444444333333333322222222211111111000000000//////////...............-----------------66666666666666666666666666555555555555555555555444444444433333333322222222211111111000000000////////////........................666666666666666666666666666666666666666666555555555555544444444433333333222222221111111110000000000///////////////..............77777777777777777777777777777777777766666666666666665555555555444444443333333322222222111111111000000000000/////////////////////777777777777777888888777777777777777777777777777666666666665555555554444444433333333222222221111111111100000000000000000////////888888888888888888888888888888888888888888888777777777777666666666555555554444444433333333222222222211111111111110000000000000009999999999999999999999999999999999999999988888888888888777777777766666665555555554444444333333333222222222221111111111111111110099999999999999999::::::::::::::::99999999999999999999888888888877777777666666665555555544444444333333333322222222222222111111111666666666666666666666666666666666666665555555555555555544444444444443333333333333333222222222222222222221111111111111111111111110000000000////////////.............------,,,,,,,,,,,,,,++++++++++++++++++++,,,,,,,,,,,,,------...............///////////////////***))))))))(((((('''''&&&&&&&%%%%%%$$$##""""""""!!!!! !!!!!""""""""##$$$%%%%%%%&&&&&&'''''((((((())))))))**"""""!!!!  !!!!!""""%%%%%$$$$$$$$$##########""""""""!!!!!!!!!! %%%%%%$$$$$$$$$$##########""""""""!!!!!!!!! %%%%%%%%%$$$$$$$$$#########""""""""!!!!!!!!!! &&&%%%%%%%%%$$$$$$$$$########""""""""!!!!!!!!! &&&&&&%%%%%%%%$$$$$$$$$########""""""""!!!!!!!!!! &&&&&&&&&%%%%%%%%$$$$$$$$########""""""""!!!!!!!!!!!! ''&&&&&&&&&&&%%%%%%$$$$$$$$#######"""""""""!!!!!!!!!!!!!!! '''''&&&&&&&&&&%%%%%%$$$$$$$$$######""""""""""!!!!!!!!!!!!!!!! '''''''''&&&&&&&&%%%%%%%$$$$$$$########"""""""""""!!!!!!!!!!!!!!''''''''''''&&&&&&&&%%%%%%$$$$$$$########""""""""""""""!!!!!!!!!((((((''''''''''&&&&&&&%%%%%%$$$$$$$########""""""""""""""!!!!!!(((((((((((''''''''&&&&&&%%%%%%%$$$$$$##########"""""""""""""""!))))((((((((((''''''''&&&&&&%%%%%%$$$$$$$$#########""""""""""""")))))))((((((((((('''''''&&&&&&%%%%%%$$$$$$$$############"""""""****)))))))))((((((((''''''&&&&&&%%%%%%%$$$$$$$$################********)))))))))(((((((''''''&&&&&&%%%%%%%$$$$$$$$$############+++++*********))))))(((((((''''''&&&&&&%%%%%%%%$$$$$$$$$$$$$$$$$,,,+++++++********)))))))((((((''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$,,,,,,,,++++++++*******)))))(((((('''''''&&&&&&&%%%%%%%%%%%%%%%%------,,,,,,,,+++++++******))))))((((('''''''&&&&&&&&&&&&&&&&&&&....---------,,,,,,,++++++*****))))))(((((''''''''''&&&&&&&&&&&&//...........------,,,,,,+++++******))))))((((((((''''''''''''''///////////........------,,,,,+++++******)))))))((((((((((((((((00000000000////////......-----,,,,,++++++******)))))))))))))((((11111111111000000000/////.....-----,,,,,++++++***********)))))))222222222222111111111000000////.....-----,,,,,+++++++++*********33333333333333222222221111100000/////....------,,,,,,,,,++++++++44444444444444443333333222222111110000////......-------,,,,,,,,,5555555555555554554444444433333222111110000//////......---------5666666666666666665555555544444333322222111100000//////.........6566666666666666666666655555554443333322221111000000////////....444444444444444444444343333332222221111100000////////...........////////////./.......-------,,,,,,,,++++++++++++++++++++++++++++)((((((('''&&&&&&%%%%%%$$$$$$#$$###$###$###$$$$$$$$%%%%%%%&%&&&&!!  %%%%$$$$$####"""""!!!!! &&%%%%%$$$$####""""!!!!!! &&&&&%%%%$$$$####""""!!!!!!!! '''&&&&%%%%$$$$####"""""!!!!!!!!('''''&&&&%%%%$$$####""""""""!!!(((((''''&&&&%%%$$$$#####"""""""))))((((('''&&&%%%%$$$$#########****))))(((('''&&&%%%%$$$$$$$$##+++++****)))((('''&&&&%%%%%%$$$$,,,,,,++++***)))((('''&&&&&&%%%%..-----,,,,+++***)))(((''''''''&////......---,,,++***))))(((((((0000000/////...--,,,++****))))))0111111100000///..---,,+++*****)000111111110000//..---,,+++*****....//////.....---,,+++***)))))(*****))))))(((((''''&&&&&&&&%%%%$$####""""!!!! !!&%%$$$##"""!!!!!'&&&%%$$##""""!!('''&&%%$$###""")))((''&&%%$$$##****))((''&&%%%$++++++**)(('&&&%+,,,,,++*))(''&&*******))(''&&%%&&&%%%%$$###""""! %%$$#""!''&%$$#"((('&%$#'''&&$#"##""! $$#"$$#! !  \ No newline at end of file diff --git a/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/f0a44ad4a4babd121543fd44032928e7.resS b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/f0a44ad4a4babd121543fd44032928e7.resS new file mode 100644 index 0000000..48511f5 Binary files /dev/null and b/TestCommon/Data/LeadingEdgeBuilds/ContentDirectory/f0a44ad4a4babd121543fd44032928e7.resS differ diff --git a/UnityDataTool.Tests/AnalyzeDanglingRefsTests.cs b/UnityDataTool.Tests/AnalyzeDanglingRefsTests.cs index b1c6158..c0e2196 100644 --- a/UnityDataTool.Tests/AnalyzeDanglingRefsTests.cs +++ b/UnityDataTool.Tests/AnalyzeDanglingRefsTests.cs @@ -12,7 +12,8 @@ namespace UnityDataTools.UnityDataTool.Tests; // not part of the analyzed input get recorded instead of leaving unexplained gaps in the object id // space. Uses the LeadingEdge AssetBundles fixture, where assetbundleroot.manifest declares // dependencies on three other bundles, so analyzing assetbundleroot alone leaves cross-bundle -// references dangling; analyzing the whole set resolves them. +// references dangling; analyzing the whole set resolves everything except references into Unity's +// built-in resource files, which are never part of a bundle set. public class AnalyzeDanglingRefsTests { private string m_TestOutputFolder; @@ -85,14 +86,25 @@ WHERE d.serialized_file IN (SELECT serialized_file FROM objects) public async Task Analyze_FullAssetBundleSet_ResolvesCrossBundleReferences() { // Analyzing the whole set brings the dependency bundles in, so no reference dangles into an - // un-analyzed file: dangling_refs_view (which joins refs) is empty. + // un-analyzed file. The only exceptions are the scene bundle's references into Unity's + // built-in resource files, which are never part of a bundle set: + // - 'unity default resources' (the RenderSettings spot cookie) ships complete with every + // player, so these references always resolve at runtime. + // - 'unity_builtin_extra' (the Sprites/Default shader of the copied sprite material): the + // build copies built-in objects into bundles like user assets, except shaders in the + // GraphicsSettings "Always Included Shaders" list, which are referenced externally and + // resolved against the player's unity_builtin_extra (which holds exactly those shaders). + // Such references break if the player is built with a different list. Content directory + // builds copy all referenced unity_builtin_extra objects into the output instead. var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); Assert.AreEqual(0, await Program.Main(new string[] { "analyze", m_AssetBundlesFolder, "-o", databasePath })); using var db = SQLTestHelper.OpenDatabase(databasePath); - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM dangling_refs_view", 0, - "analyzing the full set should resolve every cross-bundle reference"); + SQLTestHelper.AssertQueryInt(db, + @"SELECT COUNT(*) FROM dangling_refs_view + WHERE target_serialized_file NOT IN ('unity_builtin_extra', 'unity default resources')", + 0, "analyzing the full set should resolve every cross-bundle reference except built-ins"); AssertReferencesFullyAccounted(db); } diff --git a/UnityDataTool.Tests/SceneBundleContentTests.cs b/UnityDataTool.Tests/SceneBundleContentTests.cs new file mode 100644 index 0000000..1401644 --- /dev/null +++ b/UnityDataTool.Tests/SceneBundleContentTests.cs @@ -0,0 +1,100 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using NUnit.Framework; + +namespace UnityDataTools.UnityDataTool.Tests; + +#pragma warning disable NUnit2005, NUnit2006 + +// Sanity tests that the scenes are present in the LeadingEdge AssetBundle build output (issue #97): +// the scenes bundle contains a SerializedFile per scene plus its sharedAssets file, the scene files +// hold the expected objects, and the shared GreenStatic texture is included exactly once. +// The ContentDirectory build output gets deeper coverage once ContentLayout.json support lands. +public class SceneBundleContentTests +{ + private string m_TestOutputFolder; + private string m_ScenesBundlePath; + + [OneTimeSetUp] + public void OneTimeSetup() + { + m_TestOutputFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, "scene_content_test_folder"); + m_ScenesBundlePath = Path.Combine(TestContext.CurrentContext.TestDirectory, + "Data", "LeadingEdgeBuilds", "AssetBundles", "scenes"); + Directory.CreateDirectory(m_TestOutputFolder); + Directory.SetCurrentDirectory(m_TestOutputFolder); + } + + [TearDown] + public void Teardown() + { + var testDir = new DirectoryInfo(m_TestOutputFolder); + testDir.EnumerateFiles().ToList().ForEach(f => f.Delete()); + testDir.EnumerateDirectories().ToList().ForEach(d => d.Delete(true)); + } + + private static async Task RunAndCaptureStdout(params string[] args) + { + using var sw = new StringWriter(); + var currentOut = Console.Out; + try + { + Console.SetOut(sw); + Assert.AreEqual(0, await Program.Main(args), $"command failed: {string.Join(' ', args)}"); + } + finally + { + Console.SetOut(currentOut); + } + + return sw.ToString(); + } + + [Test] + public async Task ScenesBundle_ContainsOneSerializedFilePerScene() + { + var output = await RunAndCaptureStdout("archive", "list", m_ScenesBundlePath); + + foreach (var name in new[] + { + "BuildPlayer-Scene1", "BuildPlayer-Scene1.sharedAssets", + "BuildPlayer-Scene2", "BuildPlayer-Scene2.sharedAssets" + }) + { + Assert.That(output, Does.Contain(name), $"scenes bundle should contain {name}"); + } + } + + [Test] + public async Task ScenesBundle_SceneFilesContainSceneObjects_TextureIncludedOnce() + { + Assert.AreEqual(0, await Program.Main(new[] { "archive", "extract", m_ScenesBundlePath })); + var extractedFolder = Path.Combine(m_TestOutputFolder, "archive"); + + // Each scene file holds the scene's own objects: the generated GameObject with its + // SpriteRenderer, plus the scene settings objects. + foreach (var sceneFile in new[] { "BuildPlayer-Scene1", "BuildPlayer-Scene2" }) + { + var objectList = await RunAndCaptureStdout( + "serialized-file", "objectlist", Path.Combine(extractedFolder, sceneFile)); + Assert.That(objectList, Does.Contain("GameObject"), $"{sceneFile} should contain a GameObject"); + Assert.That(objectList, Does.Contain("SpriteRenderer"), $"{sceneFile} should contain a SpriteRenderer"); + Assert.That(objectList, Does.Contain("RenderSettings"), $"{sceneFile} should contain scene settings"); + } + + // Both scenes show the same texture, so it is included exactly once in the bundle: + // the Texture2D and its Sprite land in one sharedAssets file and the other scene + // references them from there. + var textureCount = 0; + foreach (var sharedFile in new[] { "BuildPlayer-Scene1.sharedAssets", "BuildPlayer-Scene2.sharedAssets" }) + { + var objectList = await RunAndCaptureStdout( + "serialized-file", "objectlist", Path.Combine(extractedFolder, sharedFile)); + textureCount += objectList.Split('\n').Count(line => line.Contains("Texture2D")); + } + + Assert.AreEqual(1, textureCount, "the shared texture should be included exactly once in the bundle"); + } +} diff --git a/UnityProjects/LeadingEdge/AGENTS.md b/UnityProjects/LeadingEdge/AGENTS.md index 4dca213..def6bca 100644 --- a/UnityProjects/LeadingEdge/AGENTS.md +++ b/UnityProjects/LeadingEdge/AGENTS.md @@ -1,6 +1,6 @@ # LeadingEdge test project -A Unity project that tracks the newest Unity version (currently 6000.6.0b3) and is updated proactively so UnityDataTools can be tested against the latest build features - for example Content Directory builds and serialized `Dictionary<,>` fields. +A Unity project that tracks the newest Unity version (currently 6000.6.0b5) and is updated proactively so UnityDataTools can be tested against the latest build features - for example Content Directory builds and serialized `Dictionary<,>` fields. Its build scripts produce the reference output checked in at `TestCommon/Data/LeadingEdgeBuilds` (see that folder's `AGENTS.md`). To update it, rebuild with the scripts below and check in the results. @@ -10,6 +10,7 @@ Both builds start from a root ScriptableObject whose serialized dictionary maps 1. **AudioClip references.** ScriptableObjects reference the project's two mp3 files. `a.mp3` is referenced from two different ScriptableObjects and `6.mp3` from one, demonstrating that all referenced content is included in the build exactly once, with no duplication. 2. **`SerializationDemo` asset.** A ScriptableObject with fields of many types, including a `[SerializeReference]` field. Useful for testing the `dump` command and for inspecting serialized field values directly. +3. **Scenes.** Two small scenes (`Assets/Scenes/Scene1.unity`, `Scene2.unity`) that both show the shared `GreenStatic.png` texture through a SpriteRenderer, with distinct GameObject names so their content differs. The `SceneList` asset references them by name through a serialized dictionary of `LoadableSceneId`. ## Editor scripts (`Assets/Editor`, `ContentDirectory` menu) @@ -21,8 +22,8 @@ Both build scripts write directly into `TestCommon/Data/LeadingEdgeBuilds` using ## Content Directory Build -The root asset is `ContentDirectoryRoot.asset`. It directly references the `LoadableAudioClipReference` assets, so those are loaded automatically when the content directory is registered. The AudioClips themselves are referenced through `Loadable`, so they are included in the build but loaded only on demand. +The root asset is `ContentDirectoryRoot.asset`. It directly references the `LoadableAudioClipReference` assets, so those are loaded automatically when the content directory is registered. The AudioClips themselves are referenced through `Loadable`, so they are included in the build but loaded only on demand. It also directly references the `SceneList` asset, whose `LoadableSceneId` entries pull the two scenes into the build; each scene becomes its own Content File. ## AssetBundle Build -The root asset is `AssetBundleRoot.asset`. AssetBundles do not support `Loadable`, so this build uses the direct-reference variants of the assets instead. Each asset is placed in its own bundle (named after the asset) - a highly granular layout that guarantees no content is duplicated across bundles. +The root asset is `AssetBundleRoot.asset`. AssetBundles do not support `Loadable`, so this build uses the direct-reference variants of the assets instead. Each asset is placed in its own bundle (named after the asset) - a highly granular layout that guarantees no content is duplicated across bundles. The two scenes are placed together in a `scenes` bundle, since AssetBundles require scenes and assets in separate bundles. diff --git a/UnityProjects/LeadingEdge/Assets/Editor/BuildAssetBundles.cs b/UnityProjects/LeadingEdge/Assets/Editor/BuildAssetBundles.cs index b2b3f04..68a023b 100644 --- a/UnityProjects/LeadingEdge/Assets/Editor/BuildAssetBundles.cs +++ b/UnityProjects/LeadingEdge/Assets/Editor/BuildAssetBundles.cs @@ -6,7 +6,8 @@ // Builds AssetBundles directly into the checked-in reference data under TestCommon. Every asset gets its own bundle // (named after its filename): the AssetBundleRoot, both DirectAudioClipReference assets, and each mp3 in // Assets/Audio. This highly granular layout ensures no asset is duplicated across bundles - shared assets -// (e.g. a.mp3) live in a single bundle that the others depend on. The build report is copied alongside the output. +// (e.g. a.mp3) live in a single bundle that the others depend on. A scene bundle holds the two scenes (AssetBundles +// require scenes and assets in separate bundles). The build report is copied alongside the output. public static class BuildAssetBundles { const string AudioFolder = "Assets/Audio"; @@ -50,6 +51,12 @@ public static void Build() }); } + bundles.Add(new AssetBundleBuild + { + assetBundleName = "scenes", + assetNames = GenerateAssets.ScenePaths + }); + var parameters = new BuildAssetBundlesParameters { outputPath = OutputFolder, diff --git a/UnityProjects/LeadingEdge/Assets/Editor/GenerateAssets.cs b/UnityProjects/LeadingEdge/Assets/Editor/GenerateAssets.cs index 9b7edf0..022ad34 100644 --- a/UnityProjects/LeadingEdge/Assets/Editor/GenerateAssets.cs +++ b/UnityProjects/LeadingEdge/Assets/Editor/GenerateAssets.cs @@ -2,18 +2,28 @@ using System.IO; using Unity.Loading; using UnityEditor; +using UnityEditor.SceneManagement; using UnityEngine; -// Generates the ScriptableObject assets used as build sources. The dictionaries are populated before the assets -// are saved, so the entries are serialized into the asset files. +// Generates the scenes and ScriptableObject assets used as build sources. The dictionaries are populated before +// the assets are saved, so the entries are serialized into the asset files. // // Leaf assets reference AudioClips (directly or via Loadable). The single-clip variants reference only a.mp3, // which is also referenced by the all-clips variants, demonstrating an AudioClip shared between two assets. +// Two small scenes each show the shared GreenStatic texture through a SpriteRenderer, with distinct GameObject +// names so the scenes have different content. The SceneList asset references both scenes by LoadableSceneId. // The root assets (DirectScriptableObjectReference) directly reference the leaf assets and act as build roots. public static class GenerateAssets { const string AudioFolder = "Assets/Audio"; const string OutputFolder = "Assets/ScriptableObjects"; + const string TexturePath = "Assets/Textures/GreenStatic.png"; + + public static readonly string[] ScenePaths = + { + "Assets/Scenes/Scene1.unity", + "Assets/Scenes/Scene2.unity" + }; [MenuItem("ContentDirectory/Generate Assets")] public static void Generate() @@ -21,6 +31,8 @@ public static void Generate() if (!AssetDatabase.IsValidFolder(OutputFolder)) AssetDatabase.CreateFolder("Assets", "ScriptableObjects"); + GenerateScenes(); + // All AudioClips keyed by filename without extension, e.g. "6.mp3" -> "6". var allClips = new Dictionary(); foreach (var guid in AssetDatabase.FindAssets("t:AudioClip", new[] { AudioFolder })) @@ -42,12 +54,46 @@ public static void Generate() serializationDemo.data = new SerializationDemo.SerializedData(); AssetDatabase.CreateAsset(serializationDemo, $"{OutputFolder}/SerializationDemo.asset"); + var sceneList = CreateSceneList("SceneList"); + CreateReference("AssetBundleRoot", direct, singleDirect, serializationDemo); - CreateReference("ContentDirectoryRoot", loadable, singleLoadable, serializationDemo); + CreateReference("ContentDirectoryRoot", loadable, singleLoadable, serializationDemo, sceneList); AssetDatabase.SaveAssets(); - Debug.Log("GenerateAssets: created leaf reference assets and AssetBundleRoot / ContentDirectoryRoot."); + Debug.Log("GenerateAssets: created scenes, leaf reference assets and AssetBundleRoot / ContentDirectoryRoot."); + } + + // Each scene contains a single GameObject showing the shared texture through a SpriteRenderer. The + // GameObject names differ per scene so the scenes have different content (and different content hashes). + static void GenerateScenes() + { + var importer = (TextureImporter)AssetImporter.GetAtPath(TexturePath); + if (importer.textureType != TextureImporterType.Sprite) + { + importer.textureType = TextureImporterType.Sprite; + importer.SaveAndReimport(); + } + var sprite = AssetDatabase.LoadAssetAtPath(TexturePath); + + foreach (var scenePath in ScenePaths) + { + var sceneName = Path.GetFileNameWithoutExtension(scenePath); + var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); + var go = new GameObject($"{sceneName}Sprite"); + go.AddComponent().sprite = sprite; + EditorSceneManager.SaveScene(scene, scenePath); + } + } + + static SceneList CreateSceneList(string name) + { + var asset = ScriptableObject.CreateInstance(); + foreach (var scenePath in ScenePaths) + asset.scenes[Path.GetFileNameWithoutExtension(scenePath)] = + LoadableSceneIdEditorUtility.CreateLoadableSceneId(scenePath); + AssetDatabase.CreateAsset(asset, $"{OutputFolder}/{name}.asset"); + return asset; } static DirectAudioClipReference CreateDirect(string name, Dictionary clips) diff --git a/UnityProjects/LeadingEdge/Assets/Scenes/Scene1.unity b/UnityProjects/LeadingEdge/Assets/Scenes/Scene1.unity new file mode 100644 index 0000000..ca9587f --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Scenes/Scene1.unity @@ -0,0 +1,218 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 2 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 2 + m_PVRDenoiserTypeIndirect: 2 + m_PVRDenoiserTypeAO: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1962581397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1962581399} + - component: {fileID: 1962581398} + m_Layer: 0 + m_Name: Scene1Sprite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &1962581398 +SpriteRenderer: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962581397} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_Sprite: {fileID: -976829699969478460, guid: a1f60aa244776994ea0795b08b2d20e6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 3.13, y: 2.3} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_SpriteSortPoint: 0 + m_BlendShapeWeights: [] +--- !u!4 &1962581399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962581397} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1962581399} diff --git a/UnityProjects/LeadingEdge/Assets/Scenes/Scene1.unity.meta b/UnityProjects/LeadingEdge/Assets/Scenes/Scene1.unity.meta new file mode 100644 index 0000000..afab428 --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Scenes/Scene1.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 162c015549f8733449ac70ae78ad3aa5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityProjects/LeadingEdge/Assets/Scenes/Scene2.unity b/UnityProjects/LeadingEdge/Assets/Scenes/Scene2.unity new file mode 100644 index 0000000..a30df11 --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Scenes/Scene2.unity @@ -0,0 +1,218 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 2 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 2 + m_PVRDenoiserTypeIndirect: 2 + m_PVRDenoiserTypeAO: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1962581397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1962581399} + - component: {fileID: 1962581398} + m_Layer: 0 + m_Name: Scene2Sprite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &1962581398 +SpriteRenderer: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962581397} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_Sprite: {fileID: -976829699969478460, guid: a1f60aa244776994ea0795b08b2d20e6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 3.13, y: 2.3} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_SpriteSortPoint: 0 + m_BlendShapeWeights: [] +--- !u!4 &1962581399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962581397} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1962581399} diff --git a/UnityProjects/LeadingEdge/Assets/Scenes/Scene2.unity.meta b/UnityProjects/LeadingEdge/Assets/Scenes/Scene2.unity.meta new file mode 100644 index 0000000..8a7f098 --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Scenes/Scene2.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 590cfeb4e0ff90f4e92f9e1262bcfe6f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityProjects/LeadingEdge/Assets/ScriptableObjects/ContentDirectoryRoot.asset b/UnityProjects/LeadingEdge/Assets/ScriptableObjects/ContentDirectoryRoot.asset index b22f315..6289f91 100644 --- a/UnityProjects/LeadingEdge/Assets/ScriptableObjects/ContentDirectoryRoot.asset +++ b/UnityProjects/LeadingEdge/Assets/ScriptableObjects/ContentDirectoryRoot.asset @@ -19,3 +19,5 @@ MonoBehaviour: value: {fileID: 11400000, guid: 21679be819d6e9146a63bb02a7e51f2f, type: 2} - key: SerializationDemo value: {fileID: 11400000, guid: 78532141fd7679a458405eb16bdb75fd, type: 2} + - key: SceneList + value: {fileID: 11400000, guid: 70a210050f71a924aa83be7146547111, type: 2} diff --git a/UnityProjects/LeadingEdge/Assets/ScriptableObjects/SceneList.asset b/UnityProjects/LeadingEdge/Assets/ScriptableObjects/SceneList.asset new file mode 100644 index 0000000..bb6f217 --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/ScriptableObjects/SceneList.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56b6ff5e5d3a543448a78b234da5e1c1, type: 3} + m_Name: SceneList + m_EditorClassIdentifier: Assembly-CSharp::SceneList + scenes: + - key: Scene1 + value: + m_SceneGUID: 162c015549f8733449ac70ae78ad3aa5 + - key: Scene2 + value: + m_SceneGUID: 590cfeb4e0ff90f4e92f9e1262bcfe6f diff --git a/UnityProjects/LeadingEdge/Assets/ScriptableObjects/SceneList.asset.meta b/UnityProjects/LeadingEdge/Assets/ScriptableObjects/SceneList.asset.meta new file mode 100644 index 0000000..875655c --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/ScriptableObjects/SceneList.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 70a210050f71a924aa83be7146547111 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityProjects/LeadingEdge/Assets/Scripts/SceneList.cs b/UnityProjects/LeadingEdge/Assets/Scripts/SceneList.cs new file mode 100644 index 0000000..ad17b8b --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Scripts/SceneList.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Unity.Loading; +using UnityEngine; + +// References scenes through a serialized Dictionary of LoadableSceneId. The scenes are included in the +// build and can be loaded on demand by name through SceneManager.LoadSceneAsync(LoadableSceneId). +public class SceneList : ScriptableObject +{ + [SerializeField] + public Dictionary scenes = new Dictionary(); +} diff --git a/UnityProjects/LeadingEdge/Assets/Scripts/SceneList.cs.meta b/UnityProjects/LeadingEdge/Assets/Scripts/SceneList.cs.meta new file mode 100644 index 0000000..fd3bb8b --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Scripts/SceneList.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 56b6ff5e5d3a543448a78b234da5e1c1 \ No newline at end of file diff --git a/UnityProjects/LeadingEdge/Assets/Textures.meta b/UnityProjects/LeadingEdge/Assets/Textures.meta new file mode 100644 index 0000000..86e4ae4 --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06338275a8cd99b4990e419d12e13bb0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityProjects/LeadingEdge/Assets/Textures/GreenStatic.png b/UnityProjects/LeadingEdge/Assets/Textures/GreenStatic.png new file mode 100644 index 0000000..7df26f8 Binary files /dev/null and b/UnityProjects/LeadingEdge/Assets/Textures/GreenStatic.png differ diff --git a/UnityProjects/LeadingEdge/Assets/Textures/GreenStatic.png.meta b/UnityProjects/LeadingEdge/Assets/Textures/GreenStatic.png.meta new file mode 100644 index 0000000..d26ed68 --- /dev/null +++ b/UnityProjects/LeadingEdge/Assets/Textures/GreenStatic.png.meta @@ -0,0 +1,171 @@ +fileFormatVersion: 2 +guid: a1f60aa244776994ea0795b08b2d20e6 +TextureImporter: + internalIDToNameTable: + - first: + 213: -976829699969478460 + second: GreenStatic_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationMethod: 0 + spriteTessellationDetail: -1 + spriteGeometrySubdivision: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: CloudRendering + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: GreenStatic_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 313 + height: 230 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4c09447309a9172f0800000000000000 + internalID: -976829699969478460 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + GreenStatic_0: -976829699969478460 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: