From a645c8410021ff61e471bf5fcde742fa53c8eeff Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Sun, 28 Dec 2025 20:25:53 -0500 Subject: [PATCH 01/17] Initial support for importing BuildReports --- Analyzer/Properties/Resources.Designer.cs | 47 ++++++++++- Analyzer/Properties/Resources.resx | 3 + Analyzer/Resources/BuildReport.sql | 36 ++++++++ .../SQLite/Handlers/BuildReportHandler.cs | 78 ++++++++++++++++++ .../Writers/SerializedFileSQLiteWriter.cs | 1 + Analyzer/SerializedObjects/BuildReport.cs | 65 +++++++++++++++ .../BuildReport-Player/LastBuild.buildreport | Bin 0 -> 37989 bytes UnityDataTool.Tests/BuildReportTests.cs | 55 ++++++++++++ 8 files changed, 284 insertions(+), 1 deletion(-) create mode 100644 Analyzer/Resources/BuildReport.sql create mode 100644 Analyzer/SQLite/Handlers/BuildReportHandler.cs create mode 100644 Analyzer/SerializedObjects/BuildReport.cs create mode 100644 TestCommon/Data/BuildReport-Player/LastBuild.buildreport diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index 8fb39a8..62c44a0 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -628,7 +628,52 @@ internal static string AudioClip { return ResourceManager.GetString("AudioClip", resourceCulture); } } - + + /// + /// Looks up a localized string similar to CREATE TABLE IF NOT EXISTS build_reports( + /// id INTEGER, + /// build_guid TEXT, + /// platform_name TEXT, + /// subtarget INTEGER, + /// options INTEGER, + /// asset_bundle_options INTEGER, + /// output_path TEXT, + /// crc INTEGER, + /// total_size INTEGER, + /// total_time_ticks INTEGER, + /// total_errors INTEGER, + /// total_warnings INTEGER, + /// build_type TEXT, + /// build_result INTEGER, + /// PRIMARY KEY (id) + ///); + /// + ///CREATE VIEW build_report_view AS + ///SELECT + /// o.*, + /// br.build_guid, + /// br.platform_name, + /// br.subtarget, + /// br.options, + /// br.asset_bundle_options, + /// br.output_path, + /// br.crc, + /// br.total_size, + /// br.total_time_ticks, + /// br.total_errors, + /// br.total_warnings, + /// br.build_type, + /// br.build_result + ///FROM object_view o + ///INNER JOIN build_reports br ON o.id = br.id; + ///. + /// + internal static string BuildReport { + get { + return ResourceManager.GetString("BuildReport", resourceCulture); + } + } + /// /// Looks up a localized string similar to CREATE INDEX refs_object_index ON refs(object); ///CREATE INDEX refs_referenced_object_index ON refs(referenced_object); diff --git a/Analyzer/Properties/Resources.resx b/Analyzer/Properties/Resources.resx index da823c0..97471b0 100644 --- a/Analyzer/Properties/Resources.resx +++ b/Analyzer/Properties/Resources.resx @@ -127,6 +127,9 @@ ..\Resources\AudioClip.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + ..\Resources\BuildReport.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + ..\Resources\Finalize.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql new file mode 100644 index 0000000..c211d00 --- /dev/null +++ b/Analyzer/Resources/BuildReport.sql @@ -0,0 +1,36 @@ +CREATE TABLE IF NOT EXISTS build_reports( + id INTEGER, + build_guid TEXT, + platform_name TEXT, + subtarget INTEGER, + options INTEGER, + asset_bundle_options INTEGER, + output_path TEXT, + crc INTEGER, + total_size INTEGER, + total_time_ticks INTEGER, + total_errors INTEGER, + total_warnings INTEGER, + build_type TEXT, + build_result INTEGER, + PRIMARY KEY (id) +); + +CREATE VIEW build_report_view AS +SELECT + o.*, + br.build_guid, + br.platform_name, + br.subtarget, + br.options, + br.asset_bundle_options, + br.output_path, + br.crc, + br.total_size, + br.total_time_ticks, + br.total_errors, + br.total_warnings, + br.build_type, + br.build_result +FROM object_view o +INNER JOIN build_reports br ON o.id = br.id; diff --git a/Analyzer/SQLite/Handlers/BuildReportHandler.cs b/Analyzer/SQLite/Handlers/BuildReportHandler.cs new file mode 100644 index 0000000..8a93b11 --- /dev/null +++ b/Analyzer/SQLite/Handlers/BuildReportHandler.cs @@ -0,0 +1,78 @@ +using System; +using Microsoft.Data.Sqlite; +using UnityDataTools.Analyzer.SerializedObjects; +using UnityDataTools.FileSystem.TypeTreeReaders; + +namespace UnityDataTools.Analyzer.SQLite.Handlers; + +public class BuildReportHandler : ISQLiteHandler +{ + private SqliteCommand m_InsertCommand; + + public void Init(SqliteConnection db) + { + using var command = db.CreateCommand(); + command.CommandText = Properties.Resources.BuildReport ?? throw new InvalidOperationException("BuildReport resource not found"); + command.ExecuteNonQuery(); + + m_InsertCommand = db.CreateCommand(); + m_InsertCommand.CommandText = @"INSERT INTO build_reports( + id, build_guid, platform_name, subtarget, options, asset_bundle_options, + output_path, crc, total_size, total_time_ticks, total_errors, total_warnings, + build_type, build_result + ) VALUES( + @id, @build_guid, @platform_name, @subtarget, @options, @asset_bundle_options, + @output_path, @crc, @total_size, @total_time_ticks, @total_errors, @total_warnings, + @build_type, @build_result + )"; + + m_InsertCommand.Parameters.Add("@id", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@build_guid", SqliteType.Text); + m_InsertCommand.Parameters.Add("@platform_name", SqliteType.Text); + m_InsertCommand.Parameters.Add("@subtarget", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@options", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@asset_bundle_options", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@output_path", SqliteType.Text); + m_InsertCommand.Parameters.Add("@crc", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@total_size", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@total_time_ticks", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@total_errors", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@total_warnings", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@build_type", SqliteType.Text); + m_InsertCommand.Parameters.Add("@build_result", SqliteType.Integer); + } + + public void Process(Context ctx, long objectId, RandomAccessReader reader, out string name, out long streamDataSize) + { + var buildReport = BuildReport.Read(reader); + m_InsertCommand.Transaction = ctx.Transaction; + m_InsertCommand.Parameters["@id"].Value = objectId; + m_InsertCommand.Parameters["@build_guid"].Value = buildReport.BuildGuid; + m_InsertCommand.Parameters["@platform_name"].Value = buildReport.PlatformName; + m_InsertCommand.Parameters["@subtarget"].Value = buildReport.Subtarget; + m_InsertCommand.Parameters["@options"].Value = buildReport.Options; + m_InsertCommand.Parameters["@asset_bundle_options"].Value = buildReport.AssetBundleOptions; + m_InsertCommand.Parameters["@output_path"].Value = buildReport.OutputPath; + m_InsertCommand.Parameters["@crc"].Value = buildReport.Crc; + m_InsertCommand.Parameters["@total_size"].Value = (long)buildReport.TotalSize; + m_InsertCommand.Parameters["@total_time_ticks"].Value = (long)buildReport.TotalTimeTicks; + m_InsertCommand.Parameters["@total_errors"].Value = buildReport.TotalErrors; + m_InsertCommand.Parameters["@total_warnings"].Value = buildReport.TotalWarnings; + m_InsertCommand.Parameters["@build_type"].Value = BuildReport.GetBuildTypeString(buildReport.BuildType); + m_InsertCommand.Parameters["@build_result"].Value = buildReport.BuildResult; + + m_InsertCommand.ExecuteNonQuery(); + + streamDataSize = 0; + name = buildReport.Name; + } + + public void Finalize(SqliteConnection db) + { + } + + void IDisposable.Dispose() + { + m_InsertCommand?.Dispose(); + } +} diff --git a/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs b/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs index 63c1c0d..ac9b0ea 100644 --- a/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs +++ b/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs @@ -38,6 +38,7 @@ public class SerializedFileSQLiteWriter : IDisposable { "AssetBundle", new AssetBundleHandler() }, { "PreloadData", new PreloadDataHandler() }, { "MonoScript", new MonoScriptHandler() }, + { "BuildReport", new BuildReportHandler() }, }; // serialized files diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs new file mode 100644 index 0000000..2f8acee --- /dev/null +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -0,0 +1,65 @@ +using UnityDataTools.FileSystem.TypeTreeReaders; + +namespace UnityDataTools.Analyzer.SerializedObjects; + +public class BuildReport +{ + public string Name { get; init; } + public string BuildGuid { get; init; } + public string PlatformName { get; init; } + public int Subtarget { get; init; } + public int Options { get; init; } + public int AssetBundleOptions { get; init; } + public string OutputPath { get; init; } + public uint Crc { get; init; } + public ulong TotalSize { get; init; } + public ulong TotalTimeTicks { get; init; } + public int TotalErrors { get; init; } + public int TotalWarnings { get; init; } + public int BuildType { get; init; } + public int BuildResult { get; init; } + + private BuildReport() { } + + public static BuildReport Read(RandomAccessReader reader) + { + var summary = reader["m_Summary"]; + + // Read the GUID (4 unsigned ints) + var guidData = summary["buildGUID"]; + var guid0 = guidData["data[0]"].GetValue(); + var guid1 = guidData["data[1]"].GetValue(); + var guid2 = guidData["data[2]"].GetValue(); + var guid3 = guidData["data[3]"].GetValue(); + var guidString = $"{guid0:x8}{guid1:x8}{guid2:x8}{guid3:x8}"; + + return new BuildReport() + { + Name = reader["m_Name"].GetValue(), + BuildGuid = guidString, + PlatformName = summary["platformName"].GetValue(), + Subtarget = summary["subtarget"].GetValue(), + Options = summary["options"].GetValue(), + AssetBundleOptions = summary["assetBundleOptions"].GetValue(), + OutputPath = summary["outputPath"].GetValue(), + Crc = summary["crc"].GetValue(), + TotalSize = summary["totalSize"].GetValue(), + TotalTimeTicks = summary["totalTimeTicks"].GetValue(), + TotalErrors = summary["totalErrors"].GetValue(), + TotalWarnings = summary["totalWarnings"].GetValue(), + BuildType = summary["buildType"].GetValue(), + BuildResult = summary["buildResult"].GetValue() + }; + } + + public static string GetBuildTypeString(int buildType) + { + return buildType switch + { + 1 => "Player", + 2 => "AssetBundle", + 3 => "Player, AssetBundle", + _ => buildType.ToString() + }; + } +} diff --git a/TestCommon/Data/BuildReport-Player/LastBuild.buildreport b/TestCommon/Data/BuildReport-Player/LastBuild.buildreport new file mode 100644 index 0000000000000000000000000000000000000000..dbb40d71694f82ee10f060d97bdf046479719c17 GIT binary patch literal 37989 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 { "analyze", path, "-p", "*.buildreport" }; + + Assert.AreEqual(0, await Program.Main(args.ToArray())); + using var db = SQLTestHelper.OpenDatabase(databasePath); + + // Verify build_reports table has one row + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, + "Expected exactly one row in build_reports table"); + + // Verify build_report_view has one row + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_report_view", 1, + "Expected exactly one row in build_report_view"); + + // Verify specific fields from m_Summary + SQLTestHelper.AssertQueryString(db, "SELECT platform_name FROM build_report_view", "Win64", + "Unexpected platform_name"); + + SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_report_view", "AssetBundle", + "Unexpected build_type - should be 'AssetBundle' not the numeric value"); + + SQLTestHelper.AssertQueryInt(db, "SELECT subtarget FROM build_report_view", 2, + "Unexpected subtarget"); + + SQLTestHelper.AssertQueryInt(db, "SELECT total_errors FROM build_report_view", 0, + "Unexpected total_errors"); + + SQLTestHelper.AssertQueryInt(db, "SELECT total_warnings FROM build_report_view", 0, + "Unexpected total_warnings"); + + SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_report_view", 1, + "Unexpected build_result"); + + // Verify output_path is present + var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_report_view"); + Assert.That(outputPath, Does.Contain("AssetBundles"), "Output path should contain 'AssetBundles'"); + + // Verify total_size is greater than 0 + var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_report_view"); + Assert.That(totalSize, Is.GreaterThan(0), "total_size should be greater than 0"); + + // Verify the view joins correctly with object_view data + SQLTestHelper.AssertQueryString(db, "SELECT name FROM build_report_view", "Build AssetBundles", + "name from object_view should be accessible in build_report_view"); + + SQLTestHelper.AssertQueryString(db, "SELECT type FROM build_report_view", "BuildReport", + "type from object_view should be accessible in build_report_view"); + } } From 773ac3bc9082c8ed5bcf99fdf1fae1dc2fd849aa Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Sun, 28 Dec 2025 20:53:59 -0500 Subject: [PATCH 02/17] FIx GUID parsing to handle Unity awkward serialization representation --- Analyzer/SerializedObjects/BuildReport.cs | 32 ++++++++++++- UnityDataTool.Tests/BuildReportTests.cs | 55 +++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index 2f8acee..2d3f7d7 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -26,12 +26,13 @@ public static BuildReport Read(RandomAccessReader reader) var summary = reader["m_Summary"]; // Read the GUID (4 unsigned ints) + // Unity's GUID format reverses nibbles within each uint32 var guidData = summary["buildGUID"]; var guid0 = guidData["data[0]"].GetValue(); var guid1 = guidData["data[1]"].GetValue(); var guid2 = guidData["data[2]"].GetValue(); var guid3 = guidData["data[3]"].GetValue(); - var guidString = $"{guid0:x8}{guid1:x8}{guid2:x8}{guid3:x8}"; + var guidString = FormatUnityGuid(guid0, guid1, guid2, guid3); return new BuildReport() { @@ -52,6 +53,35 @@ public static BuildReport Read(RandomAccessReader reader) }; } + // Converts Unity GUID data array to string format matching Unity's GUIDToString function. + // Unity stores GUIDs as 4 uint32 values and converts them to a 32-character hex string + // with a specific byte ordering that differs from standard GUID/UUID formatting. + // Example: data[0]=3856716653 (0xe60765cd) becomes "d63d0e5e" + private static string FormatUnityGuid(uint data0, uint data1, uint data2, uint data3) + { + char[] result = new char[32]; + FormatUInt32Reversed(data0, result, 0); + FormatUInt32Reversed(data1, result, 8); + FormatUInt32Reversed(data2, result, 16); + FormatUInt32Reversed(data3, result, 24); + return new string(result); + } + + // Formats a uint32 as 8 hex digits matching Unity's GUIDToString logic. + // Unity's implementation extracts nibbles from most significant to least significant + // (j=7 down to j=0) and writes them to output positions in the same order (offset+7 to offset+0), + // which reverses the byte order compared to standard hex formatting. + // For example: 0xe60765cd becomes "d63d0e5e" (bytes reversed: cd,65,07,e6 → e6,07,65,cd) + private static void FormatUInt32Reversed(uint value, char[] output, int offset) + { + const string hexChars = "0123456789abcdef"; + for (int j = 7; j >= 0; j--) + { + uint nibble = (value >> (j * 4)) & 0xF; + output[offset + j] = hexChars[(int)nibble]; + } + } + public static string GetBuildTypeString(int buildType) { return buildType switch diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index ea990f0..321589a 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -267,4 +267,59 @@ public async Task Analyze_BuildReport_ContainsBuildReportData() SQLTestHelper.AssertQueryString(db, "SELECT type FROM build_report_view", "BuildReport", "type from object_view should be accessible in build_report_view"); } + + // Test the BuildReport-specific table with a Player build (not AssetBundle build) + [Test] + public async Task Analyze_BuildReport_Player_ContainsBuildReportData() + { + var path = Path.Combine(m_TestDataFolder, "BuildReport-Player"); + var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); + + var args = new List { "analyze", path, "-p", "*.buildreport" }; + + Assert.AreEqual(0, await Program.Main(args.ToArray())); + using var db = SQLTestHelper.OpenDatabase(databasePath); + + // Verify build_reports table has one row + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, + "Expected exactly one row in build_reports table"); + + // Verify build_report_view has one row + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_report_view", 1, + "Expected exactly one row in build_report_view"); + + // Verify build_type is "Player" not "AssetBundle" + SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_report_view", "Player", + "Unexpected build_type - should be 'Player' for player builds"); + + // Verify buildGUID was correctly parsed + // Expected: data[0]=3856716653, data[1]=3821322382, data[2]=1211319241, data[3]=2950543120 + // Unity's GUID format reverses nibbles within each uint32 (see GUIDToString in Unity C++) + SQLTestHelper.AssertQueryString(db, "SELECT build_guid FROM build_report_view", "d63d0e5ee80c4c3e9c343384017bddfa", + "Unexpected build_guid"); + + // Verify subtarget + SQLTestHelper.AssertQueryInt(db, "SELECT subtarget FROM build_report_view", 2, + "Unexpected subtarget"); + + // Verify options (should be 9 for this Player build) + SQLTestHelper.AssertQueryInt(db, "SELECT options FROM build_report_view", 9, + "Unexpected options value"); + + // Verify build_result (1 = Success) + SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_report_view", 1, + "Unexpected build_result"); + + // Verify name + SQLTestHelper.AssertQueryString(db, "SELECT name FROM build_report_view", "New Report", + "Unexpected BuildReport name"); + + // Verify total_size is greater than 0 + var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_report_view"); + Assert.That(totalSize, Is.GreaterThan(0), "total_size should be greater than 0"); + + // Verify output_path contains expected path + var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_report_view"); + Assert.That(outputPath, Does.Contain("TestProject.exe"), "Output path should contain 'TestProject.exe' for player build"); + } } From 5c6cfeaf2c3067c65be2395f708a13146bb65646 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Sun, 28 Dec 2025 21:14:23 -0500 Subject: [PATCH 03/17] Improve tests Update AGENTS.md to try to reduce unnecessary redunant comments added by Claude --- AGENTS.md | 17 +++++ UnityDataTool.Tests/BuildReportTests.cs | 86 +++++++------------------ 2 files changed, 40 insertions(+), 63 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 82f5783..93fd1f1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -47,6 +47,23 @@ dotnet test --filter "FullyQualifiedName~SerializedFile" Test projects: UnityFileSystem.Tests, Analyzer.Tests, UnityDataTool.Tests, TestCommon (helper library) +### Code Style + +#### Comments + +* Write comments that explain "why". A few high level comments explaining the purpose of classes or methods is very helpful. Comments explaining tricky code are also helpful. +* Avoid comments that are redundant with the code. Do not comment before each line of code explaining what it does unless there is something that is not obvious going on. +* Do not use formal C# XML format when commenting methods, unless it is in an important interface class like UnityFileSystem. + +#### Formatting + +To repair white space or style issues, run: + +``` +dotnet format whitespace . --folder +dotnet format style +``` + ### Running the Tool ```bash # Show all commands diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 321589a..58e2e91 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -213,7 +213,6 @@ public async Task Analyze_BuildReport_ContainsExpectedReferences( "No object should be referenced more than once"); } - // Test the BuildReport-specific table and view [Test] public async Task Analyze_BuildReport_ContainsBuildReportData() { @@ -225,50 +224,31 @@ public async Task Analyze_BuildReport_ContainsBuildReportData() Assert.AreEqual(0, await Program.Main(args.ToArray())); using var db = SQLTestHelper.OpenDatabase(databasePath); - // Verify build_reports table has one row - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, - "Expected exactly one row in build_reports table"); - - // Verify build_report_view has one row SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_report_view", 1, "Expected exactly one row in build_report_view"); - // Verify specific fields from m_Summary - SQLTestHelper.AssertQueryString(db, "SELECT platform_name FROM build_report_view", "Win64", + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, + "Expected exactly one row in build_reports table"); + SQLTestHelper.AssertQueryString(db, "SELECT platform_name FROM build_reports", "Win64", "Unexpected platform_name"); - - SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_report_view", "AssetBundle", - "Unexpected build_type - should be 'AssetBundle' not the numeric value"); - - SQLTestHelper.AssertQueryInt(db, "SELECT subtarget FROM build_report_view", 2, + SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_reports", "AssetBundle", + "Unexpected build_type"); + SQLTestHelper.AssertQueryInt(db, "SELECT subtarget FROM build_reports", 2, "Unexpected subtarget"); - - SQLTestHelper.AssertQueryInt(db, "SELECT total_errors FROM build_report_view", 0, + SQLTestHelper.AssertQueryInt(db, "SELECT total_errors FROM build_reports", 0, "Unexpected total_errors"); - - SQLTestHelper.AssertQueryInt(db, "SELECT total_warnings FROM build_report_view", 0, + SQLTestHelper.AssertQueryInt(db, "SELECT total_warnings FROM build_reports", 0, "Unexpected total_warnings"); - - SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_report_view", 1, + SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_reports", 1, "Unexpected build_result"); - // Verify output_path is present - var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_report_view"); + var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_reports"); Assert.That(outputPath, Does.Contain("AssetBundles"), "Output path should contain 'AssetBundles'"); - // Verify total_size is greater than 0 - var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_report_view"); + var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_reports"); Assert.That(totalSize, Is.GreaterThan(0), "total_size should be greater than 0"); - - // Verify the view joins correctly with object_view data - SQLTestHelper.AssertQueryString(db, "SELECT name FROM build_report_view", "Build AssetBundles", - "name from object_view should be accessible in build_report_view"); - - SQLTestHelper.AssertQueryString(db, "SELECT type FROM build_report_view", "BuildReport", - "type from object_view should be accessible in build_report_view"); } - // Test the BuildReport-specific table with a Player build (not AssetBundle build) [Test] public async Task Analyze_BuildReport_Player_ContainsBuildReportData() { @@ -280,46 +260,26 @@ public async Task Analyze_BuildReport_Player_ContainsBuildReportData() Assert.AreEqual(0, await Program.Main(args.ToArray())); using var db = SQLTestHelper.OpenDatabase(databasePath); - // Verify build_reports table has one row - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, - "Expected exactly one row in build_reports table"); - - // Verify build_report_view has one row SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_report_view", 1, "Expected exactly one row in build_report_view"); - // Verify build_type is "Player" not "AssetBundle" - SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_report_view", "Player", - "Unexpected build_type - should be 'Player' for player builds"); - - // Verify buildGUID was correctly parsed - // Expected: data[0]=3856716653, data[1]=3821322382, data[2]=1211319241, data[3]=2950543120 - // Unity's GUID format reverses nibbles within each uint32 (see GUIDToString in Unity C++) - SQLTestHelper.AssertQueryString(db, "SELECT build_guid FROM build_report_view", "d63d0e5ee80c4c3e9c343384017bddfa", + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, + "Expected exactly one row in build_reports table"); + SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_reports", "Player", + "Unexpected build_type"); + SQLTestHelper.AssertQueryString(db, "SELECT build_guid FROM build_reports", "d63d0e5ee80c4c3e9c343384017bddfa", "Unexpected build_guid"); - - // Verify subtarget - SQLTestHelper.AssertQueryInt(db, "SELECT subtarget FROM build_report_view", 2, + SQLTestHelper.AssertQueryInt(db, "SELECT subtarget FROM build_reports", 2, "Unexpected subtarget"); - - // Verify options (should be 9 for this Player build) - SQLTestHelper.AssertQueryInt(db, "SELECT options FROM build_report_view", 9, - "Unexpected options value"); - - // Verify build_result (1 = Success) - SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_report_view", 1, + SQLTestHelper.AssertQueryInt(db, "SELECT options FROM build_reports", 9, + "Unexpected options"); + SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_reports", 1, "Unexpected build_result"); - // Verify name - SQLTestHelper.AssertQueryString(db, "SELECT name FROM build_report_view", "New Report", - "Unexpected BuildReport name"); - - // Verify total_size is greater than 0 - var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_report_view"); + var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_reports"); Assert.That(totalSize, Is.GreaterThan(0), "total_size should be greater than 0"); - // Verify output_path contains expected path - var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_report_view"); - Assert.That(outputPath, Does.Contain("TestProject.exe"), "Output path should contain 'TestProject.exe' for player build"); + var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_reports"); + Assert.That(outputPath, Does.Contain("TestProject.exe"), "Output path should contain 'TestProject.exe'"); } } From 7041ecbe64fbb09f9d0e97de496d276ac8b77e64 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Sun, 28 Dec 2025 21:23:21 -0500 Subject: [PATCH 04/17] build_result as text For readability --- Analyzer/Resources/BuildReport.sql | 2 +- Analyzer/SQLite/Handlers/BuildReportHandler.cs | 2 +- Analyzer/SerializedObjects/BuildReport.cs | 17 +++++++++++++++-- UnityDataTool.Tests/BuildReportTests.cs | 4 ++-- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql index c211d00..a265f0d 100644 --- a/Analyzer/Resources/BuildReport.sql +++ b/Analyzer/Resources/BuildReport.sql @@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS build_reports( total_errors INTEGER, total_warnings INTEGER, build_type TEXT, - build_result INTEGER, + build_result TEXT, PRIMARY KEY (id) ); diff --git a/Analyzer/SQLite/Handlers/BuildReportHandler.cs b/Analyzer/SQLite/Handlers/BuildReportHandler.cs index 8a93b11..570d589 100644 --- a/Analyzer/SQLite/Handlers/BuildReportHandler.cs +++ b/Analyzer/SQLite/Handlers/BuildReportHandler.cs @@ -39,7 +39,7 @@ public void Init(SqliteConnection db) m_InsertCommand.Parameters.Add("@total_errors", SqliteType.Integer); m_InsertCommand.Parameters.Add("@total_warnings", SqliteType.Integer); m_InsertCommand.Parameters.Add("@build_type", SqliteType.Text); - m_InsertCommand.Parameters.Add("@build_result", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@build_result", SqliteType.Text); } public void Process(Context ctx, long objectId, RandomAccessReader reader, out string name, out long streamDataSize) diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index 2d3f7d7..d329ec5 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -17,7 +17,7 @@ public class BuildReport public int TotalErrors { get; init; } public int TotalWarnings { get; init; } public int BuildType { get; init; } - public int BuildResult { get; init; } + public string BuildResult { get; init; } private BuildReport() { } @@ -49,7 +49,7 @@ public static BuildReport Read(RandomAccessReader reader) TotalErrors = summary["totalErrors"].GetValue(), TotalWarnings = summary["totalWarnings"].GetValue(), BuildType = summary["buildType"].GetValue(), - BuildResult = summary["buildResult"].GetValue() + BuildResult = GetBuildResultString(summary["buildResult"].GetValue()) }; } @@ -92,4 +92,17 @@ public static string GetBuildTypeString(int buildType) _ => buildType.ToString() }; } + + public static string GetBuildResultString(int buildResult) + { + return buildResult switch + { + 0 => "Unknown", + 1 => "Succeeded", + 2 => "Failed", + 3 => "Cancelled", + 4 => "Pending", + _ => buildResult.ToString() + }; + } } diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 58e2e91..319bbe2 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -239,7 +239,7 @@ public async Task Analyze_BuildReport_ContainsBuildReportData() "Unexpected total_errors"); SQLTestHelper.AssertQueryInt(db, "SELECT total_warnings FROM build_reports", 0, "Unexpected total_warnings"); - SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_reports", 1, + SQLTestHelper.AssertQueryString(db, "SELECT build_result FROM build_reports", "Succeeded", "Unexpected build_result"); var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_reports"); @@ -273,7 +273,7 @@ public async Task Analyze_BuildReport_Player_ContainsBuildReportData() "Unexpected subtarget"); SQLTestHelper.AssertQueryInt(db, "SELECT options FROM build_reports", 9, "Unexpected options"); - SQLTestHelper.AssertQueryInt(db, "SELECT build_result FROM build_reports", 1, + SQLTestHelper.AssertQueryString(db, "SELECT build_result FROM build_reports", "Succeeded", "Unexpected build_result"); var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_reports"); From e551bd6ae70c5057738b2e1adf1f042f174e5dc6 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Sun, 28 Dec 2025 21:27:58 -0500 Subject: [PATCH 05/17] Improve order of rows --- Analyzer/Resources/BuildReport.sql | 30 +++++++------- .../SQLite/Handlers/BuildReportHandler.cs | 40 +++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql index a265f0d..a037a2f 100644 --- a/Analyzer/Resources/BuildReport.sql +++ b/Analyzer/Resources/BuildReport.sql @@ -1,36 +1,36 @@ CREATE TABLE IF NOT EXISTS build_reports( id INTEGER, - build_guid TEXT, + build_type TEXT, + build_result TEXT, platform_name TEXT, subtarget INTEGER, + total_time_ticks INTEGER, + total_size INTEGER, + build_guid TEXT, + total_errors INTEGER, + total_warnings INTEGER, options INTEGER, asset_bundle_options INTEGER, output_path TEXT, crc INTEGER, - total_size INTEGER, - total_time_ticks INTEGER, - total_errors INTEGER, - total_warnings INTEGER, - build_type TEXT, - build_result TEXT, PRIMARY KEY (id) ); CREATE VIEW build_report_view AS SELECT o.*, - br.build_guid, + br.build_type, + br.build_result, br.platform_name, br.subtarget, - br.options, - br.asset_bundle_options, - br.output_path, - br.crc, - br.total_size, br.total_time_ticks, + br.total_size, + br.build_guid, br.total_errors, br.total_warnings, - br.build_type, - br.build_result + br.options, + br.asset_bundle_options, + br.output_path, + br.crc FROM object_view o INNER JOIN build_reports br ON o.id = br.id; diff --git a/Analyzer/SQLite/Handlers/BuildReportHandler.cs b/Analyzer/SQLite/Handlers/BuildReportHandler.cs index 570d589..2a72b02 100644 --- a/Analyzer/SQLite/Handlers/BuildReportHandler.cs +++ b/Analyzer/SQLite/Handlers/BuildReportHandler.cs @@ -17,29 +17,29 @@ public void Init(SqliteConnection db) m_InsertCommand = db.CreateCommand(); m_InsertCommand.CommandText = @"INSERT INTO build_reports( - id, build_guid, platform_name, subtarget, options, asset_bundle_options, - output_path, crc, total_size, total_time_ticks, total_errors, total_warnings, - build_type, build_result + id, build_type, build_result, platform_name, subtarget, total_time_ticks, + total_size, build_guid, total_errors, total_warnings, options, asset_bundle_options, + output_path, crc ) VALUES( - @id, @build_guid, @platform_name, @subtarget, @options, @asset_bundle_options, - @output_path, @crc, @total_size, @total_time_ticks, @total_errors, @total_warnings, - @build_type, @build_result + @id, @build_type, @build_result, @platform_name, @subtarget, @total_time_ticks, + @total_size, @build_guid, @total_errors, @total_warnings, @options, @asset_bundle_options, + @output_path, @crc )"; m_InsertCommand.Parameters.Add("@id", SqliteType.Integer); - m_InsertCommand.Parameters.Add("@build_guid", SqliteType.Text); + m_InsertCommand.Parameters.Add("@build_type", SqliteType.Text); + m_InsertCommand.Parameters.Add("@build_result", SqliteType.Text); m_InsertCommand.Parameters.Add("@platform_name", SqliteType.Text); m_InsertCommand.Parameters.Add("@subtarget", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@total_time_ticks", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@total_size", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@build_guid", SqliteType.Text); + m_InsertCommand.Parameters.Add("@total_errors", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@total_warnings", SqliteType.Integer); m_InsertCommand.Parameters.Add("@options", SqliteType.Integer); m_InsertCommand.Parameters.Add("@asset_bundle_options", SqliteType.Integer); m_InsertCommand.Parameters.Add("@output_path", SqliteType.Text); m_InsertCommand.Parameters.Add("@crc", SqliteType.Integer); - m_InsertCommand.Parameters.Add("@total_size", SqliteType.Integer); - m_InsertCommand.Parameters.Add("@total_time_ticks", SqliteType.Integer); - m_InsertCommand.Parameters.Add("@total_errors", SqliteType.Integer); - m_InsertCommand.Parameters.Add("@total_warnings", SqliteType.Integer); - m_InsertCommand.Parameters.Add("@build_type", SqliteType.Text); - m_InsertCommand.Parameters.Add("@build_result", SqliteType.Text); } public void Process(Context ctx, long objectId, RandomAccessReader reader, out string name, out long streamDataSize) @@ -47,19 +47,19 @@ public void Process(Context ctx, long objectId, RandomAccessReader reader, out s var buildReport = BuildReport.Read(reader); m_InsertCommand.Transaction = ctx.Transaction; m_InsertCommand.Parameters["@id"].Value = objectId; - m_InsertCommand.Parameters["@build_guid"].Value = buildReport.BuildGuid; + m_InsertCommand.Parameters["@build_type"].Value = BuildReport.GetBuildTypeString(buildReport.BuildType); + m_InsertCommand.Parameters["@build_result"].Value = buildReport.BuildResult; m_InsertCommand.Parameters["@platform_name"].Value = buildReport.PlatformName; m_InsertCommand.Parameters["@subtarget"].Value = buildReport.Subtarget; + m_InsertCommand.Parameters["@total_time_ticks"].Value = (long)buildReport.TotalTimeTicks; + m_InsertCommand.Parameters["@total_size"].Value = (long)buildReport.TotalSize; + m_InsertCommand.Parameters["@build_guid"].Value = buildReport.BuildGuid; + m_InsertCommand.Parameters["@total_errors"].Value = buildReport.TotalErrors; + m_InsertCommand.Parameters["@total_warnings"].Value = buildReport.TotalWarnings; m_InsertCommand.Parameters["@options"].Value = buildReport.Options; m_InsertCommand.Parameters["@asset_bundle_options"].Value = buildReport.AssetBundleOptions; m_InsertCommand.Parameters["@output_path"].Value = buildReport.OutputPath; m_InsertCommand.Parameters["@crc"].Value = buildReport.Crc; - m_InsertCommand.Parameters["@total_size"].Value = (long)buildReport.TotalSize; - m_InsertCommand.Parameters["@total_time_ticks"].Value = (long)buildReport.TotalTimeTicks; - m_InsertCommand.Parameters["@total_errors"].Value = buildReport.TotalErrors; - m_InsertCommand.Parameters["@total_warnings"].Value = buildReport.TotalWarnings; - m_InsertCommand.Parameters["@build_type"].Value = BuildReport.GetBuildTypeString(buildReport.BuildType); - m_InsertCommand.Parameters["@build_result"].Value = buildReport.BuildResult; m_InsertCommand.ExecuteNonQuery(); From 5d68f016a34c26efb00a78b624891f4ddb11c892 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Sun, 28 Dec 2025 22:01:54 -0500 Subject: [PATCH 06/17] BuildReports - Add start_time column --- Analyzer/Resources/BuildReport.sql | 6 ++++-- Analyzer/SQLite/Handlers/BuildReportHandler.cs | 10 ++++++---- Analyzer/SerializedObjects/BuildReport.cs | 15 +++++++++++++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql index a037a2f..4faafa0 100644 --- a/Analyzer/Resources/BuildReport.sql +++ b/Analyzer/Resources/BuildReport.sql @@ -4,7 +4,8 @@ CREATE TABLE IF NOT EXISTS build_reports( build_result TEXT, platform_name TEXT, subtarget INTEGER, - total_time_ticks INTEGER, + start_time TEXT, + total_time_seconds INTEGER, total_size INTEGER, build_guid TEXT, total_errors INTEGER, @@ -23,7 +24,8 @@ SELECT br.build_result, br.platform_name, br.subtarget, - br.total_time_ticks, + br.start_time, + br.total_time_seconds, br.total_size, br.build_guid, br.total_errors, diff --git a/Analyzer/SQLite/Handlers/BuildReportHandler.cs b/Analyzer/SQLite/Handlers/BuildReportHandler.cs index 2a72b02..b362515 100644 --- a/Analyzer/SQLite/Handlers/BuildReportHandler.cs +++ b/Analyzer/SQLite/Handlers/BuildReportHandler.cs @@ -17,11 +17,11 @@ public void Init(SqliteConnection db) m_InsertCommand = db.CreateCommand(); m_InsertCommand.CommandText = @"INSERT INTO build_reports( - id, build_type, build_result, platform_name, subtarget, total_time_ticks, + id, build_type, build_result, platform_name, subtarget, start_time, total_time_seconds, total_size, build_guid, total_errors, total_warnings, options, asset_bundle_options, output_path, crc ) VALUES( - @id, @build_type, @build_result, @platform_name, @subtarget, @total_time_ticks, + @id, @build_type, @build_result, @platform_name, @subtarget, @start_time, @total_time_seconds, @total_size, @build_guid, @total_errors, @total_warnings, @options, @asset_bundle_options, @output_path, @crc )"; @@ -31,7 +31,8 @@ public void Init(SqliteConnection db) m_InsertCommand.Parameters.Add("@build_result", SqliteType.Text); m_InsertCommand.Parameters.Add("@platform_name", SqliteType.Text); m_InsertCommand.Parameters.Add("@subtarget", SqliteType.Integer); - m_InsertCommand.Parameters.Add("@total_time_ticks", SqliteType.Integer); + m_InsertCommand.Parameters.Add("@start_time", SqliteType.Text); + m_InsertCommand.Parameters.Add("@total_time_seconds", SqliteType.Integer); m_InsertCommand.Parameters.Add("@total_size", SqliteType.Integer); m_InsertCommand.Parameters.Add("@build_guid", SqliteType.Text); m_InsertCommand.Parameters.Add("@total_errors", SqliteType.Integer); @@ -51,7 +52,8 @@ public void Process(Context ctx, long objectId, RandomAccessReader reader, out s m_InsertCommand.Parameters["@build_result"].Value = buildReport.BuildResult; m_InsertCommand.Parameters["@platform_name"].Value = buildReport.PlatformName; m_InsertCommand.Parameters["@subtarget"].Value = buildReport.Subtarget; - m_InsertCommand.Parameters["@total_time_ticks"].Value = (long)buildReport.TotalTimeTicks; + m_InsertCommand.Parameters["@start_time"].Value = buildReport.StartTime; + m_InsertCommand.Parameters["@total_time_seconds"].Value = buildReport.TotalTimeSeconds; m_InsertCommand.Parameters["@total_size"].Value = (long)buildReport.TotalSize; m_InsertCommand.Parameters["@build_guid"].Value = buildReport.BuildGuid; m_InsertCommand.Parameters["@total_errors"].Value = buildReport.TotalErrors; diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index d329ec5..3b13833 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -1,3 +1,4 @@ +using System; using UnityDataTools.FileSystem.TypeTreeReaders; namespace UnityDataTools.Analyzer.SerializedObjects; @@ -8,12 +9,13 @@ public class BuildReport public string BuildGuid { get; init; } public string PlatformName { get; init; } public int Subtarget { get; init; } + public string StartTime { get; init; } public int Options { get; init; } public int AssetBundleOptions { get; init; } public string OutputPath { get; init; } public uint Crc { get; init; } public ulong TotalSize { get; init; } - public ulong TotalTimeTicks { get; init; } + public int TotalTimeSeconds { get; init; } public int TotalErrors { get; init; } public int TotalWarnings { get; init; } public int BuildType { get; init; } @@ -34,18 +36,27 @@ public static BuildReport Read(RandomAccessReader reader) var guid3 = guidData["data[3]"].GetValue(); var guidString = FormatUnityGuid(guid0, guid1, guid2, guid3); + // Convert build start time from ticks to ISO 8601 UTC format + var startTimeTicks = summary["buildStartTime"]["ticks"].GetValue(); + var startTime = new DateTime(startTimeTicks, DateTimeKind.Utc).ToString("o"); + + // Convert ticks to seconds (TimeSpan.TicksPerSecond = 10,000,000) + var totalTimeTicks = summary["totalTimeTicks"].GetValue(); + var totalTimeSeconds = (int)Math.Round(totalTimeTicks / 10000000.0); + return new BuildReport() { Name = reader["m_Name"].GetValue(), BuildGuid = guidString, PlatformName = summary["platformName"].GetValue(), Subtarget = summary["subtarget"].GetValue(), + StartTime = startTime, Options = summary["options"].GetValue(), AssetBundleOptions = summary["assetBundleOptions"].GetValue(), OutputPath = summary["outputPath"].GetValue(), Crc = summary["crc"].GetValue(), TotalSize = summary["totalSize"].GetValue(), - TotalTimeTicks = summary["totalTimeTicks"].GetValue(), + TotalTimeSeconds = totalTimeSeconds, TotalErrors = summary["totalErrors"].GetValue(), TotalWarnings = summary["totalWarnings"].GetValue(), BuildType = summary["buildType"].GetValue(), From b3b45c8770f81abf389e2955190fbd4fda3a09b1 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 06:04:35 -0500 Subject: [PATCH 07/17] BuildReport - Add end time, remove build_report_view Record end time in the same ISO 6801 format as the start time The view wasn't adding value, can add views when they are clearly useful. --- Analyzer/Resources/AddrBuilds.sql | 1 + Analyzer/Resources/BuildReport.sql | 20 +------------------ .../SQLite/Handlers/BuildReportHandler.cs | 6 ++++-- Analyzer/SerializedObjects/BuildReport.cs | 4 ++++ UnityDataTool.Tests/BuildReportTests.cs | 12 +++++------ 5 files changed, 15 insertions(+), 28 deletions(-) diff --git a/Analyzer/Resources/AddrBuilds.sql b/Analyzer/Resources/AddrBuilds.sql index 7e047f2..97e535c 100644 --- a/Analyzer/Resources/AddrBuilds.sql +++ b/Analyzer/Resources/AddrBuilds.sql @@ -4,6 +4,7 @@ CREATE TABLE IF NOT EXISTS addressables_builds name TEXT, build_target INTEGER, start_time TEXT, + end_time TEXT, duration REAL, error TEXT, package_version TEXT, diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql index 4faafa0..08e4791 100644 --- a/Analyzer/Resources/BuildReport.sql +++ b/Analyzer/Resources/BuildReport.sql @@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS build_reports( platform_name TEXT, subtarget INTEGER, start_time TEXT, + end_time TEXT, total_time_seconds INTEGER, total_size INTEGER, build_guid TEXT, @@ -17,22 +18,3 @@ CREATE TABLE IF NOT EXISTS build_reports( PRIMARY KEY (id) ); -CREATE VIEW build_report_view AS -SELECT - o.*, - br.build_type, - br.build_result, - br.platform_name, - br.subtarget, - br.start_time, - br.total_time_seconds, - br.total_size, - br.build_guid, - br.total_errors, - br.total_warnings, - br.options, - br.asset_bundle_options, - br.output_path, - br.crc -FROM object_view o -INNER JOIN build_reports br ON o.id = br.id; diff --git a/Analyzer/SQLite/Handlers/BuildReportHandler.cs b/Analyzer/SQLite/Handlers/BuildReportHandler.cs index b362515..830abf6 100644 --- a/Analyzer/SQLite/Handlers/BuildReportHandler.cs +++ b/Analyzer/SQLite/Handlers/BuildReportHandler.cs @@ -17,11 +17,11 @@ public void Init(SqliteConnection db) m_InsertCommand = db.CreateCommand(); m_InsertCommand.CommandText = @"INSERT INTO build_reports( - id, build_type, build_result, platform_name, subtarget, start_time, total_time_seconds, + id, build_type, build_result, platform_name, subtarget, start_time, end_time, total_time_seconds, total_size, build_guid, total_errors, total_warnings, options, asset_bundle_options, output_path, crc ) VALUES( - @id, @build_type, @build_result, @platform_name, @subtarget, @start_time, @total_time_seconds, + @id, @build_type, @build_result, @platform_name, @subtarget, @start_time, @end_time, @total_time_seconds, @total_size, @build_guid, @total_errors, @total_warnings, @options, @asset_bundle_options, @output_path, @crc )"; @@ -32,6 +32,7 @@ public void Init(SqliteConnection db) m_InsertCommand.Parameters.Add("@platform_name", SqliteType.Text); m_InsertCommand.Parameters.Add("@subtarget", SqliteType.Integer); m_InsertCommand.Parameters.Add("@start_time", SqliteType.Text); + m_InsertCommand.Parameters.Add("@end_time", SqliteType.Text); m_InsertCommand.Parameters.Add("@total_time_seconds", SqliteType.Integer); m_InsertCommand.Parameters.Add("@total_size", SqliteType.Integer); m_InsertCommand.Parameters.Add("@build_guid", SqliteType.Text); @@ -53,6 +54,7 @@ public void Process(Context ctx, long objectId, RandomAccessReader reader, out s m_InsertCommand.Parameters["@platform_name"].Value = buildReport.PlatformName; m_InsertCommand.Parameters["@subtarget"].Value = buildReport.Subtarget; m_InsertCommand.Parameters["@start_time"].Value = buildReport.StartTime; + m_InsertCommand.Parameters["@end_time"].Value = buildReport.EndTime; m_InsertCommand.Parameters["@total_time_seconds"].Value = buildReport.TotalTimeSeconds; m_InsertCommand.Parameters["@total_size"].Value = (long)buildReport.TotalSize; m_InsertCommand.Parameters["@build_guid"].Value = buildReport.BuildGuid; diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index 3b13833..447a591 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -10,6 +10,7 @@ public class BuildReport public string PlatformName { get; init; } public int Subtarget { get; init; } public string StartTime { get; init; } + public string EndTime { get; init; } public int Options { get; init; } public int AssetBundleOptions { get; init; } public string OutputPath { get; init; } @@ -44,6 +45,8 @@ public static BuildReport Read(RandomAccessReader reader) var totalTimeTicks = summary["totalTimeTicks"].GetValue(); var totalTimeSeconds = (int)Math.Round(totalTimeTicks / 10000000.0); + var endTime = new DateTime(startTimeTicks + (long)totalTimeTicks, DateTimeKind.Utc).ToString("o"); + return new BuildReport() { Name = reader["m_Name"].GetValue(), @@ -51,6 +54,7 @@ public static BuildReport Read(RandomAccessReader reader) PlatformName = summary["platformName"].GetValue(), Subtarget = summary["subtarget"].GetValue(), StartTime = startTime, + EndTime = endTime, Options = summary["options"].GetValue(), AssetBundleOptions = summary["assetBundleOptions"].GetValue(), OutputPath = summary["outputPath"].GetValue(), diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 319bbe2..0132d7c 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -214,7 +214,7 @@ public async Task Analyze_BuildReport_ContainsExpectedReferences( } [Test] - public async Task Analyze_BuildReport_ContainsBuildReportData() + public async Task Analyze_BuildReport_AssetBundle_ContainsBuildReportData() { var path = Path.Combine(m_TestDataFolder, "BuildReport1"); var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); @@ -224,9 +224,6 @@ public async Task Analyze_BuildReport_ContainsBuildReportData() Assert.AreEqual(0, await Program.Main(args.ToArray())); using var db = SQLTestHelper.OpenDatabase(databasePath); - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_report_view", 1, - "Expected exactly one row in build_report_view"); - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, "Expected exactly one row in build_reports table"); SQLTestHelper.AssertQueryString(db, "SELECT platform_name FROM build_reports", "Win64", @@ -260,9 +257,6 @@ public async Task Analyze_BuildReport_Player_ContainsBuildReportData() Assert.AreEqual(0, await Program.Main(args.ToArray())); using var db = SQLTestHelper.OpenDatabase(databasePath); - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_report_view", 1, - "Expected exactly one row in build_report_view"); - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 1, "Expected exactly one row in build_reports table"); SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_reports", "Player", @@ -275,6 +269,10 @@ public async Task Analyze_BuildReport_Player_ContainsBuildReportData() "Unexpected options"); SQLTestHelper.AssertQueryString(db, "SELECT build_result FROM build_reports", "Succeeded", "Unexpected build_result"); + SQLTestHelper.AssertQueryString(db, "SELECT start_time FROM build_reports", "2025-12-29T01:23:36.7748043Z", + "Unexpected start time"); + SQLTestHelper.AssertQueryString(db, "SELECT end_time FROM build_reports", "2025-12-29T01:23:41.0547073Z", + "Unexpected end time"); var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_reports"); Assert.That(totalSize, Is.GreaterThan(0), "total_size should be greater than 0"); From 6957a028c9f651910a3d839bebf6a776ea8a045e Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 06:34:45 -0500 Subject: [PATCH 08/17] Move the test build reports into a single folder --- .../AssetBundle.buildreport} | Bin .../Player.buildreport} | Bin TestCommon/Data/BuildReports/README.md | 9 ++++++++ UnityDataTool.Tests/BuildReportTests.cs | 20 ++++++------------ 4 files changed, 16 insertions(+), 13 deletions(-) rename TestCommon/Data/{BuildReport1/LastBuild.buildreport => BuildReports/AssetBundle.buildreport} (100%) rename TestCommon/Data/{BuildReport-Player/LastBuild.buildreport => BuildReports/Player.buildreport} (100%) create mode 100644 TestCommon/Data/BuildReports/README.md diff --git a/TestCommon/Data/BuildReport1/LastBuild.buildreport b/TestCommon/Data/BuildReports/AssetBundle.buildreport similarity index 100% rename from TestCommon/Data/BuildReport1/LastBuild.buildreport rename to TestCommon/Data/BuildReports/AssetBundle.buildreport diff --git a/TestCommon/Data/BuildReport-Player/LastBuild.buildreport b/TestCommon/Data/BuildReports/Player.buildreport similarity index 100% rename from TestCommon/Data/BuildReport-Player/LastBuild.buildreport rename to TestCommon/Data/BuildReports/Player.buildreport diff --git a/TestCommon/Data/BuildReports/README.md b/TestCommon/Data/BuildReports/README.md new file mode 100644 index 0000000..30714b8 --- /dev/null +++ b/TestCommon/Data/BuildReports/README.md @@ -0,0 +1,9 @@ +# Reference BuildReports + +These example files are used for testing UnityDataTool support for BuildReports. They are in the Unity binary format, copied from `Library/LastBuild.buildReport` after performing a build in Unity. + +They were output from the TestProject in the [BuildReportInspector](https://github.com/Unity-Technologies/BuildReportInspector/tree/master/TestProject). + +* **AssetBundle.buildreport** - Example report from an AssetBundle build (BuildPipeline.BuildAssetBundles). +* **Player.buildreport** - BuildReport for a Windows Player build with detailed build reporting (generated with Unity 6000.0.65f1) + diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 0132d7c..49942e8 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -18,7 +18,7 @@ public class BuildReportTests public void OneTimeSetup() { m_TestOutputFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, "test_folder"); - m_TestDataFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, "Data"); + m_TestDataFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, "Data", "BuildReports"); Directory.CreateDirectory(m_TestOutputFolder); Directory.SetCurrentDirectory(m_TestOutputFolder); } @@ -44,12 +44,9 @@ public void Teardown() public async Task Analyze_BuildReport_ContainsExpected_ObjectInfo( [Values(false, true)] bool skipReferences) { - // This folder contains a reference build report generated by a build of the TestProject - // in the BuildReportInspector package. - var path = Path.Combine(m_TestDataFolder, "BuildReport1"); var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); - var args = new List { "analyze", path, "-p", "*.buildreport" }; + var args = new List { "analyze", m_TestDataFolder, "-p", "AssetBundle.buildreport" }; if (skipReferences) args.Add("--skip-references"); @@ -104,7 +101,7 @@ public async Task Analyze_BuildReport_ContainsExpected_ObjectInfo( SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(DISTINCT serialized_file) FROM object_view", 1, "All objects should be from the same serialized file"); - SQLTestHelper.AssertQueryString(db, "SELECT DISTINCT serialized_file FROM object_view", "LastBuild.buildreport", + SQLTestHelper.AssertQueryString(db, "SELECT DISTINCT serialized_file FROM object_view", "AssetBundle.buildreport", "Unexpected serialized file name in object_view"); // Verify the BuildReport object has expected properties @@ -139,7 +136,7 @@ public async Task Analyze_BuildReport_ContainsExpected_ObjectInfo( SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM serialized_files", 1, "Expected exactly one serialized file"); - SQLTestHelper.AssertQueryString(db, "SELECT name FROM serialized_files WHERE id = 0", "LastBuild.buildreport", + SQLTestHelper.AssertQueryString(db, "SELECT name FROM serialized_files WHERE id = 0", "AssetBundle.buildreport", "Unexpected serialized file name"); // Verify asset_bundle column is empty/NULL for BuildReport files (they are not asset bundles) @@ -160,10 +157,9 @@ public async Task Analyze_BuildReport_ContainsExpected_ObjectInfo( public async Task Analyze_BuildReport_ContainsExpectedReferences( [Values(false, true)] bool skipReferences) { - var path = Path.Combine(m_TestDataFolder, "BuildReport1"); var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); - var args = new List { "analyze", path, "-p", "*.buildreport" }; + var args = new List { "analyze", m_TestDataFolder, "-p", "AssetBundle.buildreport" }; if (skipReferences) args.Add("--skip-references"); @@ -216,10 +212,9 @@ public async Task Analyze_BuildReport_ContainsExpectedReferences( [Test] public async Task Analyze_BuildReport_AssetBundle_ContainsBuildReportData() { - var path = Path.Combine(m_TestDataFolder, "BuildReport1"); var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); - var args = new List { "analyze", path, "-p", "*.buildreport" }; + var args = new List { "analyze", m_TestDataFolder, "-p", "AssetBundle.buildreport" }; Assert.AreEqual(0, await Program.Main(args.ToArray())); using var db = SQLTestHelper.OpenDatabase(databasePath); @@ -249,10 +244,9 @@ public async Task Analyze_BuildReport_AssetBundle_ContainsBuildReportData() [Test] public async Task Analyze_BuildReport_Player_ContainsBuildReportData() { - var path = Path.Combine(m_TestDataFolder, "BuildReport-Player"); var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); - var args = new List { "analyze", path, "-p", "*.buildreport" }; + var args = new List { "analyze", m_TestDataFolder, "-p", "Player.buildreport" }; Assert.AreEqual(0, await Program.Main(args.ToArray())); using var db = SQLTestHelper.OpenDatabase(databasePath); From facb3df50a7e84f5dc2cbbc6dc5d4c1e08a52d15 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 06:47:33 -0500 Subject: [PATCH 09/17] Initial PackedAsset support Using Cursor --- Analyzer/Properties/Resources.Designer.cs | 49 +++++++++++ Analyzer/Properties/Resources.resx | 3 + Analyzer/Resources/PackedAssets.sql | 41 +++++++++ .../SQLite/Handlers/PackedAssetsHandler.cs | 84 +++++++++++++++++++ .../Writers/SerializedFileSQLiteWriter.cs | 1 + Analyzer/SerializedObjects/BuildReport.cs | 32 +------ Analyzer/SerializedObjects/PackedAssets.cs | 61 ++++++++++++++ Analyzer/Util/GuidHelper.cs | 45 ++++++++++ UnityDataTool.Tests/BuildReportTests.cs | 66 +++++++++++++++ 9 files changed, 352 insertions(+), 30 deletions(-) create mode 100644 Analyzer/Resources/PackedAssets.sql create mode 100644 Analyzer/SQLite/Handlers/PackedAssetsHandler.cs create mode 100644 Analyzer/SerializedObjects/PackedAssets.cs create mode 100644 Analyzer/Util/GuidHelper.cs diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index 62c44a0..ce9e5aa 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -880,5 +880,54 @@ internal static string MonoScript { return ResourceManager.GetString("MonoScript", resourceCulture); } } + + /// + /// Looks up a localized string similar to CREATE TABLE IF NOT EXISTS packed_assets( + /// id INTEGER, + /// path TEXT, + /// file_header_size INTEGER, + /// PRIMARY KEY (id) + ///); + /// + ///CREATE TABLE IF NOT EXISTS packed_asset_contents( + /// packed_assets_id INTEGER, + /// object_id INTEGER, + /// type INTEGER, + /// size INTEGER, + /// offset INTEGER, + /// source_asset_guid TEXT, + /// build_time_asset_path TEXT, + /// FOREIGN KEY (packed_assets_id) REFERENCES packed_assets(id) + ///); + /// + ///CREATE VIEW packed_assets_view AS + ///SELECT + /// o.*, + /// pa.path, + /// pa.file_header_size + ///FROM object_view o + ///INNER JOIN packed_assets pa ON o.id = pa.id; + /// + ///CREATE VIEW packed_asset_contents_view AS + ///SELECT + /// pac.packed_assets_id, + /// pac.object_id, + /// pac.type, + /// t.name as type_name, + /// pac.size, + /// pac.offset, + /// pac.source_asset_guid, + /// pac.build_time_asset_path, + /// pa.path + ///FROM packed_asset_contents pac + ///LEFT JOIN packed_assets pa ON pac.packed_assets_id = pa.id + ///LEFT JOIN types t ON pac.type = t.id; + ///. + /// + internal static string PackedAssets { + get { + return ResourceManager.GetString("PackedAssets", resourceCulture); + } + } } } diff --git a/Analyzer/Properties/Resources.resx b/Analyzer/Properties/Resources.resx index 97471b0..1722f57 100644 --- a/Analyzer/Properties/Resources.resx +++ b/Analyzer/Properties/Resources.resx @@ -229,4 +229,7 @@ ..\Resources\MonoScript.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + ..\Resources\PackedAssets.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + diff --git a/Analyzer/Resources/PackedAssets.sql b/Analyzer/Resources/PackedAssets.sql new file mode 100644 index 0000000..79fc473 --- /dev/null +++ b/Analyzer/Resources/PackedAssets.sql @@ -0,0 +1,41 @@ +CREATE TABLE IF NOT EXISTS packed_assets( + id INTEGER, + path TEXT, + file_header_size INTEGER, + PRIMARY KEY (id) +); + +CREATE TABLE IF NOT EXISTS packed_asset_contents( + packed_assets_id INTEGER, + object_id INTEGER, + type INTEGER, + size INTEGER, + offset INTEGER, + source_asset_guid TEXT, + build_time_asset_path TEXT, + FOREIGN KEY (packed_assets_id) REFERENCES packed_assets(id) +); + +CREATE VIEW packed_assets_view AS +SELECT + o.*, + pa.path, + pa.file_header_size +FROM object_view o +INNER JOIN packed_assets pa ON o.id = pa.id; + +CREATE VIEW packed_asset_contents_view AS +SELECT + pac.packed_assets_id, + pac.object_id, + pac.type, + t.name as type_name, + pac.size, + pac.offset, + pac.source_asset_guid, + pac.build_time_asset_path, + pa.path +FROM packed_asset_contents pac +LEFT JOIN packed_assets pa ON pac.packed_assets_id = pa.id +LEFT JOIN types t ON pac.type = t.id; + diff --git a/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs b/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs new file mode 100644 index 0000000..da7bc67 --- /dev/null +++ b/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs @@ -0,0 +1,84 @@ +using System; +using Microsoft.Data.Sqlite; +using UnityDataTools.Analyzer.SerializedObjects; +using UnityDataTools.FileSystem.TypeTreeReaders; + +namespace UnityDataTools.Analyzer.SQLite.Handlers; + +public class PackedAssetsHandler : ISQLiteHandler +{ + private SqliteCommand m_InsertPackedAssetsCommand; + private SqliteCommand m_InsertContentsCommand; + + public void Init(SqliteConnection db) + { + using var command = db.CreateCommand(); + command.CommandText = Properties.Resources.PackedAssets ?? throw new InvalidOperationException("PackedAssets resource not found"); + command.ExecuteNonQuery(); + + m_InsertPackedAssetsCommand = db.CreateCommand(); + m_InsertPackedAssetsCommand.CommandText = @"INSERT INTO packed_assets( + id, path, file_header_size + ) VALUES( + @id, @path, @file_header_size + )"; + + m_InsertPackedAssetsCommand.Parameters.Add("@id", SqliteType.Integer); + m_InsertPackedAssetsCommand.Parameters.Add("@path", SqliteType.Text); + m_InsertPackedAssetsCommand.Parameters.Add("@file_header_size", SqliteType.Integer); + + m_InsertContentsCommand = db.CreateCommand(); + m_InsertContentsCommand.CommandText = @"INSERT INTO packed_asset_contents( + packed_assets_id, object_id, type, size, offset, source_asset_guid, build_time_asset_path + ) VALUES( + @packed_assets_id, @object_id, @type, @size, @offset, @source_asset_guid, @build_time_asset_path + )"; + + m_InsertContentsCommand.Parameters.Add("@packed_assets_id", SqliteType.Integer); + m_InsertContentsCommand.Parameters.Add("@object_id", SqliteType.Integer); + m_InsertContentsCommand.Parameters.Add("@type", SqliteType.Integer); + m_InsertContentsCommand.Parameters.Add("@size", SqliteType.Integer); + m_InsertContentsCommand.Parameters.Add("@offset", SqliteType.Integer); + m_InsertContentsCommand.Parameters.Add("@source_asset_guid", SqliteType.Text); + m_InsertContentsCommand.Parameters.Add("@build_time_asset_path", SqliteType.Text); + } + + public void Process(Context ctx, long objectId, RandomAccessReader reader, out string name, out long streamDataSize) + { + var packedAssets = PackedAssets.Read(reader); + + m_InsertPackedAssetsCommand.Transaction = ctx.Transaction; + m_InsertPackedAssetsCommand.Parameters["@id"].Value = objectId; + m_InsertPackedAssetsCommand.Parameters["@path"].Value = packedAssets.Path; + m_InsertPackedAssetsCommand.Parameters["@file_header_size"].Value = (long)packedAssets.FileHeaderSize; + m_InsertPackedAssetsCommand.ExecuteNonQuery(); + + // Insert contents + foreach (var content in packedAssets.Contents) + { + m_InsertContentsCommand.Transaction = ctx.Transaction; + m_InsertContentsCommand.Parameters["@packed_assets_id"].Value = objectId; + m_InsertContentsCommand.Parameters["@object_id"].Value = content.ObjectID; + m_InsertContentsCommand.Parameters["@type"].Value = content.Type; + m_InsertContentsCommand.Parameters["@size"].Value = (long)content.Size; + m_InsertContentsCommand.Parameters["@offset"].Value = (long)content.Offset; + m_InsertContentsCommand.Parameters["@source_asset_guid"].Value = content.SourceAssetGUID; + m_InsertContentsCommand.Parameters["@build_time_asset_path"].Value = content.BuildTimeAssetPath; + m_InsertContentsCommand.ExecuteNonQuery(); + } + + streamDataSize = 0; + name = packedAssets.Path; + } + + public void Finalize(SqliteConnection db) + { + } + + void IDisposable.Dispose() + { + m_InsertPackedAssetsCommand?.Dispose(); + m_InsertContentsCommand?.Dispose(); + } +} + diff --git a/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs b/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs index ac9b0ea..f91bcd4 100644 --- a/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs +++ b/Analyzer/SQLite/Writers/SerializedFileSQLiteWriter.cs @@ -39,6 +39,7 @@ public class SerializedFileSQLiteWriter : IDisposable { "PreloadData", new PreloadDataHandler() }, { "MonoScript", new MonoScriptHandler() }, { "BuildReport", new BuildReportHandler() }, + { "PackedAssets", new PackedAssetsHandler() }, }; // serialized files diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index 447a591..e1cae39 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -1,4 +1,5 @@ using System; +using UnityDataTools.Analyzer.Util; using UnityDataTools.FileSystem.TypeTreeReaders; namespace UnityDataTools.Analyzer.SerializedObjects; @@ -35,7 +36,7 @@ public static BuildReport Read(RandomAccessReader reader) var guid1 = guidData["data[1]"].GetValue(); var guid2 = guidData["data[2]"].GetValue(); var guid3 = guidData["data[3]"].GetValue(); - var guidString = FormatUnityGuid(guid0, guid1, guid2, guid3); + var guidString = GuidHelper.FormatUnityGuid(guid0, guid1, guid2, guid3); // Convert build start time from ticks to ISO 8601 UTC format var startTimeTicks = summary["buildStartTime"]["ticks"].GetValue(); @@ -68,35 +69,6 @@ public static BuildReport Read(RandomAccessReader reader) }; } - // Converts Unity GUID data array to string format matching Unity's GUIDToString function. - // Unity stores GUIDs as 4 uint32 values and converts them to a 32-character hex string - // with a specific byte ordering that differs from standard GUID/UUID formatting. - // Example: data[0]=3856716653 (0xe60765cd) becomes "d63d0e5e" - private static string FormatUnityGuid(uint data0, uint data1, uint data2, uint data3) - { - char[] result = new char[32]; - FormatUInt32Reversed(data0, result, 0); - FormatUInt32Reversed(data1, result, 8); - FormatUInt32Reversed(data2, result, 16); - FormatUInt32Reversed(data3, result, 24); - return new string(result); - } - - // Formats a uint32 as 8 hex digits matching Unity's GUIDToString logic. - // Unity's implementation extracts nibbles from most significant to least significant - // (j=7 down to j=0) and writes them to output positions in the same order (offset+7 to offset+0), - // which reverses the byte order compared to standard hex formatting. - // For example: 0xe60765cd becomes "d63d0e5e" (bytes reversed: cd,65,07,e6 → e6,07,65,cd) - private static void FormatUInt32Reversed(uint value, char[] output, int offset) - { - const string hexChars = "0123456789abcdef"; - for (int j = 7; j >= 0; j--) - { - uint nibble = (value >> (j * 4)) & 0xF; - output[offset + j] = hexChars[(int)nibble]; - } - } - public static string GetBuildTypeString(int buildType) { return buildType switch diff --git a/Analyzer/SerializedObjects/PackedAssets.cs b/Analyzer/SerializedObjects/PackedAssets.cs new file mode 100644 index 0000000..eae3bb9 --- /dev/null +++ b/Analyzer/SerializedObjects/PackedAssets.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using UnityDataTools.Analyzer.Util; +using UnityDataTools.FileSystem.TypeTreeReaders; + +namespace UnityDataTools.Analyzer.SerializedObjects; + +public class PackedAssets +{ + public string Path { get; init; } + public ulong FileHeaderSize { get; init; } + public List Contents { get; init; } + + private PackedAssets() { } + + public static PackedAssets Read(RandomAccessReader reader) + { + var path = reader["m_ShortPath"].GetValue(); + var fileHeaderSize = reader["m_Overhead"].GetValue(); + + var contentsList = new List(reader["m_Contents"].GetArraySize()); + + foreach (var element in reader["m_Contents"]) + { + // Read GUID (4 unsigned ints) + var guidData = element["sourceAssetGUID"]; + var guid0 = guidData["data[0]"].GetValue(); + var guid1 = guidData["data[1]"].GetValue(); + var guid2 = guidData["data[2]"].GetValue(); + var guid3 = guidData["data[3]"].GetValue(); + var guidString = GuidHelper.FormatUnityGuid(guid0, guid1, guid2, guid3); + + contentsList.Add(new PackedAssetInfo + { + ObjectID = element["fileID"].GetValue(), + Type = element["classID"].GetValue(), + Size = element["packedSize"].GetValue(), + Offset = element["offset"].GetValue(), + SourceAssetGUID = guidString, + BuildTimeAssetPath = element["buildTimeAssetPath"].GetValue() + }); + } + + return new PackedAssets() + { + Path = path, + FileHeaderSize = fileHeaderSize, + Contents = contentsList + }; + } +} + +public class PackedAssetInfo +{ + public long ObjectID { get; init; } + public int Type { get; init; } + public ulong Size { get; init; } + public ulong Offset { get; init; } + public string SourceAssetGUID { get; init; } + public string BuildTimeAssetPath { get; init; } +} + diff --git a/Analyzer/Util/GuidHelper.cs b/Analyzer/Util/GuidHelper.cs new file mode 100644 index 0000000..f7a6bd0 --- /dev/null +++ b/Analyzer/Util/GuidHelper.cs @@ -0,0 +1,45 @@ +namespace UnityDataTools.Analyzer.Util; + +/// +/// Helper class for converting Unity GUID data to string format. +/// +public static class GuidHelper +{ + /// + /// Converts Unity GUID data array to string format matching Unity's GUIDToString function. + /// Unity stores GUIDs as 4 uint32 values and converts them to a 32-character hex string + /// with a specific byte ordering that differs from standard GUID/UUID formatting. + /// + /// + /// data[0]=3856716653 (0xe60765cd) becomes "d63d0e5e" + /// + public static string FormatUnityGuid(uint data0, uint data1, uint data2, uint data3) + { + char[] result = new char[32]; + FormatUInt32Reversed(data0, result, 0); + FormatUInt32Reversed(data1, result, 8); + FormatUInt32Reversed(data2, result, 16); + FormatUInt32Reversed(data3, result, 24); + return new string(result); + } + + /// + /// Formats a uint32 as 8 hex digits matching Unity's GUIDToString logic. + /// Unity's implementation extracts nibbles from most significant to least significant + /// (j=7 down to j=0) and writes them to output positions in the same order (offset+7 to offset+0), + /// which reverses the byte order compared to standard hex formatting. + /// + /// + /// For example: 0xe60765cd becomes "d63d0e5e" (bytes reversed: cd,65,07,e6 → e6,07,65,cd) + /// + private static void FormatUInt32Reversed(uint value, char[] output, int offset) + { + const string hexChars = "0123456789abcdef"; + for (int j = 7; j >= 0; j--) + { + uint nibble = (value >> (j * 4)) & 0xF; + output[offset + j] = hexChars[(int)nibble]; + } + } +} + diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 49942e8..2bf4834 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -274,4 +274,70 @@ public async Task Analyze_BuildReport_Player_ContainsBuildReportData() var outputPath = SQLTestHelper.QueryString(db, "SELECT output_path FROM build_reports"); Assert.That(outputPath, Does.Contain("TestProject.exe"), "Output path should contain 'TestProject.exe'"); } + + [Test] + public async Task Analyze_BuildReport_AssetBundle_ContainsPackedAssetsData() + { + var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); + + var args = new List { "analyze", m_TestDataFolder, "-p", "AssetBundle.buildreport" }; + + Assert.AreEqual(0, await Program.Main(args.ToArray())); + using var db = SQLTestHelper.OpenDatabase(databasePath); + + // Verify the packed_assets table has the expected number of rows + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM packed_assets", 7, + "Expected exactly 7 rows in packed_assets table"); + + // Verify the specific PackedAssets object (corresponds to raw object ID -2699881322159949766 in the file) + const string path = "CAB-6b49068aebcf9d3b05692c8efd933167"; + SQLTestHelper.AssertQueryInt(db, $"SELECT COUNT(*) FROM packed_assets WHERE path = '{path}'", 1, + $"Expected exactly one PackedAssets with path = {path}"); + + SQLTestHelper.AssertQueryInt(db, $"SELECT file_header_size FROM packed_assets WHERE path = '{path}'", 10720, + "Unexpected file_header_size for PackedAssets"); + + // Get the database ID for this PackedAssets + var packedAssetId = SQLTestHelper.QueryInt(db, $"SELECT id FROM packed_assets WHERE path = '{path}'"); + + // Verify there are 7 content rows for this PackedAssets + SQLTestHelper.AssertQueryInt(db, $"SELECT COUNT(*) FROM packed_asset_contents WHERE packed_assets_id = {packedAssetId}", 7, + "Expected exactly 7 rows in packed_asset_contents for this PackedAssets"); + + // Verify the specific content row (data[3] from the dump) + const long objectId = -1350043613627603771; + var contentRow = SQLTestHelper.QueryInt(db, + $@"SELECT COUNT(*) FROM packed_asset_contents + WHERE packed_assets_id = {packedAssetId} + AND object_id = {objectId} + AND type = 28 + AND size = 204 + AND offset = 11840 + AND source_asset_guid = '8826f464101b93c4bb006e15a9aff317' + AND build_time_asset_path = 'Assets/Sprites/Snow.jpg'"); + + Assert.AreEqual(1, contentRow, + "Expected exactly one packed_asset_contents row matching the specified criteria"); + + // Verify the view works correctly for this content row + SQLTestHelper.AssertQueryString(db, + $@"SELECT source_asset_guid FROM packed_asset_contents_view + WHERE packed_assets_id = {packedAssetId} + AND object_id = {objectId}", + "8826f464101b93c4bb006e15a9aff317", + "Unexpected source_asset_guid in packed_asset_contents_view"); + + SQLTestHelper.AssertQueryString(db, + $@"SELECT build_time_asset_path FROM packed_asset_contents_view + WHERE packed_assets_id = {packedAssetId} + AND object_id = {objectId}", + "Assets/Sprites/Snow.jpg", + "Unexpected build_time_asset_path in packed_asset_contents_view"); + + // Verify the packed_assets_view works correctly + SQLTestHelper.AssertQueryString(db, + $"SELECT path FROM packed_assets_view WHERE id = {packedAssetId}", + "CAB-6b49068aebcf9d3b05692c8efd933167", + "Unexpected path in packed_assets_view"); + } } From d64bccdb32013a230ccbbb1f5540f4edc6406b42 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 08:23:45 -0500 Subject: [PATCH 10/17] Rename tables and views Add build_report prefix so that these tables are clearly associated with the build report (the "PackedAsset" name is not intuitive) --- Analyzer/Properties/Resources.Designer.cs | 12 ++--- Analyzer/Resources/PackedAssets.sql | 28 ++++++------ .../SQLite/Handlers/PackedAssetsHandler.cs | 4 +- Analyzer/SerializedObjects/PackedAssets.cs | 2 +- .../Data/BuildReports/Player.buildreport | Bin 37989 -> 66784 bytes UnityDataTool.Tests/BuildReportTests.cs | 43 ++++++++++-------- 6 files changed, 47 insertions(+), 42 deletions(-) diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index ce9e5aa..b14ee60 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -882,14 +882,14 @@ internal static string MonoScript { } /// - /// Looks up a localized string similar to CREATE TABLE IF NOT EXISTS packed_assets( + /// Looks up a localized string similar to CREATE TABLE IF NOT EXISTS build_report_packed_assets( /// id INTEGER, /// path TEXT, /// file_header_size INTEGER, /// PRIMARY KEY (id) ///); /// - ///CREATE TABLE IF NOT EXISTS packed_asset_contents( + ///CREATE TABLE IF NOT EXISTS build_report_packed_asset_info( /// packed_assets_id INTEGER, /// object_id INTEGER, /// type INTEGER, @@ -897,7 +897,7 @@ internal static string MonoScript { /// offset INTEGER, /// source_asset_guid TEXT, /// build_time_asset_path TEXT, - /// FOREIGN KEY (packed_assets_id) REFERENCES packed_assets(id) + /// FOREIGN KEY (packed_assets_id) REFERENCES build_report_packed_assets(id) ///); /// ///CREATE VIEW packed_assets_view AS @@ -906,7 +906,7 @@ internal static string MonoScript { /// pa.path, /// pa.file_header_size ///FROM object_view o - ///INNER JOIN packed_assets pa ON o.id = pa.id; + ///INNER JOIN build_report_packed_assets pa ON o.id = pa.id; /// ///CREATE VIEW packed_asset_contents_view AS ///SELECT @@ -919,8 +919,8 @@ internal static string MonoScript { /// pac.source_asset_guid, /// pac.build_time_asset_path, /// pa.path - ///FROM packed_asset_contents pac - ///LEFT JOIN packed_assets pa ON pac.packed_assets_id = pa.id + ///FROM build_report_packed_asset_info pac + ///LEFT JOIN build_report_packed_assets pa ON pac.packed_assets_id = pa.id ///LEFT JOIN types t ON pac.type = t.id; ///. /// diff --git a/Analyzer/Resources/PackedAssets.sql b/Analyzer/Resources/PackedAssets.sql index 79fc473..b68d17f 100644 --- a/Analyzer/Resources/PackedAssets.sql +++ b/Analyzer/Resources/PackedAssets.sql @@ -1,11 +1,11 @@ -CREATE TABLE IF NOT EXISTS packed_assets( +CREATE TABLE IF NOT EXISTS build_report_packed_assets( id INTEGER, path TEXT, file_header_size INTEGER, PRIMARY KEY (id) ); -CREATE TABLE IF NOT EXISTS packed_asset_contents( +CREATE TABLE IF NOT EXISTS build_report_packed_asset_info( packed_assets_id INTEGER, object_id INTEGER, type INTEGER, @@ -13,29 +13,31 @@ CREATE TABLE IF NOT EXISTS packed_asset_contents( offset INTEGER, source_asset_guid TEXT, build_time_asset_path TEXT, - FOREIGN KEY (packed_assets_id) REFERENCES packed_assets(id) + FOREIGN KEY (packed_assets_id) REFERENCES build_report_packed_assets(id) ); -CREATE VIEW packed_assets_view AS +CREATE VIEW build_report_packed_assets_view AS SELECT - o.*, + o.id, + o.object_id, + o.serialized_file, pa.path, pa.file_header_size FROM object_view o -INNER JOIN packed_assets pa ON o.id = pa.id; +INNER JOIN build_report_packed_assets pa ON o.id = pa.id; -CREATE VIEW packed_asset_contents_view AS +CREATE VIEW build_report_packed_asset_contents_view AS SELECT + o.serialized_file, + pa.path, pac.packed_assets_id, pac.object_id, pac.type, - t.name as type_name, pac.size, pac.offset, pac.source_asset_guid, - pac.build_time_asset_path, - pa.path -FROM packed_asset_contents pac -LEFT JOIN packed_assets pa ON pac.packed_assets_id = pa.id -LEFT JOIN types t ON pac.type = t.id; + pac.build_time_asset_path +FROM build_report_packed_asset_info pac +LEFT JOIN build_report_packed_assets pa ON pac.packed_assets_id = pa.id +LEFT JOIN object_view o ON o.id = pa.id; diff --git a/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs b/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs index da7bc67..ee227e8 100644 --- a/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs +++ b/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs @@ -17,7 +17,7 @@ public void Init(SqliteConnection db) command.ExecuteNonQuery(); m_InsertPackedAssetsCommand = db.CreateCommand(); - m_InsertPackedAssetsCommand.CommandText = @"INSERT INTO packed_assets( + m_InsertPackedAssetsCommand.CommandText = @"INSERT INTO build_report_packed_assets( id, path, file_header_size ) VALUES( @id, @path, @file_header_size @@ -28,7 +28,7 @@ public void Init(SqliteConnection db) m_InsertPackedAssetsCommand.Parameters.Add("@file_header_size", SqliteType.Integer); m_InsertContentsCommand = db.CreateCommand(); - m_InsertContentsCommand.CommandText = @"INSERT INTO packed_asset_contents( + m_InsertContentsCommand.CommandText = @"INSERT INTO build_report_packed_asset_info( packed_assets_id, object_id, type, size, offset, source_asset_guid, build_time_asset_path ) VALUES( @packed_assets_id, @object_id, @type, @size, @offset, @source_asset_guid, @build_time_asset_path diff --git a/Analyzer/SerializedObjects/PackedAssets.cs b/Analyzer/SerializedObjects/PackedAssets.cs index eae3bb9..be7741a 100644 --- a/Analyzer/SerializedObjects/PackedAssets.cs +++ b/Analyzer/SerializedObjects/PackedAssets.cs @@ -16,7 +16,7 @@ public static PackedAssets Read(RandomAccessReader reader) { var path = reader["m_ShortPath"].GetValue(); var fileHeaderSize = reader["m_Overhead"].GetValue(); - + var contentsList = new List(reader["m_Contents"].GetArraySize()); foreach (var element in reader["m_Contents"]) diff --git a/TestCommon/Data/BuildReports/Player.buildreport b/TestCommon/Data/BuildReports/Player.buildreport index dbb40d71694f82ee10f060d97bdf046479719c17..e70879e1464204ab503daf281657e8c8a0fc61aa 100644 GIT binary patch literal 66784 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 diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 2bf4834..a93a076 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -255,18 +255,22 @@ public async Task Analyze_BuildReport_Player_ContainsBuildReportData() "Expected exactly one row in build_reports table"); SQLTestHelper.AssertQueryString(db, "SELECT build_type FROM build_reports", "Player", "Unexpected build_type"); - SQLTestHelper.AssertQueryString(db, "SELECT build_guid FROM build_reports", "d63d0e5ee80c4c3e9c343384017bddfa", + + // These checks are based on knowledge what the specific values in this test build report + SQLTestHelper.AssertQueryString(db, "SELECT build_guid FROM build_reports", "c743e3c6c0a541a69eae606c7991234e", "Unexpected build_guid"); SQLTestHelper.AssertQueryInt(db, "SELECT subtarget FROM build_reports", 2, "Unexpected subtarget"); - SQLTestHelper.AssertQueryInt(db, "SELECT options FROM build_reports", 9, + SQLTestHelper.AssertQueryInt(db, "SELECT options FROM build_reports", 137, "Unexpected options"); SQLTestHelper.AssertQueryString(db, "SELECT build_result FROM build_reports", "Succeeded", "Unexpected build_result"); - SQLTestHelper.AssertQueryString(db, "SELECT start_time FROM build_reports", "2025-12-29T01:23:36.7748043Z", + SQLTestHelper.AssertQueryString(db, "SELECT start_time FROM build_reports", "2025-12-29T13:03:00.5010432Z", "Unexpected start time"); - SQLTestHelper.AssertQueryString(db, "SELECT end_time FROM build_reports", "2025-12-29T01:23:41.0547073Z", + SQLTestHelper.AssertQueryString(db, "SELECT end_time FROM build_reports", "2025-12-29T13:03:06.3987171Z", "Unexpected end time"); + SQLTestHelper.AssertQueryInt(db, "SELECT total_time_seconds FROM build_reports", 6, + "Unexpected total_time_seconds"); var totalSize = SQLTestHelper.QueryInt(db, "SELECT total_size FROM build_reports"); Assert.That(totalSize, Is.GreaterThan(0), "total_size should be greater than 0"); @@ -285,29 +289,29 @@ public async Task Analyze_BuildReport_AssetBundle_ContainsPackedAssetsData() Assert.AreEqual(0, await Program.Main(args.ToArray())); using var db = SQLTestHelper.OpenDatabase(databasePath); - // Verify the packed_assets table has the expected number of rows - SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM packed_assets", 7, - "Expected exactly 7 rows in packed_assets table"); + // Verify the build_report_packed_assets table has the expected number of rows + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_report_packed_assets", 7, + "Expected exactly 7 rows in build_report_packed_assets table"); // Verify the specific PackedAssets object (corresponds to raw object ID -2699881322159949766 in the file) const string path = "CAB-6b49068aebcf9d3b05692c8efd933167"; - SQLTestHelper.AssertQueryInt(db, $"SELECT COUNT(*) FROM packed_assets WHERE path = '{path}'", 1, + SQLTestHelper.AssertQueryInt(db, $"SELECT COUNT(*) FROM build_report_packed_assets WHERE path = '{path}'", 1, $"Expected exactly one PackedAssets with path = {path}"); - SQLTestHelper.AssertQueryInt(db, $"SELECT file_header_size FROM packed_assets WHERE path = '{path}'", 10720, + SQLTestHelper.AssertQueryInt(db, $"SELECT file_header_size FROM build_report_packed_assets WHERE path = '{path}'", 10720, "Unexpected file_header_size for PackedAssets"); // Get the database ID for this PackedAssets - var packedAssetId = SQLTestHelper.QueryInt(db, $"SELECT id FROM packed_assets WHERE path = '{path}'"); + var packedAssetId = SQLTestHelper.QueryInt(db, $"SELECT id FROM build_report_packed_assets WHERE path = '{path}'"); // Verify there are 7 content rows for this PackedAssets - SQLTestHelper.AssertQueryInt(db, $"SELECT COUNT(*) FROM packed_asset_contents WHERE packed_assets_id = {packedAssetId}", 7, - "Expected exactly 7 rows in packed_asset_contents for this PackedAssets"); + SQLTestHelper.AssertQueryInt(db, $"SELECT COUNT(*) FROM build_report_packed_asset_info WHERE packed_assets_id = {packedAssetId}", 7, + "Expected exactly 7 rows in build_report_packed_asset_info for this PackedAssets"); // Verify the specific content row (data[3] from the dump) const long objectId = -1350043613627603771; var contentRow = SQLTestHelper.QueryInt(db, - $@"SELECT COUNT(*) FROM packed_asset_contents + $@"SELECT COUNT(*) FROM build_report_packed_asset_info WHERE packed_assets_id = {packedAssetId} AND object_id = {objectId} AND type = 28 @@ -321,23 +325,22 @@ public async Task Analyze_BuildReport_AssetBundle_ContainsPackedAssetsData() // Verify the view works correctly for this content row SQLTestHelper.AssertQueryString(db, - $@"SELECT source_asset_guid FROM packed_asset_contents_view + $@"SELECT source_asset_guid FROM build_report_packed_asset_contents_view WHERE packed_assets_id = {packedAssetId} AND object_id = {objectId}", "8826f464101b93c4bb006e15a9aff317", - "Unexpected source_asset_guid in packed_asset_contents_view"); + "Unexpected source_asset_guid in build_report_packed_asset_contents_view"); SQLTestHelper.AssertQueryString(db, - $@"SELECT build_time_asset_path FROM packed_asset_contents_view + $@"SELECT build_time_asset_path FROM build_report_packed_asset_contents_view WHERE packed_assets_id = {packedAssetId} AND object_id = {objectId}", "Assets/Sprites/Snow.jpg", - "Unexpected build_time_asset_path in packed_asset_contents_view"); + "Unexpected build_time_asset_path in build_report_packed_asset_contents_view"); - // Verify the packed_assets_view works correctly SQLTestHelper.AssertQueryString(db, - $"SELECT path FROM packed_assets_view WHERE id = {packedAssetId}", + $"SELECT path FROM build_report_packed_assets_view WHERE id = {packedAssetId}", "CAB-6b49068aebcf9d3b05692c8efd933167", - "Unexpected path in packed_assets_view"); + "Unexpected path in build_report_packed_assets_view"); } } From 135352f971ec6e923027ac368109f84ab7e1ec58 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 08:41:06 -0500 Subject: [PATCH 11/17] Normalize PackedAsset Source info into its own table This should save a ton of space for large builds especially if they have prefabs with many objets --- Analyzer/Properties/Resources.Designer.cs | 32 ++++++++---- Analyzer/Resources/PackedAssets.sql | 20 +++++--- .../SQLite/Handlers/PackedAssetsHandler.cs | 50 ++++++++++++++++--- UnityDataTool.Tests/BuildReportTests.cs | 2 +- 4 files changed, 80 insertions(+), 24 deletions(-) diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index b14ee60..c379c4c 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -889,39 +889,49 @@ internal static string MonoScript { /// PRIMARY KEY (id) ///); /// + ///CREATE TABLE IF NOT EXISTS build_report_source_assets( + /// id INTEGER PRIMARY KEY AUTOINCREMENT, + /// source_asset_guid TEXT NOT NULL, + /// build_time_asset_path TEXT NOT NULL, + /// UNIQUE(source_asset_guid, build_time_asset_path) + ///); + /// ///CREATE TABLE IF NOT EXISTS build_report_packed_asset_info( /// packed_assets_id INTEGER, /// object_id INTEGER, /// type INTEGER, /// size INTEGER, /// offset INTEGER, - /// source_asset_guid TEXT, - /// build_time_asset_path TEXT, - /// FOREIGN KEY (packed_assets_id) REFERENCES build_report_packed_assets(id) + /// source_asset_id INTEGER NOT NULL, + /// FOREIGN KEY (packed_assets_id) REFERENCES build_report_packed_assets(id), + /// FOREIGN KEY (source_asset_id) REFERENCES build_report_source_assets(id) ///); /// - ///CREATE VIEW packed_assets_view AS + ///CREATE VIEW build_report_packed_assets_view AS ///SELECT - /// o.*, + /// o.id, + /// o.object_id, + /// o.serialized_file, /// pa.path, /// pa.file_header_size ///FROM object_view o ///INNER JOIN build_report_packed_assets pa ON o.id = pa.id; /// - ///CREATE VIEW packed_asset_contents_view AS + ///CREATE VIEW build_report_packed_asset_contents_view AS ///SELECT + /// o.serialized_file, + /// pa.path, /// pac.packed_assets_id, /// pac.object_id, /// pac.type, - /// t.name as type_name, /// pac.size, /// pac.offset, - /// pac.source_asset_guid, - /// pac.build_time_asset_path, - /// pa.path + /// sa.source_asset_guid, + /// sa.build_time_asset_path ///FROM build_report_packed_asset_info pac ///LEFT JOIN build_report_packed_assets pa ON pac.packed_assets_id = pa.id - ///LEFT JOIN types t ON pac.type = t.id; + ///LEFT JOIN object_view o ON o.id = pa.id + ///LEFT JOIN build_report_source_assets sa ON pac.source_asset_id = sa.id; ///. /// internal static string PackedAssets { diff --git a/Analyzer/Resources/PackedAssets.sql b/Analyzer/Resources/PackedAssets.sql index b68d17f..ccda964 100644 --- a/Analyzer/Resources/PackedAssets.sql +++ b/Analyzer/Resources/PackedAssets.sql @@ -5,15 +5,22 @@ CREATE TABLE IF NOT EXISTS build_report_packed_assets( PRIMARY KEY (id) ); +CREATE TABLE IF NOT EXISTS build_report_source_assets( + id INTEGER PRIMARY KEY AUTOINCREMENT, + source_asset_guid TEXT NOT NULL, + build_time_asset_path TEXT NOT NULL, + UNIQUE(source_asset_guid, build_time_asset_path) +); + CREATE TABLE IF NOT EXISTS build_report_packed_asset_info( packed_assets_id INTEGER, object_id INTEGER, type INTEGER, size INTEGER, offset INTEGER, - source_asset_guid TEXT, - build_time_asset_path TEXT, - FOREIGN KEY (packed_assets_id) REFERENCES build_report_packed_assets(id) + source_asset_id INTEGER NOT NULL, + FOREIGN KEY (packed_assets_id) REFERENCES build_report_packed_assets(id), + FOREIGN KEY (source_asset_id) REFERENCES build_report_source_assets(id) ); CREATE VIEW build_report_packed_assets_view AS @@ -35,9 +42,10 @@ SELECT pac.type, pac.size, pac.offset, - pac.source_asset_guid, - pac.build_time_asset_path + sa.source_asset_guid, + sa.build_time_asset_path FROM build_report_packed_asset_info pac LEFT JOIN build_report_packed_assets pa ON pac.packed_assets_id = pa.id -LEFT JOIN object_view o ON o.id = pa.id; +LEFT JOIN object_view o ON o.id = pa.id +LEFT JOIN build_report_source_assets sa ON pac.source_asset_id = sa.id; diff --git a/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs b/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs index ee227e8..c2f62db 100644 --- a/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs +++ b/Analyzer/SQLite/Handlers/PackedAssetsHandler.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.Data.Sqlite; using UnityDataTools.Analyzer.SerializedObjects; using UnityDataTools.FileSystem.TypeTreeReaders; @@ -8,7 +9,10 @@ namespace UnityDataTools.Analyzer.SQLite.Handlers; public class PackedAssetsHandler : ISQLiteHandler { private SqliteCommand m_InsertPackedAssetsCommand; + private SqliteCommand m_InsertSourceAssetCommand; + private SqliteCommand m_GetSourceAssetIdCommand; private SqliteCommand m_InsertContentsCommand; + private Dictionary<(string guid, string path), long> m_SourceAssetCache = new(); public void Init(SqliteConnection db) { @@ -27,11 +31,26 @@ public void Init(SqliteConnection db) m_InsertPackedAssetsCommand.Parameters.Add("@path", SqliteType.Text); m_InsertPackedAssetsCommand.Parameters.Add("@file_header_size", SqliteType.Integer); + m_InsertSourceAssetCommand = db.CreateCommand(); + m_InsertSourceAssetCommand.CommandText = @"INSERT OR IGNORE INTO build_report_source_assets( + source_asset_guid, build_time_asset_path + ) VALUES( + @source_asset_guid, @build_time_asset_path + )"; + m_InsertSourceAssetCommand.Parameters.Add("@source_asset_guid", SqliteType.Text); + m_InsertSourceAssetCommand.Parameters.Add("@build_time_asset_path", SqliteType.Text); + + m_GetSourceAssetIdCommand = db.CreateCommand(); + m_GetSourceAssetIdCommand.CommandText = @"SELECT id FROM build_report_source_assets + WHERE source_asset_guid = @source_asset_guid AND build_time_asset_path = @build_time_asset_path"; + m_GetSourceAssetIdCommand.Parameters.Add("@source_asset_guid", SqliteType.Text); + m_GetSourceAssetIdCommand.Parameters.Add("@build_time_asset_path", SqliteType.Text); + m_InsertContentsCommand = db.CreateCommand(); m_InsertContentsCommand.CommandText = @"INSERT INTO build_report_packed_asset_info( - packed_assets_id, object_id, type, size, offset, source_asset_guid, build_time_asset_path + packed_assets_id, object_id, type, size, offset, source_asset_id ) VALUES( - @packed_assets_id, @object_id, @type, @size, @offset, @source_asset_guid, @build_time_asset_path + @packed_assets_id, @object_id, @type, @size, @offset, @source_asset_id )"; m_InsertContentsCommand.Parameters.Add("@packed_assets_id", SqliteType.Integer); @@ -39,8 +58,7 @@ public void Init(SqliteConnection db) m_InsertContentsCommand.Parameters.Add("@type", SqliteType.Integer); m_InsertContentsCommand.Parameters.Add("@size", SqliteType.Integer); m_InsertContentsCommand.Parameters.Add("@offset", SqliteType.Integer); - m_InsertContentsCommand.Parameters.Add("@source_asset_guid", SqliteType.Text); - m_InsertContentsCommand.Parameters.Add("@build_time_asset_path", SqliteType.Text); + m_InsertContentsCommand.Parameters.Add("@source_asset_id", SqliteType.Integer); } public void Process(Context ctx, long objectId, RandomAccessReader reader, out string name, out long streamDataSize) @@ -56,14 +74,32 @@ public void Process(Context ctx, long objectId, RandomAccessReader reader, out s // Insert contents foreach (var content in packedAssets.Contents) { + // Get or create source asset ID + var cacheKey = (content.SourceAssetGUID, content.BuildTimeAssetPath); + if (!m_SourceAssetCache.TryGetValue(cacheKey, out long sourceAssetId)) + { + // Insert the source asset (will be ignored if it already exists) + m_InsertSourceAssetCommand.Transaction = ctx.Transaction; + m_InsertSourceAssetCommand.Parameters["@source_asset_guid"].Value = content.SourceAssetGUID; + m_InsertSourceAssetCommand.Parameters["@build_time_asset_path"].Value = content.BuildTimeAssetPath; + m_InsertSourceAssetCommand.ExecuteNonQuery(); + + // Get the ID (whether just inserted or already existing) + m_GetSourceAssetIdCommand.Transaction = ctx.Transaction; + m_GetSourceAssetIdCommand.Parameters["@source_asset_guid"].Value = content.SourceAssetGUID; + m_GetSourceAssetIdCommand.Parameters["@build_time_asset_path"].Value = content.BuildTimeAssetPath; + sourceAssetId = (long)m_GetSourceAssetIdCommand.ExecuteScalar(); + + m_SourceAssetCache[cacheKey] = sourceAssetId; + } + m_InsertContentsCommand.Transaction = ctx.Transaction; m_InsertContentsCommand.Parameters["@packed_assets_id"].Value = objectId; m_InsertContentsCommand.Parameters["@object_id"].Value = content.ObjectID; m_InsertContentsCommand.Parameters["@type"].Value = content.Type; m_InsertContentsCommand.Parameters["@size"].Value = (long)content.Size; m_InsertContentsCommand.Parameters["@offset"].Value = (long)content.Offset; - m_InsertContentsCommand.Parameters["@source_asset_guid"].Value = content.SourceAssetGUID; - m_InsertContentsCommand.Parameters["@build_time_asset_path"].Value = content.BuildTimeAssetPath; + m_InsertContentsCommand.Parameters["@source_asset_id"].Value = sourceAssetId; m_InsertContentsCommand.ExecuteNonQuery(); } @@ -78,6 +114,8 @@ public void Finalize(SqliteConnection db) void IDisposable.Dispose() { m_InsertPackedAssetsCommand?.Dispose(); + m_InsertSourceAssetCommand?.Dispose(); + m_GetSourceAssetIdCommand?.Dispose(); m_InsertContentsCommand?.Dispose(); } } diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index a93a076..d4e84f4 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -311,7 +311,7 @@ public async Task Analyze_BuildReport_AssetBundle_ContainsPackedAssetsData() // Verify the specific content row (data[3] from the dump) const long objectId = -1350043613627603771; var contentRow = SQLTestHelper.QueryInt(db, - $@"SELECT COUNT(*) FROM build_report_packed_asset_info + $@"SELECT COUNT(*) FROM build_report_packed_asset_contents_view WHERE packed_assets_id = {packedAssetId} AND object_id = {objectId} AND type = 28 From 125685cf11a3b5276b9dd5110a2da736b934f6ee Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 10:55:47 -0500 Subject: [PATCH 12/17] Add documentation for the build report support --- .../Diagnostics-TextBasedBuildReport.png | Bin 0 -> 15047 bytes Documentation/analyze-examples.md | 3 + Documentation/analyzer.md | 18 + Documentation/buildreport.md | 151 + .../BuildReports/AssetBundle.buildreport.txt | 633 +++ .../Data/BuildReports/Player.buildreport.txt | 4140 +++++++++++++++++ 6 files changed, 4945 insertions(+) create mode 100644 Documentation/Diagnostics-TextBasedBuildReport.png create mode 100644 Documentation/buildreport.md create mode 100644 TestCommon/Data/BuildReports/AssetBundle.buildreport.txt create mode 100644 TestCommon/Data/BuildReports/Player.buildreport.txt diff --git a/Documentation/Diagnostics-TextBasedBuildReport.png b/Documentation/Diagnostics-TextBasedBuildReport.png new file mode 100644 index 0000000000000000000000000000000000000000..a21c76efdeeb90e7d4472ff9e10d92ee00331ff6 GIT binary patch literal 15047 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%0D|h8*KRTg99BM{q;3TBH7`1r8RNC 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 S0`QMdkz^zk#f!yW`~5Gg`jzwm literal 0 HcmV?d00001 diff --git a/Documentation/analyze-examples.md b/Documentation/analyze-examples.md index a0a87e9..23f5551 100644 --- a/Documentation/analyze-examples.md +++ b/Documentation/analyze-examples.md @@ -64,6 +64,9 @@ Universal Render Pipeline/Lit 115.5 KB 1b2fdfe013c58ffd57d7663 Shader Graphs/CustomLightingBuildingsB 113.4 KB 1b2fdfe013c58ffd57d7663eb8db3e60 ``` +## BuildReport support + +See [buildreport.md](buildreport.md) for information about using analyze to look at BuildReport files. ## Example: Using AI tools to help write queries diff --git a/Documentation/analyzer.md b/Documentation/analyzer.md index aa67f4c..2e95ed3 100644 --- a/Documentation/analyzer.md +++ b/Documentation/analyzer.md @@ -63,6 +63,20 @@ This view lists the dependencies of all the assets. You can filter by id or asse the dependencies of an asset. Conversely, filtering by dep_id will return all the assets that depend on this object. This can be useful to figure out why an asset was included in a build. +## monoscripts + +Show the class information for all the C# types of MonoBehaviour objects in the build output (including ScriptableObjects). + +This includes the assembly name, C# namespace and class name. + +## monoscripts_view + +This view is a convenient view for seeing which AssetBundle / SerializedFile contains each MonoScript object. + +## script_object_view + +This view lists all the MonoBehaviour and ScriptableObject objects in the build output, with their location, size and precise C# type (using the `monoscripts` and `refs` tables). This view is not populated if analyze is run with the `--skip-references` option. + ## animation_view (AnimationClipProcessor) This provides additional information about AnimationClips. The columns are the same as those in @@ -162,6 +176,10 @@ This view lists all the shaders aggregated by name. The *instances* column indic the shader was found in the data files. It also provides the total size per shader and the list of AssetBundles in which they were found. +## BuildReport + +See [BuildReport.md](buildreport.md) for details of the tables and views related to analyzing BuildReport files. + # Advanced ## Using the library diff --git a/Documentation/buildreport.md b/Documentation/buildreport.md new file mode 100644 index 0000000..ed48047 --- /dev/null +++ b/Documentation/buildreport.md @@ -0,0 +1,151 @@ +# BuildReport support + +The [BuildReport](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.html) file is created by Player builds. It is also created if you build AssetBundles with [BuildPipeline.BuildAssetBundle](https://docs.unity3d.com/ScriptReference/BuildPipeline.BuildAssetBundles.html). However it is not created for Addressables or builds using the Scriptable Build Pipeline. + +This file is currently written to `Library/LastBuild.buildReport`. By default this is a Unity binary serialized file, the same format used for build output. Because UnityDataTool supports reading this format it can read this file and extract information about the build results, using the same mechanisms used for other Unity object types. + +## UnityDataTool support + +Because it is a SerializedFile you can ["dump"](command-dump.md) it into text format. + +The [`analyze`](command-analyze.md) command now has custom support for BuildReport files. When you analyze a BuildReport file it will extract information into dedicated tables in the output database. + +Specifically there are now custom handlers for the following types: + +* **BuildReport** - The primary object that reports the inputs and results for a Unity build. +* **PackedAssets** - An object that describes the contents of a specific Serialized file, or resource file. It records information such as the type, size and source asset for each object or resource blob. This makes it possible to do analysis of the content down to the object level. + +These are represented in the following tables and views: + +| Name in Database | Type | Description/Notes | +|-----------------------------------------|---------|------------------| +| build_reports | table | BuildReport summary (build type, result, platform, duration etc) | +| build_report_packed_assets | table | Info about a SerializedFile, .resS or .resource file in the build output | +| build_report_packed_asset_info | table | Info about each object inside a Serialized file (or data owned by an object inside a .resS or .resource file | +| build_report_source_assets | table | AssetDatabase GUID and path for each source asset referenced from a PackedAssetInfo. This table normalizes the repeated paths and GUIDs, which makes the SQL representation much more compact than the BuildReport format for some large build results. | +| build_report_packed_assets_view | view | Shows the name of the BuildReport file along with each build_report_packed_assets. This view is useful if the database contains the analysis of more than one build report file. | +| build_report_packed_asset_contents_view | view | View of all the PackedAssetInfo entries, including the BuildReport file and source asset path and GUID | + + +## Notes on column naming + +For consistency and clarify, the SQL representation uses slightly different names than the BuildReport API for some fields. + +| Name in Database | Name in BuildReport API | Notes | +|---------------------------------------|--------------------------|-------| +| build_report_packed_assets.path | PackedAssets.ShortPath | Filename of the Serialized File, .resS or .resource file. This is the only path that is recorded, so "short" was redundant | +| build_report_packed_assets.file_header_size | PackedAssets.Overhead | The "overhead" is the size of the file header (zero for .resS and .resource files) | +| build_report_packed_asset_info.object_id | PackedAssetsInfo.fileID | Local file ID of the object in the build output. Named object_id for consistency with objects.object_id | +| build_report_packed_asset_info.type | PackedAssetsInfo.classID | Type of the Unity Object. Named type for consistency with objects.type | + +## Cross referencing with the build result + +A suggested usage is run analyze on a full build as well as the matching BuildReport. For best results this should be a clean build so that the PackedAsset information is fully populated. You may need to temporarily copy the BuildReport file into the build output location so that it is found by your call to analyze. + +The PackedAsset information adds the extra information about the source asset of each object that is missing when only analyzing the build output. The PackedAsset will list objects in the same order as they are found in the output Serialized file, resS or resource file. For objects in Serialized file it records the `object_id`, e.g. local file id. This would match an entry in the `objects` object table if you have also analyzed the built file. + +Note: currently the source LFID is not recorded in the PackedAssetInfo entry. So, while you can find the source asset (e.g. which prefab), its not possible to directly pinpoint the precise object within that asset. When necessary it should be possible to determine the precise object in a more ad hoc way, based on its name or other distinguishing values. + +## Limitations + +Currently you cannot analyze multiple build reports in a single database if they have the same name. This is a general limitation of UnityDataTool where it assumes all SerializedFiles have unique filenames. + +The `build_report_packed_asset_info.type` will record a valid [Class ID](https://docs.unity3d.com/Manual/ClassIDReference.html) for the type of each object. However there may be no string version of this type in the `types` table. That is because the types table is only populated when processing instances of those object types (e.g. part of the TypeTree analysis). So if you analyze both the build output and the build report together the types should be fully populated, otherwise only the numeric value is available. + +### Information that is not exported + +Only a subset of information is currently extracted from the BuildReport. Initially the focus is on the most useful information, not attempting to fully export the entire BuildReport into SQL. More support can be added as needed. Possible data to add would be: + +* The BuildReport.m_Files array +* the BuildReport.m_BuildSteps array +* BuildAssetBundleInfoSet appendix (reporting which files belong inside each AssetBundle) +* [code stripping](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-strippingInfo.html) appendix (available for IL2CPP player builds) +* [ScenesUsingAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-scenesUsingAssets.html) available in some detailed build reports. + +## Alternatives + +Using UnityDataTool to look at the BuildReport is rather low-level, so it is a good idea to consider other options that may be easier. + +### Inspecting within Unity + +You can view BuildReports using the [BuildReportInspector](https://github.com/Unity-Technologies/BuildReportInspector) package. + +### API access within Unity + +From within the Unity Editor you can retrive information from a BuildReport using the BuildReport API. + +There are three ways to load a BuildReport + +1. Results of the most recently completed build can be accessed using [BuildPipeline.GetLastBuildReport()](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.GetLatestReport.html). + +2. If the build report is saved inside your Assets folder you can load it using the AssetDatabase API. For example: + +```csharp +using UnityEditor; +using UnityEditor.Build.Reporting; +using UnityEngine; + +public class BuildReportInProjectUtility +{ + static public BuildReport LoadBuildReport(string buildReportPath) + { + var report = AssetDatabase.LoadAssetAtPath("Assets/MyBuildReport.buildReport"); + + if (report == null) + Debug.LogWarning($"Failed to load build report from {buildReportPath}"); + + return report; + } +} +``` + +3. If the file is outside your assets folder (for example inside the Library folder) you can load it using code like this: + + +```csharp +using System; +using System.IO; +using UnityEditor.Build.Reporting; +using UnityEditorInternal; +using UnityEngine; + +public class BuildReportUtility +{ + static public BuildReport LoadBuildReport(string buildReportPath) + { + if (!File.Exists(buildReportPath)) + return null; + + try + { + var objs = InternalEditorUtility.LoadSerializedFileAndForget(buildReportPath); + foreach (UnityEngine.Object obj in objs) + { + if (obj is BuildReport) + return obj as BuildReport; + } + } + catch (Exception ex) + { + Debug.LogWarning($"Failed to load build report from {buildReportPath}: {ex.Message}"); + } + return null; + } +} +``` + +### Text parsing + +The BuildReport can be output in Unity's pseudo-YAML format instead of binary, using a diagnostic flag. + +![](Diagnostics-TextBasedBuildReport.png) + +The resulting file will tend to be a lot larger. You can also get a text version by copying or moving the binary file into your Unity project (because, by default, assets are stored in Unity's text format instead of binary). + +The "dump" command of UnityDataTool can be used to get a non-YAML text representation of the BuildReport contents. + +The text formats can potentially be useful for quick extraction of very specific information using text processing tools (YAML, regular expression text searching etc). + +### Addressables Build Layout Support + +When using the Addressables package, the equivalent to a BuildReport is the `buildlayout.json` file. This is an entirely different file format and schema, but it records much of the same information as the BuildReport. The UnityDataTool analyze command supports importing these files, see [Addressables Build Reports](addressables-build-reports.md) for details. diff --git a/TestCommon/Data/BuildReports/AssetBundle.buildreport.txt b/TestCommon/Data/BuildReports/AssetBundle.buildreport.txt new file mode 100644 index 0000000..e67e099 --- /dev/null +++ b/TestCommon/Data/BuildReports/AssetBundle.buildreport.txt @@ -0,0 +1,633 @@ +External References + +ID: -6210328523265720665 (ClassID: 1126) PackedAssets + m_ShortPath (string) CAB-76a378bdc9304bd3c3a82de8dd97981a.resource + m_Overhead (UInt64) 0 + m_Contents (vector) + Array[1] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 83 + packedSize (UInt64) 18496 + offset (UInt64) 0 + sourceAssetGUID (GUID) + data[0] (unsigned int) 510047344 + data[1] (unsigned int) 1200191226 + data[2] (unsigned int) 2021230213 + data[3] (unsigned int) 2122331027 + buildTimeAssetPath (string) Assets/audio/audio.mp3 + +ID: -5068572036128640151 (ClassID: 382020655) PluginBuildInfo + m_RuntimePlugins (vector) + Array[5] + data[0] (string) Newtonsoft.Json + data[1] (string) UnityAdsInitializationListener + data[2] (string) UnityAdsShowListener + data[3] (string) nunit.framework + data[4] (string) UnityAdsLoadListener + m_EditorPlugins (vector) + Array[15] + data[0] (string) Mono.Cecil.Pdb + data[1] (string) log4netPlastic + data[2] (string) JetBrains.Rider.PathLocator + data[3] (string) Mono.Cecil.Rocks + data[4] (string) unityplastic + data[5] (string) Mono.Cecil.Mdb + data[6] (string) Unity.Plastic.Newtonsoft.Json + data[7] (string) Unity.Analytics.Editor + data[8] (string) Unity.Plastic.Antlr3.Runtime + data[9] (string) zlib64Plastic + data[10] (string) liblz4Plastic + data[11] (string) lz4x64Plastic + data[12] (string) Unity.Analytics.Tracker + data[13] (string) AppleEventIntegration + data[14] (string) Mono.Cecil + +ID: -2699881322159949766 (ClassID: 1126) PackedAssets + m_ShortPath (string) CAB-6b49068aebcf9d3b05692c8efd933167 + m_Overhead (UInt64) 10720 + m_Contents (vector) + Array[7] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) -4266742476527514910 + classID (Type*) 213 + packedSize (UInt64) 464 + offset (UInt64) 10704 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1377324347 + data[1] (unsigned int) 1291145104 + data[2] (unsigned int) 2227835800 + data[3] (unsigned int) 660996637 + buildTimeAssetPath (string) Assets/Sprites/Snow 1.jpg + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) -3600607445234681765 + classID (Type*) 28 + packedSize (UInt64) 204 + offset (UInt64) 11168 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2731658232 + data[1] (unsigned int) 1324654785 + data[2] (unsigned int) 2360135852 + data[3] (unsigned int) 2253774587 + buildTimeAssetPath (string) Assets/Sprites/red.png + data[2] (BuildReportPackedAssetInfo) + fileID (SInt64) -2408881041259534328 + classID (Type*) 213 + packedSize (UInt64) 460 + offset (UInt64) 11376 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1179607688 + data[1] (unsigned int) 1278849281 + data[2] (unsigned int) 1374027963 + data[3] (unsigned int) 1900018330 + buildTimeAssetPath (string) Assets/Sprites/Snow.jpg + data[3] (BuildReportPackedAssetInfo) + fileID (SInt64) -1350043613627603771 + classID (Type*) 28 + packedSize (UInt64) 204 + offset (UInt64) 11840 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1179607688 + data[1] (unsigned int) 1278849281 + data[2] (unsigned int) 1374027963 + data[3] (unsigned int) 1900018330 + buildTimeAssetPath (string) Assets/Sprites/Snow.jpg + data[4] (BuildReportPackedAssetInfo) + fileID (SInt64) -39415655269619539 + classID (Type*) 28 + packedSize (UInt64) 208 + offset (UInt64) 12048 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1377324347 + data[1] (unsigned int) 1291145104 + data[2] (unsigned int) 2227835800 + data[3] (unsigned int) 660996637 + buildTimeAssetPath (string) Assets/Sprites/Snow 1.jpg + data[5] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 142 + packedSize (UInt64) 460 + offset (UInt64) 12256 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) AssetBundle Object + data[6] (BuildReportPackedAssetInfo) + fileID (SInt64) 3866367853307903194 + classID (Type*) 213 + packedSize (UInt64) 460 + offset (UInt64) 12720 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2731658232 + data[1] (unsigned int) 1324654785 + data[2] (unsigned int) 2360135852 + data[3] (unsigned int) 2253774587 + buildTimeAssetPath (string) Assets/Sprites/red.png + +ID: -1478881110413844972 (ClassID: 1126) PackedAssets + m_ShortPath (string) BuildPlayer-Scene2.sharedAssets + m_Overhead (UInt64) 83443 + m_Contents (vector) + Array[7] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 150 + packedSize (UInt64) 121 + offset (UInt64) 83408 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 2 + classID (Type*) 142 + packedSize (UInt64) 184 + offset (UInt64) 83536 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) + data[2] (BuildReportPackedAssetInfo) + fileID (SInt64) 3 + classID (Type*) 21 + packedSize (UInt64) 1064 + offset (UInt64) 83728 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[3] (BuildReportPackedAssetInfo) + fileID (SInt64) 4 + classID (Type*) 21 + packedSize (UInt64) 268 + offset (UInt64) 84800 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[4] (BuildReportPackedAssetInfo) + fileID (SInt64) 5 + classID (Type*) 21 + packedSize (UInt64) 304 + offset (UInt64) 85072 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[5] (BuildReportPackedAssetInfo) + fileID (SInt64) 6 + classID (Type*) 48 + packedSize (UInt64) 49400 + offset (UInt64) 85376 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[6] (BuildReportPackedAssetInfo) + fileID (SInt64) 7 + classID (Type*) 48 + packedSize (UInt64) 6964 + offset (UInt64) 134784 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + +ID: -1012789659855765783 (ClassID: 1126) PackedAssets + m_ShortPath (string) CAB-a1e31f31856813b7384f999fbbf5e9b0 + m_Overhead (UInt64) 4040 + m_Contents (vector) + Array[2] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 142 + packedSize (UInt64) 104 + offset (UInt64) 4032 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) AssetBundle Object + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 2 + classID (Type*) 290 + packedSize (UInt64) 184 + offset (UInt64) 4144 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Built-in AssetBundleManifest: AssetBundleManifest + +ID: 1 (ClassID: 1125) BuildReport + m_ObjectHideFlags (unsigned int) 0 + m_CorrespondingSourceObject (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_PrefabInstance (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_PrefabAsset (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_Name (string) Build AssetBundles + m_Summary (BuildSummary) + buildStartTime (DateTime) + ticks (SInt64) 638858729667744767 + buildGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + platformName (string) Win64 + platformGroupName (string) Standalone + subtarget (int) 2 + options (int) 0 + assetBundleOptions (int) 98817 + outputPath (string) C:/UnitySrc/BuildReportInspector/TestProject/Build/AssetBundles + crc (unsigned int) 4147003805 + totalSize (UInt64) 1434814 + totalTimeTicks (UInt64) 8038492 + totalErrors (int) 0 + totalWarnings (int) 0 + buildType (int) 2 + buildResult (int) 1 + multiProcessEnabled (bool) False + m_Files (vector) + Array[17] + data[0] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/audio.bundle/CAB-76a378bdc9304bd3c3a82de8dd97981a + role (string) SharedAssets + id (unsigned int) 0 + totalSize (UInt64) 3616 + data[1] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/audio.bundle/CAB-76a378bdc9304bd3c3a82de8dd97981a.resource + role (string) StreamingResourceFile + id (unsigned int) 1 + totalSize (UInt64) 18496 + data[2] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/audio.bundle + role (string) AssetBundle + id (unsigned int) 2 + totalSize (UInt64) 22256 + data[3] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/sprites.bundle/CAB-6b49068aebcf9d3b05692c8efd933167 + role (string) SharedAssets + id (unsigned int) 3 + totalSize (UInt64) 13180 + data[4] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/sprites.bundle/CAB-6b49068aebcf9d3b05692c8efd933167.resS + role (string) StreamingResourceFile + id (unsigned int) 4 + totalSize (UInt64) 1200464 + data[5] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/sprites.bundle + role (string) AssetBundle + id (unsigned int) 5 + totalSize (UInt64) 1213792 + data[6] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/audio.bundle.manifest + role (string) AssetBundleTextManifest + id (unsigned int) 6 + totalSize (UInt64) 488 + data[7] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/sprites.bundle.manifest + role (string) AssetBundleTextManifest + id (unsigned int) 7 + totalSize (UInt64) 581 + data[8] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/scenes.bundle/BuildPlayer-Scene2 + role (string) Scene + id (unsigned int) 8 + totalSize (UInt64) 29008 + data[9] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/scenes.bundle/BuildPlayer-SampleScene + role (string) Scene + id (unsigned int) 9 + totalSize (UInt64) 19344 + data[10] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/scenes.bundle/BuildPlayer-SampleScene.sharedAssets + role (string) SharedAssets + id (unsigned int) 10 + totalSize (UInt64) 1213 + data[11] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/scenes.bundle/BuildPlayer-Scene2.sharedAssets + role (string) SharedAssets + id (unsigned int) 11 + totalSize (UInt64) 141748 + data[12] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/scenes.bundle + role (string) AssetBundle + id (unsigned int) 12 + totalSize (UInt64) 191504 + data[13] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/scenes.bundle.manifest + role (string) AssetBundleTextManifest + id (unsigned int) 13 + totalSize (UInt64) 1372 + data[14] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/AssetBundles/CAB-a1e31f31856813b7384f999fbbf5e9b0 + role (string) ResourcesFile + id (unsigned int) 14 + totalSize (UInt64) 4328 + data[15] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/AssetBundles + role (string) ManifestAssetBundle + id (unsigned int) 15 + totalSize (UInt64) 4448 + data[16] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector/TestProject/AssetBundles.manifest + role (string) AssetBundleTextManifest + id (unsigned int) 16 + totalSize (UInt64) 373 + m_BuildSteps (vector) + Array[19] + data[0] (BuildStepInfo) + stepName (string) Build Asset Bundles + durationTicks (UInt64) 8038492 + depth (int) 0 + messages (vector) + Array[0] + data[1] (BuildStepInfo) + stepName (string) Calculate asset bundles to be built + durationTicks (UInt64) 13044 + depth (int) 1 + messages (vector) + Array[0] + data[2] (BuildStepInfo) + stepName (string) Prebuild Cleanup and Recompile + durationTicks (UInt64) 2608713 + depth (int) 1 + messages (vector) + Array[0] + data[3] (BuildStepInfo) + stepName (string) Compile scripts + durationTicks (UInt64) 2298122 + depth (int) 2 + messages (vector) + Array[0] + data[4] (BuildStepInfo) + stepName (string) Generate and validate platform script types + durationTicks (UInt64) 268349 + depth (int) 2 + messages (vector) + Array[0] + data[5] (BuildStepInfo) + stepName (string) Build bundle: audio.bundle + durationTicks (UInt64) 48102 + depth (int) 1 + messages (vector) + Array[0] + data[6] (BuildStepInfo) + stepName (string) Build bundle: sprites.bundle + durationTicks (UInt64) 99557 + depth (int) 1 + messages (vector) + Array[0] + data[7] (BuildStepInfo) + stepName (string) Build Scene AssetBundle(s) + durationTicks (UInt64) 2742249 + depth (int) 1 + messages (vector) + Array[0] + data[8] (BuildStepInfo) + stepName (string) Build bundle: scenes.bundle + durationTicks (UInt64) 2416551 + depth (int) 2 + messages (vector) + Array[0] + data[9] (BuildStepInfo) + stepName (string) Verify Build setup + durationTicks (UInt64) 217540 + depth (int) 3 + messages (vector) + Array[0] + data[10] (BuildStepInfo) + stepName (string) Prepare assets for target platform + durationTicks (UInt64) 56191 + depth (int) 3 + messages (vector) + Array[0] + data[11] (BuildStepInfo) + stepName (string) Building scenes + durationTicks (UInt64) 1157898 + depth (int) 3 + messages (vector) + Array[0] + data[12] (BuildStepInfo) + stepName (string) Building scene Assets/Scenes/Scene2.unity + durationTicks (UInt64) 652340 + depth (int) 4 + messages (vector) + Array[0] + data[13] (BuildStepInfo) + stepName (string) Building scene Assets/Scenes/SampleScene.unity + durationTicks (UInt64) 505218 + depth (int) 4 + messages (vector) + Array[0] + data[14] (BuildStepInfo) + stepName (string) Writing asset files + durationTicks (UInt64) 305260 + depth (int) 3 + messages (vector) + Array[0] + data[15] (BuildStepInfo) + stepName (string) Packaging assets - archive:/BuildPlayer-Scene2/BuildPlayer-SampleScene.sharedAssets + durationTicks (UInt64) 52472 + depth (int) 4 + messages (vector) + Array[0] + data[16] (BuildStepInfo) + stepName (string) Packaging assets - archive:/BuildPlayer-Scene2/BuildPlayer-Scene2.sharedAssets + durationTicks (UInt64) 243071 + depth (int) 4 + messages (vector) + Array[0] + data[17] (BuildStepInfo) + stepName (string) Creating compressed player package + durationTicks (UInt64) 22510 + depth (int) 3 + messages (vector) + Array[0] + data[18] (BuildStepInfo) + stepName (string) Postprocess built player + durationTicks (UInt64) 70340 + depth (int) 3 + messages (vector) + Array[0] + m_Appendices (vector) + Array>[11] + data[0] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 6668369999605714922 + data[1] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 4690487375616820380 + data[2] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -6210328523265720665 + data[3] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -2699881322159949766 + data[4] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 6958117599249036206 + data[5] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 2944972063485144436 + data[6] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -1478881110413844972 + data[7] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -5068572036128640151 + data[8] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 6043972027667874493 + data[9] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 6371803369801214078 + data[10] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -1012789659855765783 + +ID: 2944972063485144436 (ClassID: 1126) PackedAssets + m_ShortPath (string) BuildPlayer-SampleScene.sharedAssets + m_Overhead (UInt64) 1120 + m_Contents (vector) + Array[1] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 150 + packedSize (UInt64) 93 + offset (UInt64) 1120 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) + +ID: 4690487375616820380 (ClassID: 1126) PackedAssets + m_ShortPath (string) CAB-76a378bdc9304bd3c3a82de8dd97981a + m_Overhead (UInt64) 3312 + m_Contents (vector) + Array[2] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) -1630896013228033972 + classID (Type*) 83 + packedSize (UInt64) 160 + offset (UInt64) 3312 + sourceAssetGUID (GUID) + data[0] (unsigned int) 510047344 + data[1] (unsigned int) 1200191226 + data[2] (unsigned int) 2021230213 + data[3] (unsigned int) 2122331027 + buildTimeAssetPath (string) Assets/audio/audio.mp3 + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 142 + packedSize (UInt64) 144 + offset (UInt64) 3472 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) AssetBundle Object + +ID: 6043972027667874493 (ClassID: 641289076) AudioBuildInfo + m_IsAudioDisabled (bool) False + m_AudioClipCount (int) 1 + m_AudioMixerCount (int) 0 + +ID: 6371803369801214078 (ClassID: 1521398425) VideoBuildInfo + m_VideoClipCount (int) 0 + m_IsVideoModuleDisabled (bool) False + +ID: 6668369999605714922 (ClassID: 668709126) BuiltAssetBundleInfoSet + bundleInfos (vector) + Array[4] + data[0] (BuiltAssetBundleInfo) + bundleName (string) audio.bundle + bundleArchiveFile (unsigned int) 2 + packagedFileIndices (vector) + Array[2] + 0, 1 + data[1] (BuiltAssetBundleInfo) + bundleName (string) sprites.bundle + bundleArchiveFile (unsigned int) 5 + packagedFileIndices (vector) + Array[2] + 3, 4 + data[2] (BuiltAssetBundleInfo) + bundleName (string) scenes.bundle + bundleArchiveFile (unsigned int) 12 + packagedFileIndices (vector) + Array[4] + 8, 9, 10, 11 + data[3] (BuiltAssetBundleInfo) + bundleName (string) AssetBundles + bundleArchiveFile (unsigned int) 15 + packagedFileIndices (vector) + Array[1] + 14 + +ID: 6958117599249036206 (ClassID: 1126) PackedAssets + m_ShortPath (string) CAB-6b49068aebcf9d3b05692c8efd933167.resS + m_Overhead (UInt64) 13 + m_Contents (vector) + Array[3] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 28 + packedSize (UInt64) 151875 + offset (UInt64) 0 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2731658232 + data[1] (unsigned int) 1324654785 + data[2] (unsigned int) 2360135852 + data[3] (unsigned int) 2253774587 + buildTimeAssetPath (string) Assets/Sprites/red.png + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 28 + packedSize (UInt64) 524288 + offset (UInt64) 151888 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1179607688 + data[1] (unsigned int) 1278849281 + data[2] (unsigned int) 1374027963 + data[3] (unsigned int) 1900018330 + buildTimeAssetPath (string) Assets/Sprites/Snow.jpg + data[2] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 28 + packedSize (UInt64) 524288 + offset (UInt64) 676176 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1377324347 + data[1] (unsigned int) 1291145104 + data[2] (unsigned int) 2227835800 + data[3] (unsigned int) 660996637 + buildTimeAssetPath (string) Assets/Sprites/Snow 1.jpg + diff --git a/TestCommon/Data/BuildReports/Player.buildreport.txt b/TestCommon/Data/BuildReports/Player.buildreport.txt new file mode 100644 index 0000000..e1eaf62 --- /dev/null +++ b/TestCommon/Data/BuildReports/Player.buildreport.txt @@ -0,0 +1,4140 @@ +External References +path(1): "Library/unity default resources" GUID: 0000000000000000e000000000000000 Type: 0 + +ID: -8657125485098368963 (ClassID: 1126) PackedAssets + m_ShortPath (string) sharedassets0.assets + m_Overhead (UInt64) 451 + m_Contents (vector) + Array[5] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 150 + packedSize (UInt64) 49 + offset (UInt64) 432 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 2 + classID (Type*) 28 + packedSize (UInt64) 144 + offset (UInt64) 496 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1179607688 + data[1] (unsigned int) 1278849281 + data[2] (unsigned int) 1374027963 + data[3] (unsigned int) 1900018330 + buildTimeAssetPath (string) Assets/Sprites/Snow.jpg + data[2] (BuildReportPackedAssetInfo) + fileID (SInt64) 3 + classID (Type*) 28 + packedSize (UInt64) 144 + offset (UInt64) 640 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2731658232 + data[1] (unsigned int) 1324654785 + data[2] (unsigned int) 2360135852 + data[3] (unsigned int) 2253774587 + buildTimeAssetPath (string) Assets/Sprites/red.png + data[3] (BuildReportPackedAssetInfo) + fileID (SInt64) 4 + classID (Type*) 213 + packedSize (UInt64) 460 + offset (UInt64) 784 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1179607688 + data[1] (unsigned int) 1278849281 + data[2] (unsigned int) 1374027963 + data[3] (unsigned int) 1900018330 + buildTimeAssetPath (string) Assets/Sprites/Snow.jpg + data[4] (BuildReportPackedAssetInfo) + fileID (SInt64) 5 + classID (Type*) 213 + packedSize (UInt64) 460 + offset (UInt64) 1248 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2731658232 + data[1] (unsigned int) 1324654785 + data[2] (unsigned int) 2360135852 + data[3] (unsigned int) 2253774587 + buildTimeAssetPath (string) Assets/Sprites/red.png + +ID: -8406665477514816739 (ClassID: 1521398425) VideoBuildInfo + m_VideoClipCount (int) 0 + m_IsVideoModuleDisabled (bool) False + +ID: -4621170717555149581 (ClassID: 1126) PackedAssets + m_ShortPath (string) globalgamemanagers.assets + m_Overhead (UInt64) 7195 + m_Contents (vector) + Array[229] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 150 + packedSize (UInt64) 229 + offset (UInt64) 30624 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 2 + classID (Type*) 21 + packedSize (UInt64) 304 + offset (UInt64) 30864 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[2] (BuildReportPackedAssetInfo) + fileID (SInt64) 3 + classID (Type*) 28 + packedSize (UInt64) 168 + offset (UInt64) 31168 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Built-in Texture2D: Splash Screen Unity Logo + data[3] (BuildReportPackedAssetInfo) + fileID (SInt64) 4 + classID (Type*) 28 + packedSize (UInt64) 156 + offset (UInt64) 31344 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[4] (BuildReportPackedAssetInfo) + fileID (SInt64) 5 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 5808 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2352178688 + data[1] (unsigned int) 1240092522 + data[2] (unsigned int) 2142943658 + data[3] (unsigned int) 706626338 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/LayoutRebuilder.cs + data[5] (BuildReportPackedAssetInfo) + fileID (SInt64) 6 + classID (Type*) 115 + packedSize (UInt64) 128 + offset (UInt64) 5920 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3049696528 + data[1] (unsigned int) 1192331207 + data[2] (unsigned int) 3261497741 + data[3] (unsigned int) 3099148142 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/AnimationPreviewUtilities.cs + data[6] (BuildReportPackedAssetInfo) + fileID (SInt64) 7 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 6048 + sourceAssetGUID (GUID) + data[0] (unsigned int) 474931232 + data[1] (unsigned int) 1121167511 + data[2] (unsigned int) 4224234659 + data[3] (unsigned int) 3536504558 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/VertexModifiers/PositionAsUV1.cs + data[7] (BuildReportPackedAssetInfo) + fileID (SInt64) 8 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 6160 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1012461616 + data[1] (unsigned int) 1334997887 + data[2] (unsigned int) 4134496159 + data[3] (unsigned int) 1468740287 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Animation/AnimationPlayableAsset.cs + data[8] (BuildReportPackedAssetInfo) + fileID (SInt64) 9 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 6288 + sourceAssetGUID (GUID) + data[0] (unsigned int) 950782032 + data[1] (unsigned int) 1013219782 + data[2] (unsigned int) 771080618 + data[3] (unsigned int) 2007935022 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SubMeshUI.cs + data[9] (BuildReportPackedAssetInfo) + fileID (SInt64) 10 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 6384 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4021590384 + data[1] (unsigned int) 3181699256 + data[2] (unsigned int) 3982523769 + data[3] (unsigned int) 1568976597 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SubMesh.cs + data[10] (BuildReportPackedAssetInfo) + fileID (SInt64) 11 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 6480 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2522288288 + data[1] (unsigned int) 1313283835 + data[2] (unsigned int) 1266249880 + data[3] (unsigned int) 3417031789 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_FontAssetUtilities.cs + data[11] (BuildReportPackedAssetInfo) + fileID (SInt64) 12 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 6592 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3343952544 + data[1] (unsigned int) 1239835998 + data[2] (unsigned int) 3423240624 + data[3] (unsigned int) 962872077 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/UIBehaviour.cs + data[12] (BuildReportPackedAssetInfo) + fileID (SInt64) 13 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 6704 + sourceAssetGUID (GUID) + data[0] (unsigned int) 29642176 + data[1] (unsigned int) 1235426835 + data[2] (unsigned int) 73624499 + data[3] (unsigned int) 1742403136 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/CanvasScaler.cs + data[13] (BuildReportPackedAssetInfo) + fileID (SInt64) 14 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 6800 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4065767632 + data[1] (unsigned int) 1120676387 + data[2] (unsigned int) 542011795 + data[3] (unsigned int) 1678707448 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Dropdown.cs + data[14] (BuildReportPackedAssetInfo) + fileID (SInt64) 15 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 6896 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1615464144 + data[1] (unsigned int) 1129072314 + data[2] (unsigned int) 420707742 + data[3] (unsigned int) 3780776420 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Audio/AudioClipProperties.cs + data[15] (BuildReportPackedAssetInfo) + fileID (SInt64) 16 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 7008 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1124755985 + data[1] (unsigned int) 3281275066 + data[2] (unsigned int) 2784652779 + data[3] (unsigned int) 3095308926 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/MaterialReferenceManager.cs + data[16] (BuildReportPackedAssetInfo) + fileID (SInt64) 17 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 7120 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2352759857 + data[1] (unsigned int) 1244276434 + data[2] (unsigned int) 2372359073 + data[3] (unsigned int) 2923334586 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/RawImage.cs + data[17] (BuildReportPackedAssetInfo) + fileID (SInt64) 18 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 7216 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1181342769 + data[1] (unsigned int) 1161022984 + data[2] (unsigned int) 518525883 + data[3] (unsigned int) 4143959274 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/FontData.cs + data[18] (BuildReportPackedAssetInfo) + fileID (SInt64) 19 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 7312 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3939242321 + data[1] (unsigned int) 1291620759 + data[2] (unsigned int) 3115517622 + data[3] (unsigned int) 1238234931 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/InputModules/BaseInput.cs + data[19] (BuildReportPackedAssetInfo) + fileID (SInt64) 20 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 7424 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4143463505 + data[1] (unsigned int) 1108363546 + data[2] (unsigned int) 1870373309 + data[3] (unsigned int) 495331311 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/Signals/SignalEmitter.cs + data[20] (BuildReportPackedAssetInfo) + fileID (SInt64) 21 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 7536 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1416826449 + data[1] (unsigned int) 1171865360 + data[2] (unsigned int) 1966212030 + data[3] (unsigned int) 3773183558 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Control/ControlTrack.cs + data[21] (BuildReportPackedAssetInfo) + fileID (SInt64) 22 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 7632 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1806174881 + data[1] (unsigned int) 1257244686 + data[2] (unsigned int) 1926586020 + data[3] (unsigned int) 1043481048 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/ScrollRect.cs + data[22] (BuildReportPackedAssetInfo) + fileID (SInt64) 23 + classID (Type*) 115 + packedSize (UInt64) 140 + offset (UInt64) 7728 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1328450993 + data[1] (unsigned int) 2269431463 + data[2] (unsigned int) 3986749626 + data[3] (unsigned int) 3112073319 + buildTimeAssetPath (string) Packages/com.unity.multiplayer.center/Common/IOnboardingSection.cs + data[23] (BuildReportPackedAssetInfo) + fileID (SInt64) 24 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 7872 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1888979921 + data[1] (unsigned int) 1330948560 + data[2] (unsigned int) 3858613900 + data[3] (unsigned int) 1607866005 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/TimeControlPlayable.cs + data[24] (BuildReportPackedAssetInfo) + fileID (SInt64) 25 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 7984 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4024409297 + data[1] (unsigned int) 1200253462 + data[2] (unsigned int) 2562125993 + data[3] (unsigned int) 3616073035 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/ILayerable.cs + data[25] (BuildReportPackedAssetInfo) + fileID (SInt64) 26 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 8080 + sourceAssetGUID (GUID) + data[0] (unsigned int) 181269473 + data[1] (unsigned int) 4115476288 + data[2] (unsigned int) 1575729806 + data[3] (unsigned int) 1572506135 + buildTimeAssetPath (string) Packages/com.unity.ai.navigation/Runtime/NavMeshModifier.cs + data[26] (BuildReportPackedAssetInfo) + fileID (SInt64) 27 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 8192 + sourceAssetGUID (GUID) + data[0] (unsigned int) 427825889 + data[1] (unsigned int) 1158842333 + data[2] (unsigned int) 3077304492 + data[3] (unsigned int) 670493164 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/InputModules/BaseInputModule.cs + data[27] (BuildReportPackedAssetInfo) + fileID (SInt64) 28 + classID (Type*) 115 + packedSize (UInt64) 124 + offset (UInt64) 8304 + sourceAssetGUID (GUID) + data[0] (unsigned int) 344870369 + data[1] (unsigned int) 1280432696 + data[2] (unsigned int) 2736399283 + data[3] (unsigned int) 2310351566 + buildTimeAssetPath (string) Packages/com.unity.xr.legacyinputhelpers/Runtime/ArmModels/ArmModel.cs + data[28] (BuildReportPackedAssetInfo) + fileID (SInt64) 29 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 8432 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3504841457 + data[1] (unsigned int) 1253815985 + data[2] (unsigned int) 48319104 + data[3] (unsigned int) 3274462358 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/TimelineUndo.cs + data[29] (BuildReportPackedAssetInfo) + fileID (SInt64) 30 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 8528 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3629634050 + data[1] (unsigned int) 1166455297 + data[2] (unsigned int) 3099596698 + data[3] (unsigned int) 3259481401 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SpriteCharacter.cs + data[30] (BuildReportPackedAssetInfo) + fileID (SInt64) 31 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 8640 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1968937474 + data[1] (unsigned int) 4254340682 + data[2] (unsigned int) 2745436923 + data[3] (unsigned int) 2858354695 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_TextProcessingStack.cs + data[31] (BuildReportPackedAssetInfo) + fileID (SInt64) 32 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 8752 + sourceAssetGUID (GUID) + data[0] (unsigned int) 941948674 + data[1] (unsigned int) 1141799023 + data[2] (unsigned int) 2403432320 + data[3] (unsigned int) 4090942658 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/MaterialModifiers/IMaterialModifier.cs + data[32] (BuildReportPackedAssetInfo) + fileID (SInt64) 33 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 8864 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1475633938 + data[1] (unsigned int) 1268490180 + data[2] (unsigned int) 843515559 + data[3] (unsigned int) 1710902563 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Compatibility.cs + data[33] (BuildReportPackedAssetInfo) + fileID (SInt64) 34 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 8976 + sourceAssetGUID (GUID) + data[0] (unsigned int) 402127634 + data[1] (unsigned int) 1177372882 + data[2] (unsigned int) 711900807 + data[3] (unsigned int) 2205233049 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Activation/ActivationTrack.cs + data[34] (BuildReportPackedAssetInfo) + fileID (SInt64) 35 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 9088 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3597440306 + data[1] (unsigned int) 1162609134 + data[2] (unsigned int) 2930177948 + data[3] (unsigned int) 586104392 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/EventInterfaces.cs + data[35] (BuildReportPackedAssetInfo) + fileID (SInt64) 36 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 9200 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2441153362 + data[1] (unsigned int) 1229332076 + data[2] (unsigned int) 3114450306 + data[3] (unsigned int) 1178584178 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/SpriteState.cs + data[36] (BuildReportPackedAssetInfo) + fileID (SInt64) 37 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 9296 + sourceAssetGUID (GUID) + data[0] (unsigned int) 783316322 + data[1] (unsigned int) 1167147258 + data[2] (unsigned int) 3391057541 + data[3] (unsigned int) 243582449 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/RaycasterManager.cs + data[37] (BuildReportPackedAssetInfo) + fileID (SInt64) 38 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 9408 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2769440882 + data[1] (unsigned int) 129272668 + data[2] (unsigned int) 906349739 + data[3] (unsigned int) 423521970 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Settings.cs + data[38] (BuildReportPackedAssetInfo) + fileID (SInt64) 39 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 9504 + sourceAssetGUID (GUID) + data[0] (unsigned int) 565443954 + data[1] (unsigned int) 1202769983 + data[2] (unsigned int) 2476743578 + data[3] (unsigned int) 4280306822 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_FontFeaturesCommon.cs + data[39] (BuildReportPackedAssetInfo) + fileID (SInt64) 40 + classID (Type*) 115 + packedSize (UInt64) 140 + offset (UInt64) 9616 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3613197714 + data[1] (unsigned int) 1307446522 + data[2] (unsigned int) 2386931604 + data[3] (unsigned int) 3326184632 + buildTimeAssetPath (string) Packages/com.unity.xr.legacyinputhelpers/Runtime/ArmModels/SwingArmModel.cs + data[40] (BuildReportPackedAssetInfo) + fileID (SInt64) 41 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 9760 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3628556706 + data[1] (unsigned int) 1320031817 + data[2] (unsigned int) 2614437798 + data[3] (unsigned int) 154523255 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/MarkerTrack.cs + data[41] (BuildReportPackedAssetInfo) + fileID (SInt64) 42 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 9856 + sourceAssetGUID (GUID) + data[0] (unsigned int) 444322978 + data[1] (unsigned int) 1132624193 + data[2] (unsigned int) 3071364748 + data[3] (unsigned int) 984780062 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Scrollbar.cs + data[42] (BuildReportPackedAssetInfo) + fileID (SInt64) 43 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 9952 + sourceAssetGUID (GUID) + data[0] (unsigned int) 477861074 + data[1] (unsigned int) 1192111563 + data[2] (unsigned int) 450119833 + data[3] (unsigned int) 3627084658 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/InputModules/TouchInputModule.cs + data[43] (BuildReportPackedAssetInfo) + fileID (SInt64) 44 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 10064 + sourceAssetGUID (GUID) + data[0] (unsigned int) 559680210 + data[1] (unsigned int) 1316262431 + data[2] (unsigned int) 1637056408 + data[3] (unsigned int) 2893887353 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_InputField.cs + data[44] (BuildReportPackedAssetInfo) + fileID (SInt64) 45 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 10160 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4230937330 + data[1] (unsigned int) 1201074542 + data[2] (unsigned int) 3256460696 + data[3] (unsigned int) 529421683 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/ToggleGroup.cs + data[45] (BuildReportPackedAssetInfo) + fileID (SInt64) 46 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 10256 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2748925443 + data[1] (unsigned int) 1285139193 + data[2] (unsigned int) 1712437160 + data[3] (unsigned int) 170899083 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/HorizontalLayoutGroup.cs + data[46] (BuildReportPackedAssetInfo) + fileID (SInt64) 47 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 10384 + sourceAssetGUID (GUID) + data[0] (unsigned int) 747423235 + data[1] (unsigned int) 1092081995 + data[2] (unsigned int) 1931885230 + data[3] (unsigned int) 1645399912 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/LayoutElement.cs + data[47] (BuildReportPackedAssetInfo) + fileID (SInt64) 48 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 10496 + sourceAssetGUID (GUID) + data[0] (unsigned int) 410905347 + data[1] (unsigned int) 2838765646 + data[2] (unsigned int) 870640779 + data[3] (unsigned int) 1360529269 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Style.cs + data[48] (BuildReportPackedAssetInfo) + fileID (SInt64) 49 + classID (Type*) 115 + packedSize (UInt64) 76 + offset (UInt64) 10592 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1095309843 + data[1] (unsigned int) 1319493964 + data[2] (unsigned int) 872033962 + data[3] (unsigned int) 1864466159 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Mask.cs + data[49] (BuildReportPackedAssetInfo) + fileID (SInt64) 50 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 10672 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2569613859 + data[1] (unsigned int) 852774581 + data[2] (unsigned int) 3754331194 + data[3] (unsigned int) 4164481657 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_DefaultControls.cs + data[50] (BuildReportPackedAssetInfo) + fileID (SInt64) 51 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 10784 + sourceAssetGUID (GUID) + data[0] (unsigned int) 701387811 + data[1] (unsigned int) 1095538023 + data[2] (unsigned int) 495930528 + data[3] (unsigned int) 2177642567 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/ContentSizeFitter.cs + data[51] (BuildReportPackedAssetInfo) + fileID (SInt64) 52 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 10896 + sourceAssetGUID (GUID) + data[0] (unsigned int) 768947491 + data[1] (unsigned int) 1309830217 + data[2] (unsigned int) 1135343506 + data[3] (unsigned int) 633451803 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/Extrapolation.cs + data[52] (BuildReportPackedAssetInfo) + fileID (SInt64) 53 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 11008 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2281721123 + data[1] (unsigned int) 1975787882 + data[2] (unsigned int) 2185981352 + data[3] (unsigned int) 3806758397 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TextContainer.cs + data[53] (BuildReportPackedAssetInfo) + fileID (SInt64) 54 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 11104 + sourceAssetGUID (GUID) + data[0] (unsigned int) 930947379 + data[1] (unsigned int) 1261279385 + data[2] (unsigned int) 2436293022 + data[3] (unsigned int) 1742117534 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/RectMask2D.cs + data[54] (BuildReportPackedAssetInfo) + fileID (SInt64) 55 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 11200 + sourceAssetGUID (GUID) + data[0] (unsigned int) 285548099 + data[1] (unsigned int) 3391406530 + data[2] (unsigned int) 632320312 + data[3] (unsigned int) 574523789 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_ScrollbarEventHandler.cs + data[55] (BuildReportPackedAssetInfo) + fileID (SInt64) 56 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 11328 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3465348435 + data[1] (unsigned int) 1136300790 + data[2] (unsigned int) 2850707853 + data[3] (unsigned int) 738614580 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/RaycastResult.cs + data[56] (BuildReportPackedAssetInfo) + fileID (SInt64) 57 + classID (Type*) 115 + packedSize (UInt64) 124 + offset (UInt64) 11440 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1557503571 + data[1] (unsigned int) 2202448639 + data[2] (unsigned int) 2816280704 + data[3] (unsigned int) 1954687324 + buildTimeAssetPath (string) Packages/com.unity.ai.navigation/Runtime/NavMeshModifierVolume.cs + data[57] (BuildReportPackedAssetInfo) + fileID (SInt64) 58 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 11568 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1084479587 + data[1] (unsigned int) 1091075721 + data[2] (unsigned int) 1520989613 + data[3] (unsigned int) 2037572943 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/ILayoutElement.cs + data[58] (BuildReportPackedAssetInfo) + fileID (SInt64) 59 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 11680 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3384193395 + data[1] (unsigned int) 1191562664 + data[2] (unsigned int) 1785130149 + data[3] (unsigned int) 407334879 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Culling/IClipRegion.cs + data[59] (BuildReportPackedAssetInfo) + fileID (SInt64) 60 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 11776 + sourceAssetGUID (GUID) + data[0] (unsigned int) 375700115 + data[1] (unsigned int) 1273530662 + data[2] (unsigned int) 2671002511 + data[3] (unsigned int) 2355084049 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/FontUpdateTracker.cs + data[60] (BuildReportPackedAssetInfo) + fileID (SInt64) 61 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 11888 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2518900131 + data[1] (unsigned int) 1208034428 + data[2] (unsigned int) 1083143866 + data[3] (unsigned int) 239702421 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/TrackAsset.cs + data[61] (BuildReportPackedAssetInfo) + fileID (SInt64) 62 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 11984 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1753329075 + data[1] (unsigned int) 2699360351 + data[2] (unsigned int) 4796699 + data[3] (unsigned int) 3996911131 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Asset.cs + data[62] (BuildReportPackedAssetInfo) + fileID (SInt64) 63 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 12080 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3242301923 + data[1] (unsigned int) 1224654173 + data[2] (unsigned int) 3145938084 + data[3] (unsigned int) 2561685880 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/TimelineAttributes.cs + data[63] (BuildReportPackedAssetInfo) + fileID (SInt64) 64 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 12208 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3610360836 + data[1] (unsigned int) 1315015136 + data[2] (unsigned int) 3725857960 + data[3] (unsigned int) 3672046129 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/TimelineCreateUtilities.cs + data[64] (BuildReportPackedAssetInfo) + fileID (SInt64) 65 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 12336 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1130370596 + data[1] (unsigned int) 1184886953 + data[2] (unsigned int) 2266490031 + data[3] (unsigned int) 1598700828 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/Raycasters/BaseRaycaster.cs + data[65] (BuildReportPackedAssetInfo) + fileID (SInt64) 66 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 12448 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1176130356 + data[1] (unsigned int) 1075013563 + data[2] (unsigned int) 556075148 + data[3] (unsigned int) 4120367916 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/MarkerList.cs + data[66] (BuildReportPackedAssetInfo) + fileID (SInt64) 67 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 12544 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3356543284 + data[1] (unsigned int) 1240012367 + data[2] (unsigned int) 17996445 + data[3] (unsigned int) 2283446508 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/PrefabControlPlayable.cs + data[67] (BuildReportPackedAssetInfo) + fileID (SInt64) 68 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 12672 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3486369092 + data[1] (unsigned int) 1236002631 + data[2] (unsigned int) 1601812610 + data[3] (unsigned int) 3207244136 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/GraphicRebuildTracker.cs + data[68] (BuildReportPackedAssetInfo) + fileID (SInt64) 69 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 12800 + sourceAssetGUID (GUID) + data[0] (unsigned int) 395278212 + data[1] (unsigned int) 1189426707 + data[2] (unsigned int) 3830222720 + data[3] (unsigned int) 3784796373 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_ResourcesManager.cs + data[69] (BuildReportPackedAssetInfo) + fileID (SInt64) 70 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 12912 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1319327876 + data[1] (unsigned int) 1183035224 + data[2] (unsigned int) 480330626 + data[3] (unsigned int) 122823086 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Control/ControlPlayableAsset.cs + data[70] (BuildReportPackedAssetInfo) + fileID (SInt64) 71 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 13024 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1785420964 + data[1] (unsigned int) 1230760613 + data[2] (unsigned int) 1752907399 + data[3] (unsigned int) 1126145542 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Character.cs + data[71] (BuildReportPackedAssetInfo) + fileID (SInt64) 72 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 13120 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4092882596 + data[1] (unsigned int) 1887698983 + data[2] (unsigned int) 2677120922 + data[3] (unsigned int) 3171919660 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_TextInfo.cs + data[72] (BuildReportPackedAssetInfo) + fileID (SInt64) 73 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 13216 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2895518660 + data[1] (unsigned int) 1339942762 + data[2] (unsigned int) 3750998925 + data[3] (unsigned int) 1419407760 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/IMarker.cs + data[73] (BuildReportPackedAssetInfo) + fileID (SInt64) 74 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 13312 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2317062884 + data[1] (unsigned int) 1152703486 + data[2] (unsigned int) 1634988987 + data[3] (unsigned int) 4285592446 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Button.cs + data[74] (BuildReportPackedAssetInfo) + fileID (SInt64) 75 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 13408 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2020262132 + data[1] (unsigned int) 72645284 + data[2] (unsigned int) 1593103291 + data[3] (unsigned int) 3434516234 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_TextUtilities.cs + data[75] (BuildReportPackedAssetInfo) + fileID (SInt64) 76 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 13520 + sourceAssetGUID (GUID) + data[0] (unsigned int) 115147252 + data[1] (unsigned int) 1074186070 + data[2] (unsigned int) 2805135237 + data[3] (unsigned int) 1317997031 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Audio/AudioPlayableAsset.cs + data[76] (BuildReportPackedAssetInfo) + fileID (SInt64) 77 + classID (Type*) 115 + packedSize (UInt64) 124 + offset (UInt64) 13632 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4106302196 + data[1] (unsigned int) 1228892283 + data[2] (unsigned int) 2332669606 + data[3] (unsigned int) 2003324008 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/InputModules/StandaloneInputModule.cs + data[77] (BuildReportPackedAssetInfo) + fileID (SInt64) 78 + classID (Type*) 115 + packedSize (UInt64) 128 + offset (UInt64) 13760 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2579245061 + data[1] (unsigned int) 1220124554 + data[2] (unsigned int) 1267586189 + data[3] (unsigned int) 3919786588 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/INotificationOptionProvider.cs + data[78] (BuildReportPackedAssetInfo) + fileID (SInt64) 79 + classID (Type*) 115 + packedSize (UInt64) 136 + offset (UInt64) 13888 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4194262277 + data[1] (unsigned int) 2000992846 + data[2] (unsigned int) 3628510843 + data[3] (unsigned int) 496908314 + buildTimeAssetPath (string) Packages/com.unity.multiplayer.center/Common/StyleConstants.cs + data[79] (BuildReportPackedAssetInfo) + fileID (SInt64) 80 + classID (Type*) 115 + packedSize (UInt64) 80 + offset (UInt64) 14032 + sourceAssetGUID (GUID) + data[0] (unsigned int) 408892437 + data[1] (unsigned int) 1401161328 + data[2] (unsigned int) 2951061946 + data[3] (unsigned int) 3749808338 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Text.cs + data[80] (BuildReportPackedAssetInfo) + fileID (SInt64) 81 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 14112 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1083986245 + data[1] (unsigned int) 1312603980 + data[2] (unsigned int) 749949577 + data[3] (unsigned int) 3698570856 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/ITimeControl.cs + data[81] (BuildReportPackedAssetInfo) + fileID (SInt64) 82 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 14208 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3997655877 + data[1] (unsigned int) 1142646652 + data[2] (unsigned int) 969052578 + data[3] (unsigned int) 1000195810 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_TextElement.cs + data[82] (BuildReportPackedAssetInfo) + fileID (SInt64) 83 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 14304 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3874565445 + data[1] (unsigned int) 1952756716 + data[2] (unsigned int) 4163092729 + data[3] (unsigned int) 242222792 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_ColorGradient.cs + data[83] (BuildReportPackedAssetInfo) + fileID (SInt64) 84 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 14416 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2781242981 + data[1] (unsigned int) 1173451012 + data[2] (unsigned int) 1632490375 + data[3] (unsigned int) 4213503050 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/Raycasters/Physics2DRaycaster.cs + data[84] (BuildReportPackedAssetInfo) + fileID (SInt64) 85 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 14544 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2520878997 + data[1] (unsigned int) 1116733315 + data[2] (unsigned int) 662566332 + data[3] (unsigned int) 1467317091 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/VerticalLayoutGroup.cs + data[85] (BuildReportPackedAssetInfo) + fileID (SInt64) 86 + classID (Type*) 115 + packedSize (UInt64) 132 + offset (UInt64) 14656 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1137287845 + data[1] (unsigned int) 1331234045 + data[2] (unsigned int) 2676672951 + data[3] (unsigned int) 3052761431 + buildTimeAssetPath (string) Packages/com.unity.xr.legacyinputhelpers/Runtime/TrackedPoseDriver/TrackedPoseDriver.cs + data[86] (BuildReportPackedAssetInfo) + fileID (SInt64) 87 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 14800 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1973863861 + data[1] (unsigned int) 1278955622 + data[2] (unsigned int) 388856746 + data[3] (unsigned int) 1928693561 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SpriteGlyph.cs + data[87] (BuildReportPackedAssetInfo) + fileID (SInt64) 88 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 14896 + sourceAssetGUID (GUID) + data[0] (unsigned int) 929012453 + data[1] (unsigned int) 1241549645 + data[2] (unsigned int) 439933369 + data[3] (unsigned int) 2292236655 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_FontFeatureTable.cs + data[88] (BuildReportPackedAssetInfo) + fileID (SInt64) 89 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 15008 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3044797413 + data[1] (unsigned int) 1076126109 + data[2] (unsigned int) 477051832 + data[3] (unsigned int) 1726871865 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/MultipleDisplayUtilities.cs + data[89] (BuildReportPackedAssetInfo) + fileID (SInt64) 90 + classID (Type*) 115 + packedSize (UInt64) 76 + offset (UInt64) 15136 + sourceAssetGUID (GUID) + data[0] (unsigned int) 437266421 + data[1] (unsigned int) 1291803090 + data[2] (unsigned int) 1507411088 + data[3] (unsigned int) 591381295 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Text.cs + data[90] (BuildReportPackedAssetInfo) + fileID (SInt64) 91 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 15216 + sourceAssetGUID (GUID) + data[0] (unsigned int) 34613782 + data[1] (unsigned int) 1211485660 + data[2] (unsigned int) 3473001401 + data[3] (unsigned int) 3824153864 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/IMaskable.cs + data[91] (BuildReportPackedAssetInfo) + fileID (SInt64) 92 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 15312 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2635681046 + data[1] (unsigned int) 1277766121 + data[2] (unsigned int) 282579338 + data[3] (unsigned int) 2920838266 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Navigation.cs + data[92] (BuildReportPackedAssetInfo) + fileID (SInt64) 93 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 15408 + sourceAssetGUID (GUID) + data[0] (unsigned int) 446153510 + data[1] (unsigned int) 1229664542 + data[2] (unsigned int) 2365317025 + data[3] (unsigned int) 3750662616 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/ExecuteEvents.cs + data[93] (BuildReportPackedAssetInfo) + fileID (SInt64) 94 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 15520 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2045666870 + data[1] (unsigned int) 1142184815 + data[2] (unsigned int) 3089126681 + data[3] (unsigned int) 2773710921 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SpriteAnimator.cs + data[94] (BuildReportPackedAssetInfo) + fileID (SInt64) 95 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 15632 + sourceAssetGUID (GUID) + data[0] (unsigned int) 468830294 + data[1] (unsigned int) 2828304020 + data[2] (unsigned int) 202057482 + data[3] (unsigned int) 254933823 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_CoroutineTween.cs + data[95] (BuildReportPackedAssetInfo) + fileID (SInt64) 96 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 15728 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1816805206 + data[1] (unsigned int) 1249023207 + data[2] (unsigned int) 3056630663 + data[3] (unsigned int) 1040896490 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/TimelineClip.cs + data[96] (BuildReportPackedAssetInfo) + fileID (SInt64) 97 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 15824 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1738123110 + data[1] (unsigned int) 1212546482 + data[2] (unsigned int) 1965075135 + data[3] (unsigned int) 778649075 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/ClipCaps.cs + data[97] (BuildReportPackedAssetInfo) + fileID (SInt64) 98 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 15936 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3750439782 + data[1] (unsigned int) 1286912465 + data[2] (unsigned int) 863024796 + data[3] (unsigned int) 1059229093 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/IPropertyCollector.cs + data[98] (BuildReportPackedAssetInfo) + fileID (SInt64) 99 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 16048 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4176067958 + data[1] (unsigned int) 1285464800 + data[2] (unsigned int) 1798184112 + data[3] (unsigned int) 1265247540 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Slider.cs + data[99] (BuildReportPackedAssetInfo) + fileID (SInt64) 100 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 16144 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3011853942 + data[1] (unsigned int) 1225355545 + data[2] (unsigned int) 2175190160 + data[3] (unsigned int) 639775416 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Culling/Clipping.cs + data[100] (BuildReportPackedAssetInfo) + fileID (SInt64) 101 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 16240 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3163279766 + data[1] (unsigned int) 2787396615 + data[2] (unsigned int) 1686208168 + data[3] (unsigned int) 4114813637 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_UpdateManager.cs + data[101] (BuildReportPackedAssetInfo) + fileID (SInt64) 102 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 16352 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2136337046 + data[1] (unsigned int) 1210778758 + data[2] (unsigned int) 3217447609 + data[3] (unsigned int) 265755189 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/StencilMaterial.cs + data[102] (BuildReportPackedAssetInfo) + fileID (SInt64) 103 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 16464 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3111730838 + data[1] (unsigned int) 1250857479 + data[2] (unsigned int) 2070532781 + data[3] (unsigned int) 2747640641 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/GraphicRegistry.cs + data[103] (BuildReportPackedAssetInfo) + fileID (SInt64) 104 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 16576 + sourceAssetGUID (GUID) + data[0] (unsigned int) 432075942 + data[1] (unsigned int) 1089267754 + data[2] (unsigned int) 3489839249 + data[3] (unsigned int) 223614301 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/AssetUpgrade/ClipUpgrade.cs + data[104] (BuildReportPackedAssetInfo) + fileID (SInt64) 105 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 16672 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3896458662 + data[1] (unsigned int) 1347190520 + data[2] (unsigned int) 2172407208 + data[3] (unsigned int) 3919869835 + buildTimeAssetPath (string) Packages/com.unity.ai.navigation/Runtime/HelpUrls.cs + data[105] (BuildReportPackedAssetInfo) + fileID (SInt64) 106 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 16768 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3156438438 + data[1] (unsigned int) 1131378892 + data[2] (unsigned int) 1611041693 + data[3] (unsigned int) 1605238748 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_TextParsingUtilities.cs + data[106] (BuildReportPackedAssetInfo) + fileID (SInt64) 107 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 16880 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3425031110 + data[1] (unsigned int) 1232954565 + data[2] (unsigned int) 316680614 + data[3] (unsigned int) 3896504585 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Attributes/TrackColorAttribute.cs + data[107] (BuildReportPackedAssetInfo) + fileID (SInt64) 108 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 16992 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3408910806 + data[1] (unsigned int) 3608463505 + data[2] (unsigned int) 141754379 + data[3] (unsigned int) 3375466067 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_MaterialManager.cs + data[108] (BuildReportPackedAssetInfo) + fileID (SInt64) 109 + classID (Type*) 115 + packedSize (UInt64) 76 + offset (UInt64) 17104 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4153806294 + data[1] (unsigned int) 1114285196 + data[2] (unsigned int) 2777906062 + data[3] (unsigned int) 3198737228 + buildTimeAssetPath (string) Assets/AssetDuplication/ImageList.cs + data[109] (BuildReportPackedAssetInfo) + fileID (SInt64) 110 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 17184 + sourceAssetGUID (GUID) + data[0] (unsigned int) 215334630 + data[1] (unsigned int) 1263525730 + data[2] (unsigned int) 245877640 + data[3] (unsigned int) 2440800305 + buildTimeAssetPath (string) Packages/com.unity.ai.navigation/Runtime/NavMeshLink.cs + data[110] (BuildReportPackedAssetInfo) + fileID (SInt64) 111 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 17296 + sourceAssetGUID (GUID) + data[0] (unsigned int) 436804103 + data[1] (unsigned int) 1310539835 + data[2] (unsigned int) 1408915859 + data[3] (unsigned int) 1829972237 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Evaluation/RuntimeClip.cs + data[111] (BuildReportPackedAssetInfo) + fileID (SInt64) 112 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 17392 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3142950663 + data[1] (unsigned int) 1229615947 + data[2] (unsigned int) 3563055240 + data[3] (unsigned int) 1196145273 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Evaluation/RuntimeClipBase.cs + data[112] (BuildReportPackedAssetInfo) + fileID (SInt64) 113 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 17504 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2674300951 + data[1] (unsigned int) 1174780934 + data[2] (unsigned int) 3851511955 + data[3] (unsigned int) 2889195253 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/VertexModifiers/BaseMeshEffect.cs + data[113] (BuildReportPackedAssetInfo) + fileID (SInt64) 114 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 17616 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2752846871 + data[1] (unsigned int) 3789827510 + data[2] (unsigned int) 3955147400 + data[3] (unsigned int) 1089224849 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_FontAsset.cs + data[114] (BuildReportPackedAssetInfo) + fileID (SInt64) 115 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 17712 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2204596023 + data[1] (unsigned int) 672459123 + data[2] (unsigned int) 1870162858 + data[3] (unsigned int) 168983584 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/TimelinePlayable_Animation.cs + data[115] (BuildReportPackedAssetInfo) + fileID (SInt64) 116 + classID (Type*) 115 + packedSize (UInt64) 136 + offset (UInt64) 17840 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1239672151 + data[1] (unsigned int) 1296594930 + data[2] (unsigned int) 1253956485 + data[3] (unsigned int) 666569746 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Animation/AnimationPreviewUpdateCallback.cs + data[116] (BuildReportPackedAssetInfo) + fileID (SInt64) 117 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 17984 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3430284631 + data[1] (unsigned int) 1187270171 + data[2] (unsigned int) 1922643328 + data[3] (unsigned int) 2887667783 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/EventData/PointerEventData.cs + data[117] (BuildReportPackedAssetInfo) + fileID (SInt64) 118 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 18096 + sourceAssetGUID (GUID) + data[0] (unsigned int) 603679591 + data[1] (unsigned int) 1134546794 + data[2] (unsigned int) 2455538602 + data[3] (unsigned int) 416075227 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Evaluation/RuntimeElement.cs + data[118] (BuildReportPackedAssetInfo) + fileID (SInt64) 119 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 18208 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1311325287 + data[1] (unsigned int) 1284048306 + data[2] (unsigned int) 4257634437 + data[3] (unsigned int) 447392998 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/EventSystem.cs + data[119] (BuildReportPackedAssetInfo) + fileID (SInt64) 120 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 18320 + sourceAssetGUID (GUID) + data[0] (unsigned int) 690386039 + data[1] (unsigned int) 1351921567 + data[2] (unsigned int) 342784122 + data[3] (unsigned int) 3058185607 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMPro_ExtensionMethods.cs + data[120] (BuildReportPackedAssetInfo) + fileID (SInt64) 121 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 18432 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3075287927 + data[1] (unsigned int) 1332165036 + data[2] (unsigned int) 2157374090 + data[3] (unsigned int) 1972733092 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/FontFeatureCommonGSUB.cs + data[121] (BuildReportPackedAssetInfo) + fileID (SInt64) 122 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 18544 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3532914583 + data[1] (unsigned int) 2107960753 + data[2] (unsigned int) 1248035752 + data[3] (unsigned int) 3532851274 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_InputValidator.cs + data[122] (BuildReportPackedAssetInfo) + fileID (SInt64) 123 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 18656 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4269744295 + data[1] (unsigned int) 3019170780 + data[2] (unsigned int) 1855389866 + data[3] (unsigned int) 2109594370 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/TimelineClipExtensions.cs + data[123] (BuildReportPackedAssetInfo) + fileID (SInt64) 124 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 18784 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3239880103 + data[1] (unsigned int) 2169399196 + data[2] (unsigned int) 1662197134 + data[3] (unsigned int) 636610315 + buildTimeAssetPath (string) Packages/com.unity.ai.navigation/Runtime/NavMeshSurface.cs + data[124] (BuildReportPackedAssetInfo) + fileID (SInt64) 125 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 18896 + sourceAssetGUID (GUID) + data[0] (unsigned int) 776771495 + data[1] (unsigned int) 1186256083 + data[2] (unsigned int) 3920583419 + data[3] (unsigned int) 105518950 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/UIElements/PanelRaycaster.cs + data[125] (BuildReportPackedAssetInfo) + fileID (SInt64) 126 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 19008 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1428261287 + data[1] (unsigned int) 1263632160 + data[2] (unsigned int) 2009056139 + data[3] (unsigned int) 1666073419 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Selectable.cs + data[126] (BuildReportPackedAssetInfo) + fileID (SInt64) 127 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 19104 + sourceAssetGUID (GUID) + data[0] (unsigned int) 120801207 + data[1] (unsigned int) 753198026 + data[2] (unsigned int) 1173906970 + data[3] (unsigned int) 2835253845 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Dropdown.cs + data[127] (BuildReportPackedAssetInfo) + fileID (SInt64) 128 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 19200 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1742118327 + data[1] (unsigned int) 1176834327 + data[2] (unsigned int) 3569760168 + data[3] (unsigned int) 794201474 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/MaskUtilities.cs + data[128] (BuildReportPackedAssetInfo) + fileID (SInt64) 129 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 19312 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2493812407 + data[1] (unsigned int) 1316864699 + data[2] (unsigned int) 3079724698 + data[3] (unsigned int) 222917162 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Animation/CoroutineTween.cs + data[129] (BuildReportPackedAssetInfo) + fileID (SInt64) 130 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 19424 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3252689672 + data[1] (unsigned int) 1151927685 + data[2] (unsigned int) 3466970025 + data[3] (unsigned int) 1430574860 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/TimelinePlayable.cs + data[130] (BuildReportPackedAssetInfo) + fileID (SInt64) 131 + classID (Type*) 115 + packedSize (UInt64) 76 + offset (UInt64) 19536 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3411478568 + data[1] (unsigned int) 1223503669 + data[2] (unsigned int) 2202641033 + data[3] (unsigned int) 3082364167 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Misc.cs + data[131] (BuildReportPackedAssetInfo) + fileID (SInt64) 132 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 19616 + sourceAssetGUID (GUID) + data[0] (unsigned int) 938736424 + data[1] (unsigned int) 1320210135 + data[2] (unsigned int) 2442659491 + data[3] (unsigned int) 2024639109 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/LayoutUtility.cs + data[132] (BuildReportPackedAssetInfo) + fileID (SInt64) 133 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 19728 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4280933416 + data[1] (unsigned int) 1194866988 + data[2] (unsigned int) 3341493138 + data[3] (unsigned int) 4035723594 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Scripting/PlayableTrack.cs + data[133] (BuildReportPackedAssetInfo) + fileID (SInt64) 134 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 19840 + sourceAssetGUID (GUID) + data[0] (unsigned int) 716734520 + data[1] (unsigned int) 1238090289 + data[2] (unsigned int) 1812645808 + data[3] (unsigned int) 3501329047 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/ColorBlock.cs + data[134] (BuildReportPackedAssetInfo) + fileID (SInt64) 135 + classID (Type*) 115 + packedSize (UInt64) 184 + offset (UInt64) 19936 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1065497400 + data[1] (unsigned int) 3427016651 + data[2] (unsigned int) 2195889993 + data[3] (unsigned int) 1917544678 + buildTimeAssetPath (string) Packages/com.unity.multiplayer.center/Common/IOnboardingSectionAnalyticsProvider.cs + data[135] (BuildReportPackedAssetInfo) + fileID (SInt64) 136 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 20128 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1387436616 + data[1] (unsigned int) 2610221967 + data[2] (unsigned int) 47329739 + data[3] (unsigned int) 404779958 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SpriteAsset.cs + data[136] (BuildReportPackedAssetInfo) + fileID (SInt64) 137 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 20224 + sourceAssetGUID (GUID) + data[0] (unsigned int) 977026904 + data[1] (unsigned int) 1304634924 + data[2] (unsigned int) 186016173 + data[3] (unsigned int) 803400052 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/VertexModifiers/IMeshModifier.cs + data[137] (BuildReportPackedAssetInfo) + fileID (SInt64) 138 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 20336 + sourceAssetGUID (GUID) + data[0] (unsigned int) 887101288 + data[1] (unsigned int) 1332700397 + data[2] (unsigned int) 1586265259 + data[3] (unsigned int) 2572824960 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/AspectRatioFitter.cs + data[138] (BuildReportPackedAssetInfo) + fileID (SInt64) 139 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 20448 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3723030904 + data[1] (unsigned int) 4172582501 + data[2] (unsigned int) 3223017771 + data[3] (unsigned int) 1677229116 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/FastAction.cs + data[139] (BuildReportPackedAssetInfo) + fileID (SInt64) 140 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 20544 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3199318648 + data[1] (unsigned int) 2400514846 + data[2] (unsigned int) 2121418201 + data[3] (unsigned int) 2245278765 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_TextElement_Legacy.cs + data[140] (BuildReportPackedAssetInfo) + fileID (SInt64) 141 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 20656 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1609644952 + data[1] (unsigned int) 1273340076 + data[2] (unsigned int) 3580667799 + data[3] (unsigned int) 1888045364 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Animation/ICurvesOwner.cs + data[141] (BuildReportPackedAssetInfo) + fileID (SInt64) 142 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 20752 + sourceAssetGUID (GUID) + data[0] (unsigned int) 816335768 + data[1] (unsigned int) 1239633775 + data[2] (unsigned int) 764200846 + data[3] (unsigned int) 3570652161 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/Marker.cs + data[142] (BuildReportPackedAssetInfo) + fileID (SInt64) 143 + classID (Type*) 115 + packedSize (UInt64) 124 + offset (UInt64) 20848 + sourceAssetGUID (GUID) + data[0] (unsigned int) 865954712 + data[1] (unsigned int) 2429851982 + data[2] (unsigned int) 3628822280 + data[3] (unsigned int) 3380054828 + buildTimeAssetPath (string) Packages/com.unity.multiplayer.center/Common/AnswerData.cs + data[143] (BuildReportPackedAssetInfo) + fileID (SInt64) 144 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 20976 + sourceAssetGUID (GUID) + data[0] (unsigned int) 313529512 + data[1] (unsigned int) 4064579619 + data[2] (unsigned int) 2543232283 + data[3] (unsigned int) 1510220025 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/UIElements/PanelEventHandler.cs + data[144] (BuildReportPackedAssetInfo) + fileID (SInt64) 145 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 21104 + sourceAssetGUID (GUID) + data[0] (unsigned int) 626616488 + data[1] (unsigned int) 1310773489 + data[2] (unsigned int) 4009318041 + data[3] (unsigned int) 744661504 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/GridLayoutGroup.cs + data[145] (BuildReportPackedAssetInfo) + fileID (SInt64) 146 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 21216 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3264684728 + data[1] (unsigned int) 1145075123 + data[2] (unsigned int) 2277278142 + data[3] (unsigned int) 1201928748 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Audio/AudioTrack.cs + data[146] (BuildReportPackedAssetInfo) + fileID (SInt64) 147 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 21312 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2862476984 + data[1] (unsigned int) 1297110139 + data[2] (unsigned int) 4025183880 + data[3] (unsigned int) 4268702789 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/DiscreteTime.cs + data[147] (BuildReportPackedAssetInfo) + fileID (SInt64) 148 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 21408 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2845591544 + data[1] (unsigned int) 1270113366 + data[2] (unsigned int) 331138699 + data[3] (unsigned int) 4154826468 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Evaluation/IntervalTree.cs + data[148] (BuildReportPackedAssetInfo) + fileID (SInt64) 149 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 21504 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4131411977 + data[1] (unsigned int) 1146711840 + data[2] (unsigned int) 1625258430 + data[3] (unsigned int) 788021355 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Toggle.cs + data[149] (BuildReportPackedAssetInfo) + fileID (SInt64) 150 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 21600 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1455550217 + data[1] (unsigned int) 1286847342 + data[2] (unsigned int) 4247158942 + data[3] (unsigned int) 3910629671 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_CharacterInfo.cs + data[150] (BuildReportPackedAssetInfo) + fileID (SInt64) 151 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 21712 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1415139097 + data[1] (unsigned int) 1329850041 + data[2] (unsigned int) 1931594385 + data[3] (unsigned int) 461995268 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/EventData/BaseEventData.cs + data[151] (BuildReportPackedAssetInfo) + fileID (SInt64) 152 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 21824 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3848067113 + data[1] (unsigned int) 1323550914 + data[2] (unsigned int) 3602070957 + data[3] (unsigned int) 2926297445 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/IGraphicEnabledDisabled.cs + data[152] (BuildReportPackedAssetInfo) + fileID (SInt64) 153 + classID (Type*) 115 + packedSize (UInt64) 148 + offset (UInt64) 21952 + sourceAssetGUID (GUID) + data[0] (unsigned int) 964858937 + data[1] (unsigned int) 1182508155 + data[2] (unsigned int) 2420757387 + data[3] (unsigned int) 817453665 + buildTimeAssetPath (string) Packages/com.unity.xr.legacyinputhelpers/Runtime/ArmModels/TransitionArmModel.cs + data[153] (BuildReportPackedAssetInfo) + fileID (SInt64) 154 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 22112 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3868005465 + data[1] (unsigned int) 3519319538 + data[2] (unsigned int) 266209689 + data[3] (unsigned int) 3125269080 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TextMeshPro.cs + data[154] (BuildReportPackedAssetInfo) + fileID (SInt64) 155 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 22208 + sourceAssetGUID (GUID) + data[0] (unsigned int) 529573993 + data[1] (unsigned int) 54818101 + data[2] (unsigned int) 2661621354 + data[3] (unsigned int) 2255831383 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_Sprite.cs + data[155] (BuildReportPackedAssetInfo) + fileID (SInt64) 156 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 22304 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1114676841 + data[1] (unsigned int) 370428469 + data[2] (unsigned int) 2269922680 + data[3] (unsigned int) 2181281111 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMPro_EventManager.cs + data[156] (BuildReportPackedAssetInfo) + fileID (SInt64) 157 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 22416 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1473029753 + data[1] (unsigned int) 1230961403 + data[2] (unsigned int) 2990608572 + data[3] (unsigned int) 3950285098 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/MaskableGraphic.cs + data[157] (BuildReportPackedAssetInfo) + fileID (SInt64) 158 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 22528 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1003201977 + data[1] (unsigned int) 1170262712 + data[2] (unsigned int) 595436695 + data[3] (unsigned int) 1053863738 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Evaluation/InfiniteRuntimeClip.cs + data[158] (BuildReportPackedAssetInfo) + fileID (SInt64) 159 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 22640 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1650590201 + data[1] (unsigned int) 1171515637 + data[2] (unsigned int) 2163861183 + data[3] (unsigned int) 4226626754 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Culling/ClipperRegistry.cs + data[159] (BuildReportPackedAssetInfo) + fileID (SInt64) 160 + classID (Type*) 115 + packedSize (UInt64) 132 + offset (UInt64) 22752 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3115549738 + data[1] (unsigned int) 1151281277 + data[2] (unsigned int) 1797756329 + data[3] (unsigned int) 2585122737 + buildTimeAssetPath (string) Packages/com.unity.xr.legacyinputhelpers/Runtime/CameraOffset.cs + data[160] (BuildReportPackedAssetInfo) + fileID (SInt64) 161 + classID (Type*) 115 + packedSize (UInt64) 136 + offset (UInt64) 22896 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3896218186 + data[1] (unsigned int) 1204309406 + data[2] (unsigned int) 2960690304 + data[3] (unsigned int) 1124467962 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Animation/AnimationOutputWeightProcessor.cs + data[161] (BuildReportPackedAssetInfo) + fileID (SInt64) 162 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 23040 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4055612234 + data[1] (unsigned int) 1202906334 + data[2] (unsigned int) 825883268 + data[3] (unsigned int) 1666190701 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/FontFeatureCommonGPOS.cs + data[162] (BuildReportPackedAssetInfo) + fileID (SInt64) 163 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 23152 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1266414938 + data[1] (unsigned int) 891593065 + data[2] (unsigned int) 4068613400 + data[3] (unsigned int) 1721713228 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_UpdateRegistery.cs + data[163] (BuildReportPackedAssetInfo) + fileID (SInt64) 164 + classID (Type*) 115 + packedSize (UInt64) 132 + offset (UInt64) 23264 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1581329498 + data[1] (unsigned int) 1117365832 + data[2] (unsigned int) 1942504370 + data[3] (unsigned int) 2515712334 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/HorizontalOrVerticalLayoutGroup.cs + data[164] (BuildReportPackedAssetInfo) + fileID (SInt64) 165 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 23408 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1239954026 + data[1] (unsigned int) 1081932581 + data[2] (unsigned int) 1983902351 + data[3] (unsigned int) 1419898649 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Graphic.cs + data[165] (BuildReportPackedAssetInfo) + fileID (SInt64) 166 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 23504 + sourceAssetGUID (GUID) + data[0] (unsigned int) 840810106 + data[1] (unsigned int) 1331509049 + data[2] (unsigned int) 1072000929 + data[3] (unsigned int) 1414493906 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/Signals/CustomSignalEventDrawer.cs + data[166] (BuildReportPackedAssetInfo) + fileID (SInt64) 167 + classID (Type*) 115 + packedSize (UInt64) 136 + offset (UInt64) 23632 + sourceAssetGUID (GUID) + data[0] (unsigned int) 759916970 + data[1] (unsigned int) 1335577429 + data[2] (unsigned int) 3967272109 + data[3] (unsigned int) 3459856179 + buildTimeAssetPath (string) Packages/com.unity.xr.legacyinputhelpers/Runtime/TrackedPoseDriver/BasePoseProvider.cs + data[167] (BuildReportPackedAssetInfo) + fileID (SInt64) 168 + classID (Type*) 115 + packedSize (UInt64) 128 + offset (UInt64) 23776 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1442881450 + data[1] (unsigned int) 1079410054 + data[2] (unsigned int) 3036883103 + data[3] (unsigned int) 155973397 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_DynamicFontAssetUtilities.cs + data[168] (BuildReportPackedAssetInfo) + fileID (SInt64) 169 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 23904 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3678474938 + data[1] (unsigned int) 2032420236 + data[2] (unsigned int) 4278022475 + data[3] (unsigned int) 21897118 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_StyleSheet.cs + data[169] (BuildReportPackedAssetInfo) + fileID (SInt64) 170 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 24000 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3180797370 + data[1] (unsigned int) 3031705421 + data[2] (unsigned int) 2004465705 + data[3] (unsigned int) 2024598814 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/ObjectId.cs + data[170] (BuildReportPackedAssetInfo) + fileID (SInt64) 171 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 24096 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2107718906 + data[1] (unsigned int) 1237848950 + data[2] (unsigned int) 3227708808 + data[3] (unsigned int) 3509438049 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/ITextPreProcessor.cs + data[171] (BuildReportPackedAssetInfo) + fileID (SInt64) 172 + classID (Type*) 115 + packedSize (UInt64) 128 + offset (UInt64) 24208 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1482014458 + data[1] (unsigned int) 1261873109 + data[2] (unsigned int) 3683609269 + data[3] (unsigned int) 539596153 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/TimeNotificationBehaviour.cs + data[172] (BuildReportPackedAssetInfo) + fileID (SInt64) 173 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 24336 + sourceAssetGUID (GUID) + data[0] (unsigned int) 954140699 + data[1] (unsigned int) 1155860481 + data[2] (unsigned int) 1415572413 + data[3] (unsigned int) 2168533517 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/EventData/AxisEventData.cs + data[173] (BuildReportPackedAssetInfo) + fileID (SInt64) 174 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 24448 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3656058155 + data[1] (unsigned int) 1267213659 + data[2] (unsigned int) 202513576 + data[3] (unsigned int) 1851358535 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Evaluation/ScheduleRuntimeClip.cs + data[174] (BuildReportPackedAssetInfo) + fileID (SInt64) 175 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 24560 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2083226955 + data[1] (unsigned int) 1289447711 + data[2] (unsigned int) 4193431941 + data[3] (unsigned int) 329079405 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_RichTextTagsCommon.cs + data[175] (BuildReportPackedAssetInfo) + fileID (SInt64) 176 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 24672 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1885595211 + data[1] (unsigned int) 1109138901 + data[2] (unsigned int) 583148682 + data[3] (unsigned int) 3206436840 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/SignalTrack.cs + data[176] (BuildReportPackedAssetInfo) + fileID (SInt64) 177 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 24768 + sourceAssetGUID (GUID) + data[0] (unsigned int) 562564955 + data[1] (unsigned int) 1193827970 + data[2] (unsigned int) 3118759811 + data[3] (unsigned int) 3442226103 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/IPropertyPreview.cs + data[177] (BuildReportPackedAssetInfo) + fileID (SInt64) 178 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 24880 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4157963883 + data[1] (unsigned int) 3890522404 + data[2] (unsigned int) 4106220009 + data[3] (unsigned int) 4182768728 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_LineInfo.cs + data[178] (BuildReportPackedAssetInfo) + fileID (SInt64) 179 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 24976 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2316382363 + data[1] (unsigned int) 1325446927 + data[2] (unsigned int) 4294098619 + data[3] (unsigned int) 1389896115 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/NotificationUtilities.cs + data[179] (BuildReportPackedAssetInfo) + fileID (SInt64) 180 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 25104 + sourceAssetGUID (GUID) + data[0] (unsigned int) 239315867 + data[1] (unsigned int) 1162119195 + data[2] (unsigned int) 659705023 + data[3] (unsigned int) 1186082310 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/SetPropertyUtility.cs + data[180] (BuildReportPackedAssetInfo) + fileID (SInt64) 181 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 25216 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1556500971 + data[1] (unsigned int) 1264610674 + data[2] (unsigned int) 3808742058 + data[3] (unsigned int) 3867227273 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/DirectorControlPlayable.cs + data[181] (BuildReportPackedAssetInfo) + fileID (SInt64) 182 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 25344 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4029577467 + data[1] (unsigned int) 1289765979 + data[2] (unsigned int) 1628721033 + data[3] (unsigned int) 2400789943 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/DefaultControls.cs + data[182] (BuildReportPackedAssetInfo) + fileID (SInt64) 183 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 25456 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1250458619 + data[1] (unsigned int) 1130574051 + data[2] (unsigned int) 2830455185 + data[3] (unsigned int) 396023679 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/CanvasUpdateRegistry.cs + data[183] (BuildReportPackedAssetInfo) + fileID (SInt64) 184 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 25568 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2909122043 + data[1] (unsigned int) 1211294520 + data[2] (unsigned int) 1036482202 + data[3] (unsigned int) 1665820572 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/TimelineAsset.cs + data[184] (BuildReportPackedAssetInfo) + fileID (SInt64) 185 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 25680 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1525069116 + data[1] (unsigned int) 1205632287 + data[2] (unsigned int) 826899630 + data[3] (unsigned int) 3228960702 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Attributes/TimelineHelpURLAttribute.cs + data[185] (BuildReportPackedAssetInfo) + fileID (SInt64) 186 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 25808 + sourceAssetGUID (GUID) + data[0] (unsigned int) 69506380 + data[1] (unsigned int) 1213608984 + data[2] (unsigned int) 1880943756 + data[3] (unsigned int) 2211094390 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Utility/VertexHelper.cs + data[186] (BuildReportPackedAssetInfo) + fileID (SInt64) 187 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 25904 + sourceAssetGUID (GUID) + data[0] (unsigned int) 751089996 + data[1] (unsigned int) 1095150128 + data[2] (unsigned int) 2306629295 + data[3] (unsigned int) 1836977437 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/Raycasters/PhysicsRaycaster.cs + data[187] (BuildReportPackedAssetInfo) + fileID (SInt64) 188 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 26016 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4047528044 + data[1] (unsigned int) 1171771168 + data[2] (unsigned int) 143802802 + data[3] (unsigned int) 2995922822 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Culling/RectangularVertexClipper.cs + data[188] (BuildReportPackedAssetInfo) + fileID (SInt64) 189 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 26144 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1315743596 + data[1] (unsigned int) 1324792752 + data[2] (unsigned int) 1236635815 + data[3] (unsigned int) 248055481 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/AnimationTriggers.cs + data[189] (BuildReportPackedAssetInfo) + fileID (SInt64) 190 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 26256 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1282699148 + data[1] (unsigned int) 1313253068 + data[2] (unsigned int) 387736491 + data[3] (unsigned int) 2057021543 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_TextProcessingCommon.cs + data[190] (BuildReportPackedAssetInfo) + fileID (SInt64) 191 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 26368 + sourceAssetGUID (GUID) + data[0] (unsigned int) 73996460 + data[1] (unsigned int) 428127071 + data[2] (unsigned int) 1953988537 + data[3] (unsigned int) 3844046660 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SelectionCaret.cs + data[191] (BuildReportPackedAssetInfo) + fileID (SInt64) 192 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 26480 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2839136188 + data[1] (unsigned int) 1127282184 + data[2] (unsigned int) 2177009329 + data[3] (unsigned int) 2163416272 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Layout/LayoutGroup.cs + data[192] (BuildReportPackedAssetInfo) + fileID (SInt64) 193 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 26576 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1401469628 + data[1] (unsigned int) 1244803728 + data[2] (unsigned int) 2094201219 + data[3] (unsigned int) 410808205 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/InputModules/PointerInputModule.cs + data[193] (BuildReportPackedAssetInfo) + fileID (SInt64) 194 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 26704 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2137038524 + data[1] (unsigned int) 1322943951 + data[2] (unsigned int) 901966766 + data[3] (unsigned int) 791994290 + buildTimeAssetPath (string) Assets/AssetDuplication/ReferenceMonoBehaviour.cs + data[194] (BuildReportPackedAssetInfo) + fileID (SInt64) 195 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 26816 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3482479596 + data[1] (unsigned int) 1295090022 + data[2] (unsigned int) 3125504144 + data[3] (unsigned int) 1814556651 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/IMask.cs + data[195] (BuildReportPackedAssetInfo) + fileID (SInt64) 196 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 26912 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2690576892 + data[1] (unsigned int) 1286271302 + data[2] (unsigned int) 3914314134 + data[3] (unsigned int) 859750971 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_PackageResourceImporter.cs + data[196] (BuildReportPackedAssetInfo) + fileID (SInt64) 197 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 27040 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1141619452 + data[1] (unsigned int) 1153066512 + data[2] (unsigned int) 1737010099 + data[3] (unsigned int) 2600334935 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/VertexModifiers/Shadow.cs + data[197] (BuildReportPackedAssetInfo) + fileID (SInt64) 198 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 27136 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1984987149 + data[1] (unsigned int) 1240711791 + data[2] (unsigned int) 690706364 + data[3] (unsigned int) 585712551 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/AnimatorBindingCache.cs + data[198] (BuildReportPackedAssetInfo) + fileID (SInt64) 199 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 27248 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4018412301 + data[1] (unsigned int) 1273601618 + data[2] (unsigned int) 625113528 + data[3] (unsigned int) 464204675 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/EventSystem/EventTrigger.cs + data[199] (BuildReportPackedAssetInfo) + fileID (SInt64) 200 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 27360 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3803687949 + data[1] (unsigned int) 1337083208 + data[2] (unsigned int) 2155387322 + data[3] (unsigned int) 3667384551 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/HashUtility.cs + data[200] (BuildReportPackedAssetInfo) + fileID (SInt64) 201 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 27456 + sourceAssetGUID (GUID) + data[0] (unsigned int) 368496397 + data[1] (unsigned int) 1288800888 + data[2] (unsigned int) 2951649687 + data[3] (unsigned int) 1402009325 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/GroupTrack.cs + data[201] (BuildReportPackedAssetInfo) + fileID (SInt64) 202 + classID (Type*) 115 + packedSize (UInt64) 92 + offset (UInt64) 27552 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2694093085 + data[1] (unsigned int) 1219672888 + data[2] (unsigned int) 3159976372 + data[3] (unsigned int) 4262507295 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/InputField.cs + data[202] (BuildReportPackedAssetInfo) + fileID (SInt64) 203 + classID (Type*) 115 + packedSize (UInt64) 128 + offset (UInt64) 27648 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1910825005 + data[1] (unsigned int) 1210738871 + data[2] (unsigned int) 2212319363 + data[3] (unsigned int) 615599945 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/ActivationControlPlayable.cs + data[203] (BuildReportPackedAssetInfo) + fileID (SInt64) 204 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 27776 + sourceAssetGUID (GUID) + data[0] (unsigned int) 852283693 + data[1] (unsigned int) 1275424104 + data[2] (unsigned int) 862189461 + data[3] (unsigned int) 2314315132 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Animation/AnimationTrack.cs + data[204] (BuildReportPackedAssetInfo) + fileID (SInt64) 205 + classID (Type*) 115 + packedSize (UInt64) 108 + offset (UInt64) 27888 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3318818621 + data[1] (unsigned int) 1172877222 + data[2] (unsigned int) 2868730261 + data[3] (unsigned int) 1732780973 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Extensions/TrackExtensions.cs + data[205] (BuildReportPackedAssetInfo) + fileID (SInt64) 206 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 28000 + sourceAssetGUID (GUID) + data[0] (unsigned int) 701673325 + data[1] (unsigned int) 1140044239 + data[2] (unsigned int) 1966375597 + data[3] (unsigned int) 3016331230 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/Signals/SignalAsset.cs + data[206] (BuildReportPackedAssetInfo) + fileID (SInt64) 207 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 28096 + sourceAssetGUID (GUID) + data[0] (unsigned int) 43666573 + data[1] (unsigned int) 1185681423 + data[2] (unsigned int) 3748520070 + data[3] (unsigned int) 896651867 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Audio/AudioMixerProperties.cs + data[207] (BuildReportPackedAssetInfo) + fileID (SInt64) 208 + classID (Type*) 115 + packedSize (UInt64) 112 + offset (UInt64) 28208 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2314759341 + data[1] (unsigned int) 778313466 + data[2] (unsigned int) 3769037115 + data[3] (unsigned int) 2550014510 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Extensions/SelectionExtensions.cs + data[208] (BuildReportPackedAssetInfo) + fileID (SInt64) 209 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 28320 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3297191117 + data[1] (unsigned int) 1275884575 + data[2] (unsigned int) 2486208168 + data[3] (unsigned int) 2575851951 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/GraphicRaycaster.cs + data[209] (BuildReportPackedAssetInfo) + fileID (SInt64) 210 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 28432 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3650770462 + data[1] (unsigned int) 1308738888 + data[2] (unsigned int) 3863343278 + data[3] (unsigned int) 1214833221 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Activation/ActivationMixerPlayable.cs + data[210] (BuildReportPackedAssetInfo) + fileID (SInt64) 211 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 28560 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3983833374 + data[1] (unsigned int) 1185719795 + data[2] (unsigned int) 1944791970 + data[3] (unsigned int) 1757357886 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/VertexModifiers/Outline.cs + data[211] (BuildReportPackedAssetInfo) + fileID (SInt64) 212 + classID (Type*) 115 + packedSize (UInt64) 88 + offset (UInt64) 28656 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1406054702 + data[1] (unsigned int) 2453973071 + data[2] (unsigned int) 3844805016 + data[3] (unsigned int) 1052792282 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_MeshInfo.cs + data[212] (BuildReportPackedAssetInfo) + fileID (SInt64) 213 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 28752 + sourceAssetGUID (GUID) + data[0] (unsigned int) 4077768494 + data[1] (unsigned int) 495196439 + data[2] (unsigned int) 3324775721 + data[3] (unsigned int) 3283570687 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/CurveEditUtility.cs + data[213] (BuildReportPackedAssetInfo) + fileID (SInt64) 214 + classID (Type*) 115 + packedSize (UInt64) 136 + offset (UInt64) 28864 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3977973326 + data[1] (unsigned int) 3489984161 + data[2] (unsigned int) 925163032 + data[3] (unsigned int) 847765825 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_SpriteAssetImportFormats.cs + data[214] (BuildReportPackedAssetInfo) + fileID (SInt64) 215 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 29008 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2704200286 + data[1] (unsigned int) 1155361570 + data[2] (unsigned int) 2408696988 + data[3] (unsigned int) 2500160513 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Events/Signals/SignalReceiver.cs + data[215] (BuildReportPackedAssetInfo) + fileID (SInt64) 216 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 29120 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2875310958 + data[1] (unsigned int) 4023697929 + data[2] (unsigned int) 3370303387 + data[3] (unsigned int) 1949426945 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/BlendUtility.cs + data[216] (BuildReportPackedAssetInfo) + fileID (SInt64) 217 + classID (Type*) 115 + packedSize (UInt64) 104 + offset (UInt64) 29216 + sourceAssetGUID (GUID) + data[0] (unsigned int) 995121790 + data[1] (unsigned int) 1105429012 + data[2] (unsigned int) 879290006 + data[3] (unsigned int) 2661397923 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/WeightUtility.cs + data[217] (BuildReportPackedAssetInfo) + fileID (SInt64) 218 + classID (Type*) 115 + packedSize (UInt64) 148 + offset (UInt64) 29328 + sourceAssetGUID (GUID) + data[0] (unsigned int) 336017358 + data[1] (unsigned int) 3047476958 + data[2] (unsigned int) 2740551481 + data[3] (unsigned int) 1626992630 + buildTimeAssetPath (string) Packages/com.unity.multiplayer.center/Common/SelectedSolutionsData.cs + data[218] (BuildReportPackedAssetInfo) + fileID (SInt64) 219 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 29488 + sourceAssetGUID (GUID) + data[0] (unsigned int) 510115838 + data[1] (unsigned int) 4283742009 + data[2] (unsigned int) 1582628264 + data[3] (unsigned int) 4236297377 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMPro_MeshUtilities.cs + data[219] (BuildReportPackedAssetInfo) + fileID (SInt64) 220 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 29600 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3187181135 + data[1] (unsigned int) 1933840343 + data[2] (unsigned int) 2608942058 + data[3] (unsigned int) 1557226262 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TextMeshProUGUI.cs + data[220] (BuildReportPackedAssetInfo) + fileID (SInt64) 221 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 29696 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2111713391 + data[1] (unsigned int) 1332958049 + data[2] (unsigned int) 2195354260 + data[3] (unsigned int) 1386692992 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/ParticleControlPlayable.cs + data[221] (BuildReportPackedAssetInfo) + fileID (SInt64) 222 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 29824 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2673564015 + data[1] (unsigned int) 990168340 + data[2] (unsigned int) 2927070889 + data[3] (unsigned int) 3868988671 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_FontAssetCommon.cs + data[222] (BuildReportPackedAssetInfo) + fileID (SInt64) 223 + classID (Type*) 115 + packedSize (UInt64) 96 + offset (UInt64) 29936 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2541655935 + data[1] (unsigned int) 1254470253 + data[2] (unsigned int) 1663588025 + data[3] (unsigned int) 3578295100 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Utilities/TimeUtility.cs + data[223] (BuildReportPackedAssetInfo) + fileID (SInt64) 224 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 30032 + sourceAssetGUID (GUID) + data[0] (unsigned int) 3240159951 + data[1] (unsigned int) 1207750147 + data[2] (unsigned int) 417636503 + data[3] (unsigned int) 2445777590 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Utility/ReflectionMethodsCache.cs + data[224] (BuildReportPackedAssetInfo) + fileID (SInt64) 225 + classID (Type*) 115 + packedSize (UInt64) 120 + offset (UInt64) 30160 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2771193567 + data[1] (unsigned int) 1300844657 + data[2] (unsigned int) 484028582 + data[3] (unsigned int) 1517442230 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Activation/ActivationPlayableAsset.cs + data[225] (BuildReportPackedAssetInfo) + fileID (SInt64) 226 + classID (Type*) 115 + packedSize (UInt64) 116 + offset (UInt64) 30288 + sourceAssetGUID (GUID) + data[0] (unsigned int) 192557295 + data[1] (unsigned int) 1296725419 + data[2] (unsigned int) 1916562312 + data[3] (unsigned int) 1396466154 + buildTimeAssetPath (string) Packages/com.unity.timeline/Runtime/Playables/BasicScriptPlayable.cs + data[226] (BuildReportPackedAssetInfo) + fileID (SInt64) 227 + classID (Type*) 115 + packedSize (UInt64) 84 + offset (UInt64) 30416 + sourceAssetGUID (GUID) + data[0] (unsigned int) 504133871 + data[1] (unsigned int) 1306788556 + data[2] (unsigned int) 2268806568 + data[3] (unsigned int) 3488169732 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/UGUI/UI/Core/Image.cs + data[227] (BuildReportPackedAssetInfo) + fileID (SInt64) 228 + classID (Type*) 115 + packedSize (UInt64) 100 + offset (UInt64) 30512 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1890142959 + data[1] (unsigned int) 2309243395 + data[2] (unsigned int) 2138571259 + data[3] (unsigned int) 2315340204 + buildTimeAssetPath (string) Packages/com.unity.ugui/Runtime/TMP/TMP_ShaderUtilities.cs + data[228] (BuildReportPackedAssetInfo) + fileID (SInt64) 229 + classID (Type*) 213 + packedSize (UInt64) 420 + offset (UInt64) 31504 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Built-in Sprite: + +ID: -4211197064891926221 (ClassID: 1126) PackedAssets + m_ShortPath (string) sharedassets0.assets.resS + m_Overhead (UInt64) 13 + m_Contents (vector) + Array[2] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 28 + packedSize (UInt64) 524288 + offset (UInt64) 0 + sourceAssetGUID (GUID) + data[0] (unsigned int) 1179607688 + data[1] (unsigned int) 1278849281 + data[2] (unsigned int) 1374027963 + data[3] (unsigned int) 1900018330 + buildTimeAssetPath (string) Assets/Sprites/Snow.jpg + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 28 + packedSize (UInt64) 151875 + offset (UInt64) 524288 + sourceAssetGUID (GUID) + data[0] (unsigned int) 2731658232 + data[1] (unsigned int) 1324654785 + data[2] (unsigned int) 2360135852 + data[3] (unsigned int) 2253774587 + buildTimeAssetPath (string) Assets/Sprites/red.png + +ID: -2209428987046021830 (ClassID: 641289076) AudioBuildInfo + m_IsAudioDisabled (bool) False + m_AudioClipCount (int) 1 + m_AudioMixerCount (int) 0 + +ID: -837533726333199562 (ClassID: 1126) PackedAssets + m_ShortPath (string) sharedassets1.resource + m_Overhead (UInt64) 0 + m_Contents (vector) + Array[1] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 83 + packedSize (UInt64) 18496 + offset (UInt64) 0 + sourceAssetGUID (GUID) + data[0] (unsigned int) 510047344 + data[1] (unsigned int) 1200191226 + data[2] (unsigned int) 2021230213 + data[3] (unsigned int) 2122331027 + buildTimeAssetPath (string) Assets/audio/audio.mp3 + +ID: 1 (ClassID: 1125) BuildReport + m_ObjectHideFlags (unsigned int) 0 + m_CorrespondingSourceObject (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_PrefabInstance (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_PrefabAsset (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_Name (string) New Report + m_Summary (BuildSummary) + buildStartTime (DateTime) + ticks (SInt64) 639026101805010432 + buildGUID (GUID) + data[0] (unsigned int) 1816015996 + data[1] (unsigned int) 1779718668 + data[2] (unsigned int) 3322342121 + data[3] (unsigned int) 3828488599 + platformName (string) Win64 + platformGroupName (string) Standalone + subtarget (int) 2 + options (int) 137 + assetBundleOptions (int) 0 + outputPath (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject.exe + crc (unsigned int) 0 + totalSize (UInt64) 263323536 + totalTimeTicks (UInt64) 58976739 + totalErrors (int) 0 + totalWarnings (int) 0 + buildType (int) 1 + buildResult (int) 1 + multiProcessEnabled (bool) False + m_Files (vector) + Array[226] + data[0] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/globalgamemanagers + role (string) globalgamemanagers + id (unsigned int) 0 + totalSize (UInt64) 35636 + data[1] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/globalgamemanagers.assets + role (string) assets + id (unsigned int) 1 + totalSize (UInt64) 31924 + data[2] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/globalgamemanagers.assets.resS + role (string) resS + id (unsigned int) 2 + totalSize (UInt64) 2798288 + data[3] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/level0 + role (string) level0 + id (unsigned int) 3 + totalSize (UInt64) 2184 + data[4] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/level1 + role (string) level1 + id (unsigned int) 4 + totalSize (UInt64) 3384 + data[5] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Resources/unity_builtin_extra + role (string) unity_builtin_extra + id (unsigned int) 5 + totalSize (UInt64) 368772 + data[6] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/RuntimeInitializeOnLoads.json + role (string) json + id (unsigned int) 6 + totalSize (UInt64) 703 + data[7] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/ScriptingAssemblies.json + role (string) json + id (unsigned int) 7 + totalSize (UInt64) 3074 + data[8] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/sharedassets0.assets + role (string) assets + id (unsigned int) 8 + totalSize (UInt64) 1708 + data[9] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/sharedassets0.assets.resS + role (string) resS + id (unsigned int) 9 + totalSize (UInt64) 676176 + data[10] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/sharedassets1.assets + role (string) assets + id (unsigned int) 10 + totalSize (UInt64) 58460 + data[11] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/sharedassets1.resource + role (string) resource + id (unsigned int) 11 + totalSize (UInt64) 18496 + data[12] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/boot.config + role (string) config + id (unsigned int) 12 + totalSize (UInt64) 431 + data[13] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Assembly-CSharp.dll + role (string) dll + id (unsigned int) 13 + totalSize (UInt64) 5120 + data[14] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Mono.Security.dll + role (string) dll + id (unsigned int) 14 + totalSize (UInt64) 241152 + data[15] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/mscorlib.dll + role (string) dll + id (unsigned int) 15 + totalSize (UInt64) 4632064 + data[16] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/netstandard.dll + role (string) dll + id (unsigned int) 16 + totalSize (UInt64) 90112 + data[17] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.ComponentModel.Composition.dll + role (string) dll + id (unsigned int) 17 + totalSize (UInt64) 257024 + data[18] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Configuration.dll + role (string) dll + id (unsigned int) 18 + totalSize (UInt64) 124928 + data[19] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Core.dll + role (string) dll + id (unsigned int) 19 + totalSize (UInt64) 1113088 + data[20] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Data.DataSetExtensions.dll + role (string) dll + id (unsigned int) 20 + totalSize (UInt64) 29696 + data[21] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Data.dll + role (string) dll + id (unsigned int) 21 + totalSize (UInt64) 2125312 + data[22] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.dll + role (string) dll + id (unsigned int) 22 + totalSize (UInt64) 2641920 + data[23] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Drawing.dll + role (string) dll + id (unsigned int) 23 + totalSize (UInt64) 489984 + data[24] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.EnterpriseServices.dll + role (string) dll + id (unsigned int) 24 + totalSize (UInt64) 44544 + data[25] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.IO.Compression.dll + role (string) dll + id (unsigned int) 25 + totalSize (UInt64) 114688 + data[26] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.IO.Compression.FileSystem.dll + role (string) dll + id (unsigned int) 26 + totalSize (UInt64) 18432 + data[27] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Net.Http.dll + role (string) dll + id (unsigned int) 27 + totalSize (UInt64) 122880 + data[28] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Numerics.dll + role (string) dll + id (unsigned int) 28 + totalSize (UInt64) 119296 + data[29] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Runtime.Serialization.dll + role (string) dll + id (unsigned int) 29 + totalSize (UInt64) 934400 + data[30] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Security.dll + role (string) dll + id (unsigned int) 30 + totalSize (UInt64) 320000 + data[31] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.ServiceModel.Internals.dll + role (string) dll + id (unsigned int) 31 + totalSize (UInt64) 215040 + data[32] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Transactions.dll + role (string) dll + id (unsigned int) 32 + totalSize (UInt64) 35328 + data[33] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Xml.dll + role (string) dll + id (unsigned int) 33 + totalSize (UInt64) 3160064 + data[34] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/System.Xml.Linq.dll + role (string) dll + id (unsigned int) 34 + totalSize (UInt64) 136704 + data[35] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.AI.Navigation.dll + role (string) dll + id (unsigned int) 35 + totalSize (UInt64) 26112 + data[36] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.Multiplayer.Center.Common.dll + role (string) dll + id (unsigned int) 36 + totalSize (UInt64) 10752 + data[37] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.TextMeshPro.dll + role (string) dll + id (unsigned int) 37 + totalSize (UInt64) 506880 + data[38] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.Timeline.dll + role (string) dll + id (unsigned int) 38 + totalSize (UInt64) 148992 + data[39] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AccessibilityModule.dll + role (string) dll + id (unsigned int) 39 + totalSize (UInt64) 42496 + data[40] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AIModule.dll + role (string) dll + id (unsigned int) 40 + totalSize (UInt64) 62976 + data[41] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AMDModule.dll + role (string) dll + id (unsigned int) 41 + totalSize (UInt64) 11264 + data[42] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AndroidJNIModule.dll + role (string) dll + id (unsigned int) 42 + totalSize (UInt64) 105984 + data[43] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AnimationModule.dll + role (string) dll + id (unsigned int) 43 + totalSize (UInt64) 203776 + data[44] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ARModule.dll + role (string) dll + id (unsigned int) 44 + totalSize (UInt64) 11776 + data[45] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AssetBundleModule.dll + role (string) dll + id (unsigned int) 45 + totalSize (UInt64) 28160 + data[46] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AudioModule.dll + role (string) dll + id (unsigned int) 46 + totalSize (UInt64) 92672 + data[47] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ClothModule.dll + role (string) dll + id (unsigned int) 47 + totalSize (UInt64) 22528 + data[48] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ClusterInputModule.dll + role (string) dll + id (unsigned int) 48 + totalSize (UInt64) 13824 + data[49] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ClusterRendererModule.dll + role (string) dll + id (unsigned int) 49 + totalSize (UInt64) 12800 + data[50] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ContentLoadModule.dll + role (string) dll + id (unsigned int) 50 + totalSize (UInt64) 18432 + data[51] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.CoreModule.dll + role (string) dll + id (unsigned int) 51 + totalSize (UInt64) 1787392 + data[52] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.CrashReportingModule.dll + role (string) dll + id (unsigned int) 52 + totalSize (UInt64) 12800 + data[53] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.DirectorModule.dll + role (string) dll + id (unsigned int) 53 + totalSize (UInt64) 27648 + data[54] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.dll + role (string) dll + id (unsigned int) 54 + totalSize (UInt64) 159744 + data[55] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.DSPGraphModule.dll + role (string) dll + id (unsigned int) 55 + totalSize (UInt64) 19968 + data[56] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GameCenterModule.dll + role (string) dll + id (unsigned int) 56 + totalSize (UInt64) 31744 + data[57] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GIModule.dll + role (string) dll + id (unsigned int) 57 + totalSize (UInt64) 10240 + data[58] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GraphicsStateCollectionSerializerModule.dll + role (string) dll + id (unsigned int) 58 + totalSize (UInt64) 3584 + data[59] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GridModule.dll + role (string) dll + id (unsigned int) 59 + totalSize (UInt64) 16384 + data[60] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.HierarchyCoreModule.dll + role (string) dll + id (unsigned int) 60 + totalSize (UInt64) 80896 + data[61] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.HotReloadModule.dll + role (string) dll + id (unsigned int) 61 + totalSize (UInt64) 10240 + data[62] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ImageConversionModule.dll + role (string) dll + id (unsigned int) 62 + totalSize (UInt64) 17408 + data[63] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.IMGUIModule.dll + role (string) dll + id (unsigned int) 63 + totalSize (UInt64) 196096 + data[64] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.InputForUIModule.dll + role (string) dll + id (unsigned int) 64 + totalSize (UInt64) 46592 + data[65] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.InputLegacyModule.dll + role (string) dll + id (unsigned int) 65 + totalSize (UInt64) 31744 + data[66] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.InputModule.dll + role (string) dll + id (unsigned int) 66 + totalSize (UInt64) 14336 + data[67] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.JSONSerializeModule.dll + role (string) dll + id (unsigned int) 67 + totalSize (UInt64) 13312 + data[68] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.LocalizationModule.dll + role (string) dll + id (unsigned int) 68 + totalSize (UInt64) 12800 + data[69] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.MarshallingModule.dll + role (string) dll + id (unsigned int) 69 + totalSize (UInt64) 53760 + data[70] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.MultiplayerModule.dll + role (string) dll + id (unsigned int) 70 + totalSize (UInt64) 5120 + data[71] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.NVIDIAModule.dll + role (string) dll + id (unsigned int) 71 + totalSize (UInt64) 24576 + data[72] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ParticleSystemModule.dll + role (string) dll + id (unsigned int) 72 + totalSize (UInt64) 156160 + data[73] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.PerformanceReportingModule.dll + role (string) dll + id (unsigned int) 73 + totalSize (UInt64) 11264 + data[74] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.Physics2DModule.dll + role (string) dll + id (unsigned int) 74 + totalSize (UInt64) 190464 + data[75] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.PhysicsModule.dll + role (string) dll + id (unsigned int) 75 + totalSize (UInt64) 172544 + data[76] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.PropertiesModule.dll + role (string) dll + id (unsigned int) 76 + totalSize (UInt64) 138752 + data[77] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + role (string) dll + id (unsigned int) 77 + totalSize (UInt64) 10752 + data[78] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ScreenCaptureModule.dll + role (string) dll + id (unsigned int) 78 + totalSize (UInt64) 12288 + data[79] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ShaderVariantAnalyticsModule.dll + role (string) dll + id (unsigned int) 79 + totalSize (UInt64) 10752 + data[80] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SharedInternalsModule.dll + role (string) dll + id (unsigned int) 80 + totalSize (UInt64) 21504 + data[81] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SpatialTracking.dll + role (string) dll + id (unsigned int) 81 + totalSize (UInt64) 12288 + data[82] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SpriteMaskModule.dll + role (string) dll + id (unsigned int) 82 + totalSize (UInt64) 14336 + data[83] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SpriteShapeModule.dll + role (string) dll + id (unsigned int) 83 + totalSize (UInt64) 17920 + data[84] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.StreamingModule.dll + role (string) dll + id (unsigned int) 84 + totalSize (UInt64) 11776 + data[85] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SubstanceModule.dll + role (string) dll + id (unsigned int) 85 + totalSize (UInt64) 15360 + data[86] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SubsystemsModule.dll + role (string) dll + id (unsigned int) 86 + totalSize (UInt64) 27648 + data[87] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TerrainModule.dll + role (string) dll + id (unsigned int) 87 + totalSize (UInt64) 119296 + data[88] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TerrainPhysicsModule.dll + role (string) dll + id (unsigned int) 88 + totalSize (UInt64) 11776 + data[89] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TextCoreFontEngineModule.dll + role (string) dll + id (unsigned int) 89 + totalSize (UInt64) 74240 + data[90] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TextCoreTextEngineModule.dll + role (string) dll + id (unsigned int) 90 + totalSize (UInt64) 292352 + data[91] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TextRenderingModule.dll + role (string) dll + id (unsigned int) 91 + totalSize (UInt64) 35328 + data[92] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TilemapModule.dll + role (string) dll + id (unsigned int) 92 + totalSize (UInt64) 44032 + data[93] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TLSModule.dll + role (string) dll + id (unsigned int) 93 + totalSize (UInt64) 17408 + data[94] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UI.dll + role (string) dll + id (unsigned int) 94 + totalSize (UInt64) 298496 + data[95] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UIElementsModule.dll + role (string) dll + id (unsigned int) 95 + totalSize (UInt64) 2063872 + data[96] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UIModule.dll + role (string) dll + id (unsigned int) 96 + totalSize (UInt64) 34816 + data[97] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UmbraModule.dll + role (string) dll + id (unsigned int) 97 + totalSize (UInt64) 10240 + data[98] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityAnalyticsCommonModule.dll + role (string) dll + id (unsigned int) 98 + totalSize (UInt64) 21504 + data[99] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityAnalyticsModule.dll + role (string) dll + id (unsigned int) 99 + totalSize (UInt64) 46592 + data[100] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityConnectModule.dll + role (string) dll + id (unsigned int) 100 + totalSize (UInt64) 13312 + data[101] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityCurlModule.dll + role (string) dll + id (unsigned int) 101 + totalSize (UInt64) 12288 + data[102] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityTestProtocolModule.dll + role (string) dll + id (unsigned int) 102 + totalSize (UInt64) 10752 + data[103] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll + role (string) dll + id (unsigned int) 103 + totalSize (UInt64) 14848 + data[104] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll + role (string) dll + id (unsigned int) 104 + totalSize (UInt64) 14336 + data[105] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestModule.dll + role (string) dll + id (unsigned int) 105 + totalSize (UInt64) 55296 + data[106] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll + role (string) dll + id (unsigned int) 106 + totalSize (UInt64) 13824 + data[107] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll + role (string) dll + id (unsigned int) 107 + totalSize (UInt64) 22528 + data[108] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VehiclesModule.dll + role (string) dll + id (unsigned int) 108 + totalSize (UInt64) 17408 + data[109] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VFXModule.dll + role (string) dll + id (unsigned int) 109 + totalSize (UInt64) 64000 + data[110] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VideoModule.dll + role (string) dll + id (unsigned int) 110 + totalSize (UInt64) 44544 + data[111] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VirtualTexturingModule.dll + role (string) dll + id (unsigned int) 111 + totalSize (UInt64) 29184 + data[112] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VRModule.dll + role (string) dll + id (unsigned int) 112 + totalSize (UInt64) 17408 + data[113] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.WindModule.dll + role (string) dll + id (unsigned int) 113 + totalSize (UInt64) 12800 + data[114] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.XR.LegacyInputHelpers.dll + role (string) dll + id (unsigned int) 114 + totalSize (UInt64) 25088 + data[115] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.XRModule.dll + role (string) dll + id (unsigned int) 115 + totalSize (UInt64) 73728 + data[116] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Assembly-CSharp.pdb + role (string) pdb + id (unsigned int) 116 + totalSize (UInt64) 16376 + data[117] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.AI.Navigation.pdb + role (string) pdb + id (unsigned int) 117 + totalSize (UInt64) 25272 + data[118] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.Multiplayer.Center.Common.pdb + role (string) pdb + id (unsigned int) 118 + totalSize (UInt64) 17628 + data[119] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.TextMeshPro.pdb + role (string) pdb + id (unsigned int) 119 + totalSize (UInt64) 256336 + data[120] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/Unity.Timeline.pdb + role (string) pdb + id (unsigned int) 120 + totalSize (UInt64) 90272 + data[121] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AccessibilityModule.pdb + role (string) pdb + id (unsigned int) 121 + totalSize (UInt64) 25048 + data[122] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AIModule.pdb + role (string) pdb + id (unsigned int) 122 + totalSize (UInt64) 20392 + data[123] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AMDModule.pdb + role (string) pdb + id (unsigned int) 123 + totalSize (UInt64) 11784 + data[124] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AndroidJNIModule.pdb + role (string) pdb + id (unsigned int) 124 + totalSize (UInt64) 49676 + data[125] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AnimationModule.pdb + role (string) pdb + id (unsigned int) 125 + totalSize (UInt64) 58372 + data[126] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ARModule.pdb + role (string) pdb + id (unsigned int) 126 + totalSize (UInt64) 9768 + data[127] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AssetBundleModule.pdb + role (string) pdb + id (unsigned int) 127 + totalSize (UInt64) 13896 + data[128] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.AudioModule.pdb + role (string) pdb + id (unsigned int) 128 + totalSize (UInt64) 23724 + data[129] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ClothModule.pdb + role (string) pdb + id (unsigned int) 129 + totalSize (UInt64) 10360 + data[130] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ClusterInputModule.pdb + role (string) pdb + id (unsigned int) 130 + totalSize (UInt64) 9156 + data[131] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ClusterRendererModule.pdb + role (string) pdb + id (unsigned int) 131 + totalSize (UInt64) 9756 + data[132] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ContentLoadModule.pdb + role (string) pdb + id (unsigned int) 132 + totalSize (UInt64) 10928 + data[133] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.CoreModule.pdb + role (string) pdb + id (unsigned int) 133 + totalSize (UInt64) 523876 + data[134] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.CrashReportingModule.pdb + role (string) pdb + id (unsigned int) 134 + totalSize (UInt64) 9700 + data[135] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.DirectorModule.pdb + role (string) pdb + id (unsigned int) 135 + totalSize (UInt64) 13664 + data[136] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.DSPGraphModule.pdb + role (string) pdb + id (unsigned int) 136 + totalSize (UInt64) 10300 + data[137] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GameCenterModule.pdb + role (string) pdb + id (unsigned int) 137 + totalSize (UInt64) 17240 + data[138] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GIModule.pdb + role (string) pdb + id (unsigned int) 138 + totalSize (UInt64) 9036 + data[139] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GraphicsStateCollectionSerializerModule.pdb + role (string) pdb + id (unsigned int) 139 + totalSize (UInt64) 9064 + data[140] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.GridModule.pdb + role (string) pdb + id (unsigned int) 140 + totalSize (UInt64) 9784 + data[141] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.HierarchyCoreModule.pdb + role (string) pdb + id (unsigned int) 141 + totalSize (UInt64) 31420 + data[142] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.HotReloadModule.pdb + role (string) pdb + id (unsigned int) 142 + totalSize (UInt64) 9036 + data[143] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ImageConversionModule.pdb + role (string) pdb + id (unsigned int) 143 + totalSize (UInt64) 10372 + data[144] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.IMGUIModule.pdb + role (string) pdb + id (unsigned int) 144 + totalSize (UInt64) 89156 + data[145] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.InputForUIModule.pdb + role (string) pdb + id (unsigned int) 145 + totalSize (UInt64) 25784 + data[146] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.InputLegacyModule.pdb + role (string) pdb + id (unsigned int) 146 + totalSize (UInt64) 15136 + data[147] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.InputModule.pdb + role (string) pdb + id (unsigned int) 147 + totalSize (UInt64) 10392 + data[148] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.JSONSerializeModule.pdb + role (string) pdb + id (unsigned int) 148 + totalSize (UInt64) 9652 + data[149] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.LocalizationModule.pdb + role (string) pdb + id (unsigned int) 149 + totalSize (UInt64) 9448 + data[150] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.MarshallingModule.pdb + role (string) pdb + id (unsigned int) 150 + totalSize (UInt64) 12480 + data[151] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.MultiplayerModule.pdb + role (string) pdb + id (unsigned int) 151 + totalSize (UInt64) 9060 + data[152] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.NVIDIAModule.pdb + role (string) pdb + id (unsigned int) 152 + totalSize (UInt64) 15460 + data[153] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ParticleSystemModule.pdb + role (string) pdb + id (unsigned int) 153 + totalSize (UInt64) 39964 + data[154] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.pdb + role (string) pdb + id (unsigned int) 154 + totalSize (UInt64) 12116 + data[155] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.PerformanceReportingModule.pdb + role (string) pdb + id (unsigned int) 155 + totalSize (UInt64) 9240 + data[156] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.Physics2DModule.pdb + role (string) pdb + id (unsigned int) 156 + totalSize (UInt64) 48312 + data[157] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.PhysicsModule.pdb + role (string) pdb + id (unsigned int) 157 + totalSize (UInt64) 47248 + data[158] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.PropertiesModule.pdb + role (string) pdb + id (unsigned int) 158 + totalSize (UInt64) 58716 + data[159] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.pdb + role (string) pdb + id (unsigned int) 159 + totalSize (UInt64) 9096 + data[160] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ScreenCaptureModule.pdb + role (string) pdb + id (unsigned int) 160 + totalSize (UInt64) 9632 + data[161] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.ShaderVariantAnalyticsModule.pdb + role (string) pdb + id (unsigned int) 161 + totalSize (UInt64) 9160 + data[162] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SharedInternalsModule.pdb + role (string) pdb + id (unsigned int) 162 + totalSize (UInt64) 13452 + data[163] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SpatialTracking.pdb + role (string) pdb + id (unsigned int) 163 + totalSize (UInt64) 18920 + data[164] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SpriteMaskModule.pdb + role (string) pdb + id (unsigned int) 164 + totalSize (UInt64) 9368 + data[165] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SpriteShapeModule.pdb + role (string) pdb + id (unsigned int) 165 + totalSize (UInt64) 10592 + data[166] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.StreamingModule.pdb + role (string) pdb + id (unsigned int) 166 + totalSize (UInt64) 9112 + data[167] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SubstanceModule.pdb + role (string) pdb + id (unsigned int) 167 + totalSize (UInt64) 11232 + data[168] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.SubsystemsModule.pdb + role (string) pdb + id (unsigned int) 168 + totalSize (UInt64) 15744 + data[169] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TerrainModule.pdb + role (string) pdb + id (unsigned int) 169 + totalSize (UInt64) 33664 + data[170] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TerrainPhysicsModule.pdb + role (string) pdb + id (unsigned int) 170 + totalSize (UInt64) 9496 + data[171] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TextCoreFontEngineModule.pdb + role (string) pdb + id (unsigned int) 171 + totalSize (UInt64) 28088 + data[172] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TextCoreTextEngineModule.pdb + role (string) pdb + id (unsigned int) 172 + totalSize (UInt64) 134900 + data[173] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TextRenderingModule.pdb + role (string) pdb + id (unsigned int) 173 + totalSize (UInt64) 15160 + data[174] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TilemapModule.pdb + role (string) pdb + id (unsigned int) 174 + totalSize (UInt64) 18756 + data[175] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.TLSModule.pdb + role (string) pdb + id (unsigned int) 175 + totalSize (UInt64) 9056 + data[176] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UI.pdb + role (string) pdb + id (unsigned int) 176 + totalSize (UInt64) 181520 + data[177] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UIElementsModule.pdb + role (string) pdb + id (unsigned int) 177 + totalSize (UInt64) 919012 + data[178] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UIModule.pdb + role (string) pdb + id (unsigned int) 178 + totalSize (UInt64) 13576 + data[179] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UmbraModule.pdb + role (string) pdb + id (unsigned int) 179 + totalSize (UInt64) 9036 + data[180] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityAnalyticsCommonModule.pdb + role (string) pdb + id (unsigned int) 180 + totalSize (UInt64) 13484 + data[181] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityAnalyticsModule.pdb + role (string) pdb + id (unsigned int) 181 + totalSize (UInt64) 17744 + data[182] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityConnectModule.pdb + role (string) pdb + id (unsigned int) 182 + totalSize (UInt64) 9628 + data[183] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityCurlModule.pdb + role (string) pdb + id (unsigned int) 183 + totalSize (UInt64) 9420 + data[184] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityTestProtocolModule.pdb + role (string) pdb + id (unsigned int) 184 + totalSize (UInt64) 9096 + data[185] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.pdb + role (string) pdb + id (unsigned int) 185 + totalSize (UInt64) 10600 + data[186] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestAudioModule.pdb + role (string) pdb + id (unsigned int) 186 + totalSize (UInt64) 10404 + data[187] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestModule.pdb + role (string) pdb + id (unsigned int) 187 + totalSize (UInt64) 28084 + data[188] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestTextureModule.pdb + role (string) pdb + id (unsigned int) 188 + totalSize (UInt64) 10568 + data[189] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.UnityWebRequestWWWModule.pdb + role (string) pdb + id (unsigned int) 189 + totalSize (UInt64) 13468 + data[190] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VehiclesModule.pdb + role (string) pdb + id (unsigned int) 190 + totalSize (UInt64) 10272 + data[191] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VFXModule.pdb + role (string) pdb + id (unsigned int) 191 + totalSize (UInt64) 18532 + data[192] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VideoModule.pdb + role (string) pdb + id (unsigned int) 192 + totalSize (UInt64) 13936 + data[193] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VirtualTexturingModule.pdb + role (string) pdb + id (unsigned int) 193 + totalSize (UInt64) 13276 + data[194] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.VRModule.pdb + role (string) pdb + id (unsigned int) 194 + totalSize (UInt64) 10156 + data[195] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.WindModule.pdb + role (string) pdb + id (unsigned int) 195 + totalSize (UInt64) 9172 + data[196] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.XR.LegacyInputHelpers.pdb + role (string) pdb + id (unsigned int) 196 + totalSize (UInt64) 25224 + data[197] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Managed/UnityEngine.XRModule.pdb + role (string) pdb + id (unsigned int) 197 + totalSize (UInt64) 24004 + data[198] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/app.info + role (string) info + id (unsigned int) 198 + totalSize (UInt64) 26 + data[199] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject_Data/Resources/unity default resources + role (string) unity default resources + id (unsigned int) 199 + totalSize (UInt64) 5858500 + data[200] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/TestProject.exe + role (string) exe + id (unsigned int) 200 + totalSize (UInt64) 672256 + data[201] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll + role (string) dll + id (unsigned int) 201 + totalSize (UInt64) 7820288 + data[202] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll + role (string) dll + id (unsigned int) 202 + totalSize (UInt64) 600576 + data[203] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/2.0/Browsers/Compat.browser + role (string) browser + id (unsigned int) 203 + totalSize (UInt64) 1605 + data[204] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx + role (string) aspx + id (unsigned int) 204 + totalSize (UInt64) 60575 + data[205] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/2.0/machine.config + role (string) config + id (unsigned int) 205 + totalSize (UInt64) 29066 + data[206] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/2.0/settings.map + role (string) map + id (unsigned int) 206 + totalSize (UInt64) 2622 + data[207] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/2.0/web.config + role (string) config + id (unsigned int) 207 + totalSize (UInt64) 11635 + data[208] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.0/Browsers/Compat.browser + role (string) browser + id (unsigned int) 208 + totalSize (UInt64) 1605 + data[209] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx + role (string) aspx + id (unsigned int) 209 + totalSize (UInt64) 60575 + data[210] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.0/machine.config + role (string) config + id (unsigned int) 210 + totalSize (UInt64) 33598 + data[211] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.0/settings.map + role (string) map + id (unsigned int) 211 + totalSize (UInt64) 2622 + data[212] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.0/web.config + role (string) config + id (unsigned int) 212 + totalSize (UInt64) 18802 + data[213] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.5/Browsers/Compat.browser + role (string) browser + id (unsigned int) 213 + totalSize (UInt64) 1605 + data[214] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx + role (string) aspx + id (unsigned int) 214 + totalSize (UInt64) 60575 + data[215] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.5/machine.config + role (string) config + id (unsigned int) 215 + totalSize (UInt64) 34056 + data[216] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.5/settings.map + role (string) map + id (unsigned int) 216 + totalSize (UInt64) 2622 + data[217] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/4.5/web.config + role (string) config + id (unsigned int) 217 + totalSize (UInt64) 18811 + data[218] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/browscap.ini + role (string) ini + id (unsigned int) 218 + totalSize (UInt64) 311984 + data[219] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/config + role (string) config + id (unsigned int) 219 + totalSize (UInt64) 3815 + data[220] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/MonoBleedingEdge/etc/mono/mconfig/config.xml + role (string) xml + id (unsigned int) 220 + totalSize (UInt64) 25817 + data[221] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/UnityCrashHandler64.exe + role (string) exe + id (unsigned int) 221 + totalSize (UInt64) 7282688 + data[222] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/UnityPlayer.dll + role (string) dll + id (unsigned int) 222 + totalSize (UInt64) 192243200 + data[223] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/WinPixEventRuntime.dll + role (string) dll + id (unsigned int) 223 + totalSize (UInt64) 58368 + data[224] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/D3D12/D3D12Core.dll + role (string) dll + id (unsigned int) 224 + totalSize (UInt64) 5908408 + data[225] (BuildReportFile) + path (string) C:/UnitySrc/BuildReportInspector_2021_3/TestProject/Build/D3D12/d3d12SDKLayers.dll + role (string) dll + id (unsigned int) 225 + totalSize (UInt64) 9525272 + m_BuildSteps (vector) + Array[26] + data[0] (BuildStepInfo) + stepName (string) Build player + durationTicks (UInt64) 58976739 + depth (int) 0 + messages (vector) + Array[0] + data[1] (BuildStepInfo) + stepName (string) Preprocess Player + durationTicks (UInt64) 114960 + depth (int) 1 + messages (vector) + Array[0] + data[2] (BuildStepInfo) + stepName (string) Prepare For Build + durationTicks (UInt64) 2476643 + depth (int) 1 + messages (vector) + Array[0] + data[3] (BuildStepInfo) + stepName (string) ProducePlayerScriptAssemblies + durationTicks (UInt64) 33733176 + depth (int) 1 + messages (vector) + Array[0] + data[4] (BuildStepInfo) + stepName (string) Prebuild Cleanup and Recompile + durationTicks (UInt64) 29833880 + depth (int) 2 + messages (vector) + Array[0] + data[5] (BuildStepInfo) + stepName (string) Compile scripts + durationTicks (UInt64) 29606308 + depth (int) 3 + messages (vector) + Array[0] + data[6] (BuildStepInfo) + stepName (string) Generate and validate platform script types + durationTicks (UInt64) 184213 + depth (int) 3 + messages (vector) + Array[0] + data[7] (BuildStepInfo) + stepName (string) Verify Build setup + durationTicks (UInt64) 117657 + depth (int) 1 + messages (vector) + Array[0] + data[8] (BuildStepInfo) + stepName (string) Prepare assets for target platform + durationTicks (UInt64) 71250 + depth (int) 1 + messages (vector) + Array[0] + data[9] (BuildStepInfo) + stepName (string) Prepare splash screen + durationTicks (UInt64) 6948 + depth (int) 1 + messages (vector) + Array[1] + data[0] (BuildStepMessage) + type (int) 3 + content (string) Including Unity Splash Screen logo because 'Show Unity Logo' is enabled. + data[10] (BuildStepInfo) + stepName (string) Building scenes + durationTicks (UInt64) 1045290 + depth (int) 1 + messages (vector) + Array[0] + data[11] (BuildStepInfo) + stepName (string) Building scene Assets/Scenes/SampleScene.unity + durationTicks (UInt64) 526194 + depth (int) 2 + messages (vector) + Array[0] + data[12] (BuildStepInfo) + stepName (string) Building scene Assets/Scenes/Scene2.unity + durationTicks (UInt64) 518519 + depth (int) 2 + messages (vector) + Array[0] + data[13] (BuildStepInfo) + stepName (string) Build scripts DLLs + durationTicks (UInt64) 222040 + depth (int) 1 + messages (vector) + Array[0] + data[14] (BuildStepInfo) + stepName (string) GetSystemAssemblies + durationTicks (UInt64) 18065 + depth (int) 2 + messages (vector) + Array[0] + data[15] (BuildStepInfo) + stepName (string) Build GlobalGameManagers file + durationTicks (UInt64) 1630809 + depth (int) 1 + messages (vector) + Array[0] + data[16] (BuildStepInfo) + stepName (string) Writing asset files + durationTicks (UInt64) 812536 + depth (int) 1 + messages (vector) + Array[0] + data[17] (BuildStepInfo) + stepName (string) Packaging assets - globalgamemanagers.assets + durationTicks (UInt64) 386663 + depth (int) 2 + messages (vector) + Array[0] + data[18] (BuildStepInfo) + stepName (string) Packaging assets - sharedassets0.assets = additional assets for scene 0: Assets/Scenes/SampleScene.unity + durationTicks (UInt64) 36262 + depth (int) 2 + messages (vector) + Array[0] + data[19] (BuildStepInfo) + stepName (string) Packaging assets - sharedassets1.assets = additional assets for scene 1: Assets/Scenes/Scene2.unity + durationTicks (UInt64) 331391 + depth (int) 2 + messages (vector) + Array[0] + data[20] (BuildStepInfo) + stepName (string) Building Resources/unity_builtin_extra + durationTicks (UInt64) 1073435 + depth (int) 1 + messages (vector) + Array[0] + data[21] (BuildStepInfo) + stepName (string) Write data build dirty tracking information + durationTicks (UInt64) 493831 + depth (int) 1 + messages (vector) + Array[0] + data[22] (BuildStepInfo) + stepName (string) Postprocess built player + durationTicks (UInt64) 14792654 + depth (int) 1 + messages (vector) + Array[0] + data[23] (BuildStepInfo) + stepName (string) Setup incremental player build + durationTicks (UInt64) 518578 + depth (int) 2 + messages (vector) + Array[0] + data[24] (BuildStepInfo) + stepName (string) Incremental player build + durationTicks (UInt64) 10927654 + depth (int) 2 + messages (vector) + Array[0] + data[25] (BuildStepInfo) + stepName (string) Report output files + durationTicks (UInt64) 275374 + depth (int) 2 + messages (vector) + Array[0] + m_Appendices (vector) + Array>[10] + data[0] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -4621170717555149581 + data[1] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -8657125485098368963 + data[2] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 6492385875147650225 + data[3] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 1106856995980594659 + data[4] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -4211197064891926221 + data[5] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -837533726333199562 + data[6] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 1152048598135469203 + data[7] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 8852773078263724989 + data[8] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -2209428987046021830 + data[9] (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) -8406665477514816739 + +ID: 1106856995980594659 (ClassID: 1126) PackedAssets + m_ShortPath (string) globalgamemanagers.assets.resS + m_Overhead (UInt64) 0 + m_Contents (vector) + Array[2] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 28 + packedSize (UInt64) 2796240 + offset (UInt64) 0 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Built-in Texture2D: Splash Screen Unity Logo + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 0 + classID (Type*) 28 + packedSize (UInt64) 2048 + offset (UInt64) 2796240 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + +ID: 1152048598135469203 (ClassID: 114) MonoBehaviour + m_ObjectHideFlags (unsigned int) 3 + m_CorrespondingSourceObject (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_PrefabInstance (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_PrefabAsset (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_GameObject (PPtr) + m_FileID (int) 0 + m_PathID (SInt64) 0 + m_Enabled (UInt8) 1 + m_EditorHideFlags (unsigned int) 0 + m_Script (PPtr) + m_FileID (int) 1 + m_PathID (SInt64) 13805 + m_Name (string) + m_EditorClassIdentifier (string) + +ID: 6492385875147650225 (ClassID: 1126) PackedAssets + m_ShortPath (string) sharedassets1.assets + m_Overhead (UInt64) 575 + m_Contents (vector) + Array[6] + data[0] (BuildReportPackedAssetInfo) + fileID (SInt64) 1 + classID (Type*) 150 + packedSize (UInt64) 97 + offset (UInt64) 528 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 0 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) + data[1] (BuildReportPackedAssetInfo) + fileID (SInt64) 2 + classID (Type*) 21 + packedSize (UInt64) 1064 + offset (UInt64) 640 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[2] (BuildReportPackedAssetInfo) + fileID (SInt64) 3 + classID (Type*) 21 + packedSize (UInt64) 268 + offset (UInt64) 1712 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[3] (BuildReportPackedAssetInfo) + fileID (SInt64) 4 + classID (Type*) 48 + packedSize (UInt64) 49400 + offset (UInt64) 1984 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[4] (BuildReportPackedAssetInfo) + fileID (SInt64) 5 + classID (Type*) 48 + packedSize (UInt64) 6964 + offset (UInt64) 51392 + sourceAssetGUID (GUID) + data[0] (unsigned int) 0 + data[1] (unsigned int) 0 + data[2] (unsigned int) 15 + data[3] (unsigned int) 0 + buildTimeAssetPath (string) Resources/unity_builtin_extra + data[5] (BuildReportPackedAssetInfo) + fileID (SInt64) 6 + classID (Type*) 83 + packedSize (UInt64) 92 + offset (UInt64) 58368 + sourceAssetGUID (GUID) + data[0] (unsigned int) 510047344 + data[1] (unsigned int) 1200191226 + data[2] (unsigned int) 2021230213 + data[3] (unsigned int) 2122331027 + buildTimeAssetPath (string) Assets/audio/audio.mp3 + +ID: 8852773078263724989 (ClassID: 382020655) PluginBuildInfo + m_RuntimePlugins (vector) + Array[1] + data[0] (string) nunit.framework + m_EditorPlugins (vector) + Array[8] + data[0] (string) Unity.Plastic.Newtonsoft.Json + data[1] (string) Unity.Plastic.Antlr3.Runtime + data[2] (string) zlib64Plastic + data[3] (string) liblz4Plastic + data[4] (string) JetBrains.Rider.PathLocator + data[5] (string) log4netPlastic + data[6] (string) lz4x64Plastic + data[7] (string) unityplastic + From 2091d10e43c4e1d969ffc9fd3116dc11fb3f9d99 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 13:25:11 -0500 Subject: [PATCH 13/17] BuildReport filelist support --- Analyzer/Properties/Resources.Designer.cs | 51 ++++++++++--------- Analyzer/Resources/BuildReport.sql | 22 ++++++++ .../SQLite/Handlers/BuildReportHandler.cs | 27 ++++++++++ Analyzer/SerializedObjects/BuildReport.cs | 26 +++++++++- 4 files changed, 102 insertions(+), 24 deletions(-) diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index c379c4c..7302f59 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -632,40 +632,45 @@ internal static string AudioClip { /// /// Looks up a localized string similar to CREATE TABLE IF NOT EXISTS build_reports( /// id INTEGER, - /// build_guid TEXT, + /// build_type TEXT, + /// build_result TEXT, /// platform_name TEXT, /// subtarget INTEGER, + /// start_time TEXT, + /// end_time TEXT, + /// total_time_seconds INTEGER, + /// total_size INTEGER, + /// build_guid TEXT, + /// total_errors INTEGER, + /// total_warnings INTEGER, /// options INTEGER, /// asset_bundle_options INTEGER, /// output_path TEXT, /// crc INTEGER, - /// total_size INTEGER, - /// total_time_ticks INTEGER, - /// total_errors INTEGER, - /// total_warnings INTEGER, - /// build_type TEXT, - /// build_result INTEGER, /// PRIMARY KEY (id) ///); /// - ///CREATE VIEW build_report_view AS + ///CREATE TABLE IF NOT EXISTS build_report_files( + /// build_report_id INTEGER NOT NULL, + /// file_index INTEGER NOT NULL, + /// path TEXT NOT NULL, + /// role TEXT NOT NULL, + /// size INTEGER NOT NULL, + /// PRIMARY KEY (build_report_id, file_index), + /// FOREIGN KEY (build_report_id) REFERENCES build_reports(id) + ///); + /// + ///CREATE VIEW build_report_files_view AS ///SELECT - /// o.*, - /// br.build_guid, - /// br.platform_name, - /// br.subtarget, - /// br.options, - /// br.asset_bundle_options, - /// br.output_path, - /// br.crc, - /// br.total_size, - /// br.total_time_ticks, - /// br.total_errors, - /// br.total_warnings, + /// br.id AS build_report_id, /// br.build_type, - /// br.build_result - ///FROM object_view o - ///INNER JOIN build_reports br ON o.id = br.id; + /// br.platform_name, + /// brf.file_index, + /// brf.path, + /// brf.role, + /// brf.size + ///FROM build_report_files brf + ///INNER JOIN build_reports br ON brf.build_report_id = br.id; ///. /// internal static string BuildReport { diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql index 08e4791..d1b34fd 100644 --- a/Analyzer/Resources/BuildReport.sql +++ b/Analyzer/Resources/BuildReport.sql @@ -18,3 +18,25 @@ CREATE TABLE IF NOT EXISTS build_reports( PRIMARY KEY (id) ); +CREATE TABLE IF NOT EXISTS build_report_files( + build_report_id INTEGER NOT NULL, + file_index INTEGER NOT NULL, + path TEXT NOT NULL, + role TEXT NOT NULL, + size INTEGER NOT NULL, + PRIMARY KEY (build_report_id, file_index), + FOREIGN KEY (build_report_id) REFERENCES build_reports(id) +); + +CREATE VIEW build_report_files_view AS +SELECT + br.id AS build_report_id, + br.build_type, + br.platform_name, + brf.file_index, + brf.path, + brf.role, + brf.size +FROM build_report_files brf +INNER JOIN build_reports br ON brf.build_report_id = br.id; + diff --git a/Analyzer/SQLite/Handlers/BuildReportHandler.cs b/Analyzer/SQLite/Handlers/BuildReportHandler.cs index 830abf6..5f2202f 100644 --- a/Analyzer/SQLite/Handlers/BuildReportHandler.cs +++ b/Analyzer/SQLite/Handlers/BuildReportHandler.cs @@ -8,6 +8,7 @@ namespace UnityDataTools.Analyzer.SQLite.Handlers; public class BuildReportHandler : ISQLiteHandler { private SqliteCommand m_InsertCommand; + private SqliteCommand m_InsertFileCommand; public void Init(SqliteConnection db) { @@ -42,6 +43,19 @@ public void Init(SqliteConnection db) m_InsertCommand.Parameters.Add("@asset_bundle_options", SqliteType.Integer); m_InsertCommand.Parameters.Add("@output_path", SqliteType.Text); m_InsertCommand.Parameters.Add("@crc", SqliteType.Integer); + + m_InsertFileCommand = db.CreateCommand(); + m_InsertFileCommand.CommandText = @"INSERT INTO build_report_files( + build_report_id, file_index, path, role, size + ) VALUES( + @build_report_id, @file_index, @path, @role, @size + )"; + + m_InsertFileCommand.Parameters.Add("@build_report_id", SqliteType.Integer); + m_InsertFileCommand.Parameters.Add("@file_index", SqliteType.Integer); + m_InsertFileCommand.Parameters.Add("@path", SqliteType.Text); + m_InsertFileCommand.Parameters.Add("@role", SqliteType.Text); + m_InsertFileCommand.Parameters.Add("@size", SqliteType.Integer); } public void Process(Context ctx, long objectId, RandomAccessReader reader, out string name, out long streamDataSize) @@ -67,6 +81,18 @@ public void Process(Context ctx, long objectId, RandomAccessReader reader, out s m_InsertCommand.ExecuteNonQuery(); + // Insert files + foreach (var file in buildReport.Files) + { + m_InsertFileCommand.Transaction = ctx.Transaction; + m_InsertFileCommand.Parameters["@build_report_id"].Value = objectId; + m_InsertFileCommand.Parameters["@file_index"].Value = file.Id; + m_InsertFileCommand.Parameters["@path"].Value = file.Path; + m_InsertFileCommand.Parameters["@role"].Value = file.Role; + m_InsertFileCommand.Parameters["@size"].Value = (long)file.Size; + m_InsertFileCommand.ExecuteNonQuery(); + } + streamDataSize = 0; name = buildReport.Name; } @@ -78,5 +104,6 @@ public void Finalize(SqliteConnection db) void IDisposable.Dispose() { m_InsertCommand?.Dispose(); + m_InsertFileCommand?.Dispose(); } } diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index e1cae39..8e1990b 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using UnityDataTools.Analyzer.Util; using UnityDataTools.FileSystem.TypeTreeReaders; @@ -22,6 +23,7 @@ public class BuildReport public int TotalWarnings { get; init; } public int BuildType { get; init; } public string BuildResult { get; init; } + public List Files { get; init; } private BuildReport() { } @@ -48,6 +50,19 @@ public static BuildReport Read(RandomAccessReader reader) var endTime = new DateTime(startTimeTicks + (long)totalTimeTicks, DateTimeKind.Utc).ToString("o"); + // Read the files array + var filesList = new List(reader["m_Files"].GetArraySize()); + foreach (var fileElement in reader["m_Files"]) + { + filesList.Add(new BuildFile + { + Id = fileElement["id"].GetValue(), + Path = fileElement["path"].GetValue(), + Role = fileElement["role"].GetValue(), + Size = fileElement["totalSize"].GetValue() + }); + } + return new BuildReport() { Name = reader["m_Name"].GetValue(), @@ -65,7 +80,8 @@ public static BuildReport Read(RandomAccessReader reader) TotalErrors = summary["totalErrors"].GetValue(), TotalWarnings = summary["totalWarnings"].GetValue(), BuildType = summary["buildType"].GetValue(), - BuildResult = GetBuildResultString(summary["buildResult"].GetValue()) + BuildResult = GetBuildResultString(summary["buildResult"].GetValue()), + Files = filesList }; } @@ -93,3 +109,11 @@ public static string GetBuildResultString(int buildResult) }; } } + +public class BuildFile +{ + public uint Id { get; init; } + public string Path { get; init; } + public string Role { get; init; } + public ulong Size { get; init; } +} From a304e078cf5da53c7870b517cd784b9935cac559 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 14:40:07 -0500 Subject: [PATCH 14/17] FileList - trim path to relative, make view useful --- Analyzer/Properties/Resources.Designer.cs | 4 +- Analyzer/Resources/BuildReport.sql | 4 +- Analyzer/SerializedObjects/BuildReport.cs | 29 ++++++++- UnityDataTool.Tests/BuildReportTests.cs | 78 +++++++++++++++++++++++ 4 files changed, 112 insertions(+), 3 deletions(-) diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index 7302f59..75f7d53 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -662,6 +662,7 @@ internal static string AudioClip { /// ///CREATE VIEW build_report_files_view AS ///SELECT + /// o.serialized_file, /// br.id AS build_report_id, /// br.build_type, /// br.platform_name, @@ -670,7 +671,8 @@ internal static string AudioClip { /// brf.role, /// brf.size ///FROM build_report_files brf - ///INNER JOIN build_reports br ON brf.build_report_id = br.id; + ///INNER JOIN build_reports br ON brf.build_report_id = br.id + ///INNER JOIN object_view o ON br.id = o.id; ///. /// internal static string BuildReport { diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql index d1b34fd..4505e6c 100644 --- a/Analyzer/Resources/BuildReport.sql +++ b/Analyzer/Resources/BuildReport.sql @@ -30,6 +30,7 @@ CREATE TABLE IF NOT EXISTS build_report_files( CREATE VIEW build_report_files_view AS SELECT + o.serialized_file, br.id AS build_report_id, br.build_type, br.platform_name, @@ -38,5 +39,6 @@ SELECT brf.role, brf.size FROM build_report_files brf -INNER JOIN build_reports br ON brf.build_report_id = br.id; +INNER JOIN build_reports br ON brf.build_report_id = br.id +INNER JOIN object_view o ON br.id = o.id; diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index 8e1990b..0379f86 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using UnityDataTools.Analyzer.Util; using UnityDataTools.FileSystem.TypeTreeReaders; @@ -63,6 +64,8 @@ public static BuildReport Read(RandomAccessReader reader) }); } + TrimCommonPathPrefix(filesList); + return new BuildReport() { Name = reader["m_Name"].GetValue(), @@ -85,6 +88,30 @@ public static BuildReport Read(RandomAccessReader reader) }; } + // Currently the file list has the absolute paths of the build output, but what we really want is the relative path. + // This code reuses the approach taken in the build report inspector of automatically stripping off whatever part of the path + // is repeated as the prefix on each file, which effectively finds the relative output path. + static void TrimCommonPathPrefix(List files) + { + if (files.Count == 0) + return; + string longestCommonRoot = files[0].Path; + foreach (var file in files) + { + for (var i = 0; i < longestCommonRoot.Length && i < file.Path.Length; i++) + { + if (longestCommonRoot[i] == file.Path[i]) + continue; + longestCommonRoot = longestCommonRoot.Substring(0, i); + } + } + + foreach (var file in files) + { + file.Path = file.Path.Substring(longestCommonRoot.Length); + } + } + public static string GetBuildTypeString(int buildType) { return buildType switch @@ -113,7 +140,7 @@ public static string GetBuildResultString(int buildResult) public class BuildFile { public uint Id { get; init; } - public string Path { get; init; } + public string Path { get; set; } public string Role { get; init; } public ulong Size { get; init; } } diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index d4e84f4..6d63211 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -343,4 +343,82 @@ public async Task Analyze_BuildReport_AssetBundle_ContainsPackedAssetsData() "CAB-6b49068aebcf9d3b05692c8efd933167", "Unexpected path in build_report_packed_assets_view"); } + + [Test] + public async Task Analyze_BuildReports_BothReports_ContainsBuildReportFilesData() + { + var databasePath = SQLTestHelper.GetDatabasePath(m_TestOutputFolder); + + // Analyze multiple BuildReports into the same database + var args = new List { "analyze", m_TestDataFolder, "-p", "*.buildreport" }; + + Assert.AreEqual(0, await Program.Main(args.ToArray())); + using var db = SQLTestHelper.OpenDatabase(databasePath); + + // Verify we have 2 BuildReports + SQLTestHelper.AssertQueryInt(db, "SELECT COUNT(*) FROM build_reports", 2, + "Expected exactly 2 BuildReports"); + + // Verify we have files from both BuildReports + var totalFiles = SQLTestHelper.QueryInt(db, "SELECT COUNT(*) FROM build_report_files"); + Assert.That(totalFiles, Is.GreaterThan(0), "Expected at least some files in build_report_files"); + + // Verify that an expected file from AssetBundle.buildreport is present + var assetBundleFileCount = SQLTestHelper.QueryInt(db, + @"SELECT COUNT(*) FROM build_report_files + WHERE path = 'audio.bundle/CAB-76a378bdc9304bd3c3a82de8dd97981a.resource'"); + Assert.AreEqual(1, assetBundleFileCount, + "Expected to find one file with 'CAB-76a378bdc9304bd3c3a82de8dd97981a.resource' in path from AssetBundle.buildreport"); + + // Verify that an expected file from Player.buildreport is present + var playerFileCount = SQLTestHelper.QueryInt(db, + @"SELECT COUNT(*) FROM build_report_files + WHERE path = 'TestProject_Data/sharedassets0.assets.resS'"); + Assert.AreEqual(1, playerFileCount, + "Expected to find one file with 'sharedassets0.assets.resS' in path from Player.buildreport"); + + // Verify that each BuildReport has its own set of files with the correct build_report_id + var assetBundleReportId = SQLTestHelper.QueryInt(db, + "SELECT id FROM build_reports WHERE build_type = 'AssetBundle'"); + var playerReportId = SQLTestHelper.QueryInt(db, + "SELECT id FROM build_reports WHERE build_type = 'Player'"); + + var assetBundleFileCountByReportId = SQLTestHelper.QueryInt(db, + $"SELECT COUNT(*) FROM build_report_files WHERE build_report_id = {assetBundleReportId}"); + Assert.That(assetBundleFileCountByReportId, Is.GreaterThan(0), + "Expected AssetBundle BuildReport to have files"); + + var playerFileCountByReportId = SQLTestHelper.QueryInt(db, + $"SELECT COUNT(*) FROM build_report_files WHERE build_report_id = {playerReportId}"); + Assert.That(playerFileCountByReportId, Is.GreaterThan(0), + "Expected Player BuildReport to have files"); + + // Verify the view includes serialized_file and can filter by it + var playerFilesInView = SQLTestHelper.QueryInt(db, + @"SELECT COUNT(*) FROM build_report_files_view + WHERE serialized_file = 'Player.buildreport'"); + Assert.That(playerFilesInView, Is.GreaterThan(0), + "Expected to find files from Player.buildreport in the view using serialized_file"); + + // Verify we can find the specific Player.buildreport file in the view + var specificPlayerFile = SQLTestHelper.QueryInt(db, + @"SELECT COUNT(*) FROM build_report_files_view + WHERE serialized_file = 'Player.buildreport' + AND path = 'TestProject_Data/sharedassets0.assets.resS'"); + Assert.AreEqual(1, specificPlayerFile, + "Expected to find exactly one row with path='TestProject_Data/sharedassets0.assets.resS' from Player.buildreport in view"); + + // Verify the serialized_file column correctly identifies the source BuildReport + var assetBundleSerializedFile = SQLTestHelper.QueryString(db, + @"SELECT DISTINCT serialized_file FROM build_report_files_view + WHERE path = 'audio.bundle/CAB-76a378bdc9304bd3c3a82de8dd97981a.resource'"); + Assert.AreEqual("AssetBundle.buildreport", assetBundleSerializedFile, + "Expected serialized_file to be 'AssetBundle.buildreport' for AssetBundle files"); + + var playerSerializedFile = SQLTestHelper.QueryString(db, + @"SELECT DISTINCT serialized_file FROM build_report_files_view + WHERE path = 'TestProject_Data/sharedassets0.assets.resS'"); + Assert.AreEqual("Player.buildreport", playerSerializedFile, + "Expected serialized_file to be 'Player.buildreport' for Player files"); + } } From 62dc90299faf25b6db8c2d888e982aa7c9fb79ee Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 16:22:21 -0500 Subject: [PATCH 15/17] Add a table listing the archive content as determined from the build report This makes it possible to show the AssetBundle name in queries which is more recognizable than the internal name --- Analyzer/Properties/Resources.Designer.cs | 16 ++++- Analyzer/Resources/BuildReport.sql | 8 +++ Analyzer/Resources/PackedAssets.sql | 8 ++- .../SQLite/Handlers/BuildReportHandler.cs | 23 ++++++ Analyzer/SerializedObjects/BuildReport.cs | 71 ++++++++++++++++++- UnityDataTool.Tests/BuildReportTests.cs | 42 +++++++++++ 6 files changed, 162 insertions(+), 6 deletions(-) diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index 75f7d53..2f868da 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -660,6 +660,14 @@ internal static string AudioClip { /// FOREIGN KEY (build_report_id) REFERENCES build_reports(id) ///); /// + ///CREATE TABLE IF NOT EXISTS build_report_archive_contents( + /// build_report_id INTEGER NOT NULL, + /// assetbundle TEXT NOT NULL, + /// assetbundle_content TEXT NOT NULL, + /// PRIMARY KEY (build_report_id, assetbundle_content), + /// FOREIGN KEY (build_report_id) REFERENCES build_reports(id) + ///); + /// ///CREATE VIEW build_report_files_view AS ///SELECT /// o.serialized_file, @@ -920,9 +928,13 @@ internal static string MonoScript { /// o.object_id, /// o.serialized_file, /// pa.path, - /// pa.file_header_size + /// pa.file_header_size, + /// brac.assetbundle ///FROM object_view o - ///INNER JOIN build_report_packed_assets pa ON o.id = pa.id; + ///INNER JOIN build_report_packed_assets pa ON o.id = pa.id + ///INNER JOIN objects o_raw ON o.id = o_raw.id + ///LEFT JOIN objects br_obj ON o_raw.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 + ///LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id AND pa.path = brac.assetbundle_content; /// ///CREATE VIEW build_report_packed_asset_contents_view AS ///SELECT diff --git a/Analyzer/Resources/BuildReport.sql b/Analyzer/Resources/BuildReport.sql index 4505e6c..eab8bb9 100644 --- a/Analyzer/Resources/BuildReport.sql +++ b/Analyzer/Resources/BuildReport.sql @@ -28,6 +28,14 @@ CREATE TABLE IF NOT EXISTS build_report_files( FOREIGN KEY (build_report_id) REFERENCES build_reports(id) ); +CREATE TABLE IF NOT EXISTS build_report_archive_contents( + build_report_id INTEGER NOT NULL, + assetbundle TEXT NOT NULL, + assetbundle_content TEXT NOT NULL, + PRIMARY KEY (build_report_id, assetbundle_content), + FOREIGN KEY (build_report_id) REFERENCES build_reports(id) +); + CREATE VIEW build_report_files_view AS SELECT o.serialized_file, diff --git a/Analyzer/Resources/PackedAssets.sql b/Analyzer/Resources/PackedAssets.sql index ccda964..767ee13 100644 --- a/Analyzer/Resources/PackedAssets.sql +++ b/Analyzer/Resources/PackedAssets.sql @@ -29,9 +29,13 @@ SELECT o.object_id, o.serialized_file, pa.path, - pa.file_header_size + pa.file_header_size, + brac.assetbundle FROM object_view o -INNER JOIN build_report_packed_assets pa ON o.id = pa.id; +INNER JOIN build_report_packed_assets pa ON o.id = pa.id +INNER JOIN objects o_raw ON o.id = o_raw.id +LEFT JOIN objects br_obj ON o_raw.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 +LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id AND pa.path = brac.assetbundle_content; CREATE VIEW build_report_packed_asset_contents_view AS SELECT diff --git a/Analyzer/SQLite/Handlers/BuildReportHandler.cs b/Analyzer/SQLite/Handlers/BuildReportHandler.cs index 5f2202f..8535ab1 100644 --- a/Analyzer/SQLite/Handlers/BuildReportHandler.cs +++ b/Analyzer/SQLite/Handlers/BuildReportHandler.cs @@ -9,6 +9,7 @@ public class BuildReportHandler : ISQLiteHandler { private SqliteCommand m_InsertCommand; private SqliteCommand m_InsertFileCommand; + private SqliteCommand m_InsertArchiveContentCommand; public void Init(SqliteConnection db) { @@ -56,6 +57,17 @@ public void Init(SqliteConnection db) m_InsertFileCommand.Parameters.Add("@path", SqliteType.Text); m_InsertFileCommand.Parameters.Add("@role", SqliteType.Text); m_InsertFileCommand.Parameters.Add("@size", SqliteType.Integer); + + m_InsertArchiveContentCommand = db.CreateCommand(); + m_InsertArchiveContentCommand.CommandText = @"INSERT INTO build_report_archive_contents( + build_report_id, assetbundle, assetbundle_content + ) VALUES( + @build_report_id, @assetbundle, @assetbundle_content + )"; + + m_InsertArchiveContentCommand.Parameters.Add("@build_report_id", SqliteType.Integer); + m_InsertArchiveContentCommand.Parameters.Add("@assetbundle", SqliteType.Text); + m_InsertArchiveContentCommand.Parameters.Add("@assetbundle_content", SqliteType.Text); } public void Process(Context ctx, long objectId, RandomAccessReader reader, out string name, out long streamDataSize) @@ -93,6 +105,16 @@ public void Process(Context ctx, long objectId, RandomAccessReader reader, out s m_InsertFileCommand.ExecuteNonQuery(); } + // Insert archive contents mapping + foreach (var mapping in buildReport.fileListAssetBundleHelper.internalNameToArchiveMapping) + { + m_InsertArchiveContentCommand.Transaction = ctx.Transaction; + m_InsertArchiveContentCommand.Parameters["@build_report_id"].Value = objectId; + m_InsertArchiveContentCommand.Parameters["@assetbundle"].Value = mapping.Value; + m_InsertArchiveContentCommand.Parameters["@assetbundle_content"].Value = mapping.Key; + m_InsertArchiveContentCommand.ExecuteNonQuery(); + } + streamDataSize = 0; name = buildReport.Name; } @@ -105,5 +127,6 @@ void IDisposable.Dispose() { m_InsertCommand?.Dispose(); m_InsertFileCommand?.Dispose(); + m_InsertArchiveContentCommand?.Dispose(); } } diff --git a/Analyzer/SerializedObjects/BuildReport.cs b/Analyzer/SerializedObjects/BuildReport.cs index 0379f86..ae274e9 100644 --- a/Analyzer/SerializedObjects/BuildReport.cs +++ b/Analyzer/SerializedObjects/BuildReport.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; +using System.IO; using UnityDataTools.Analyzer.Util; using UnityDataTools.FileSystem.TypeTreeReaders; @@ -25,6 +25,7 @@ public class BuildReport public int BuildType { get; init; } public string BuildResult { get; init; } public List Files { get; init; } + public FileListAssetBundleHelper fileListAssetBundleHelper { get; init; } private BuildReport() { } @@ -84,7 +85,8 @@ public static BuildReport Read(RandomAccessReader reader) TotalWarnings = summary["totalWarnings"].GetValue(), BuildType = summary["buildType"].GetValue(), BuildResult = GetBuildResultString(summary["buildResult"].GetValue()), - Files = filesList + Files = filesList, + fileListAssetBundleHelper = new FileListAssetBundleHelper(filesList) }; } @@ -144,3 +146,68 @@ public class BuildFile public string Role { get; init; } public ulong Size { get; init; } } + + +/// Helper for matching files that are inside an Unity Archive file to the file containing it. +// Currently this only applies to AssetBundle builds, which can have many output files and which use hard to understand internal file names +// like "CAB-76a378bdc9304bd3c3a82de8dd97981a". +// For compressed Player builds the PackedAssets reports the internal files, but the file list does not report the unity3d content, +// so this code will not pick up the mapping. However because there is only a single unity3d file on most platforms this is less important +public class FileListAssetBundleHelper +{ + public Dictionary internalNameToArchiveMapping = new Dictionary(); + + public FileListAssetBundleHelper(List files) + { + CalculateAssetBundleMapping(files); + } + + /// + // Map between the internal file names inside Archive files back to the Archive filename. + + /* + Example input: + + - path: C:/Src/TestProject/Build/AssetBundles/audio.bundle/CAB-76a378bdc9304bd3c3a82de8dd97981a.resource + role: StreamingResourceFile + ... + - path: C:/Src/TestProject/Build/AssetBundles/audio.bundle + role: AssetBundle + ... + + Result: + CAB-76a378bdc9304bd3c3a82de8dd97981a.resource -> audio.bundle + */ + /// + private void CalculateAssetBundleMapping(List files) + { + internalNameToArchiveMapping.Clear(); + + // Track archive paths and their base filenames for AssetBundle or manifest files + var archivePathToFileName = new Dictionary(); + foreach (var file in files) + { + if (file.Role == "AssetBundle" || file.Role == "ManifestAssetBundle") + { + var justFileName = Path.GetFileName(file.Path); + archivePathToFileName[file.Path] = justFileName; + } + } + + if (archivePathToFileName.Count == 0) + return; + + // Map internal file names to their corresponding archive filenames + foreach (var file in files) + { + // Assumes internal files are not in subdirectories inside the archive + var justPath = Path.GetDirectoryName(file.Path)?.Replace('\\', '/'); + var justFileName = Path.GetFileName(file.Path); + + if (!string.IsNullOrEmpty(justPath) && archivePathToFileName.ContainsKey(justPath)) + { + internalNameToArchiveMapping[justFileName] = archivePathToFileName[justPath]; + } + } + } +} diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 6d63211..e4b8fa6 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -420,5 +420,47 @@ public async Task Analyze_BuildReports_BothReports_ContainsBuildReportFilesData( WHERE path = 'TestProject_Data/sharedassets0.assets.resS'"); Assert.AreEqual("Player.buildreport", playerSerializedFile, "Expected serialized_file to be 'Player.buildreport' for Player files"); + + // Verify build_report_archive_contents table has entries for AssetBundle build + var archiveContentsCount = SQLTestHelper.QueryInt(db, + $"SELECT COUNT(*) FROM build_report_archive_contents WHERE build_report_id = {assetBundleReportId}"); + Assert.That(archiveContentsCount, Is.GreaterThan(0), + "Expected AssetBundle BuildReport to have archive contents mappings"); + + // Verify specific archive content mapping exists + var spritesArchiveContentCount = SQLTestHelper.QueryInt(db, + $@"SELECT COUNT(*) FROM build_report_archive_contents + WHERE build_report_id = {assetBundleReportId} + AND assetbundle = 'sprites.bundle' + AND assetbundle_content = 'CAB-6b49068aebcf9d3b05692c8efd933167.resS'"); + Assert.AreEqual(1, spritesArchiveContentCount, + "Expected to find mapping for sprites.bundle -> CAB-6b49068aebcf9d3b05692c8efd933167.resS"); + + // Verify Player build has no archive contents (not an AssetBundle build) + var playerArchiveContentsCount = SQLTestHelper.QueryInt(db, + $"SELECT COUNT(*) FROM build_report_archive_contents WHERE build_report_id = {playerReportId}"); + Assert.AreEqual(0, playerArchiveContentsCount, + "Expected Player BuildReport to have no archive contents mappings"); + + // Verify build_report_packed_assets_view includes assetbundle column + var packedAssetsWithBundle = SQLTestHelper.QueryInt(db, + @"SELECT COUNT(*) FROM build_report_packed_assets_view + WHERE assetbundle IS NOT NULL"); + Assert.That(packedAssetsWithBundle, Is.GreaterThan(0), + "Expected some PackedAssets to have assetbundle name populated"); + + // Verify specific PackedAsset has correct assetbundle name + var specificPackedAssetBundle = SQLTestHelper.QueryString(db, + @"SELECT assetbundle FROM build_report_packed_assets_view + WHERE path = 'CAB-6b49068aebcf9d3b05692c8efd933167'"); + Assert.AreEqual("sprites.bundle", specificPackedAssetBundle, + "Expected PackedAsset CAB-6b49068aebcf9d3b05692c8efd933167 to have assetbundle 'sprites.bundle'"); + + // Verify PackedAssets from Player build have NULL assetbundle + var playerPackedAssetsWithNullBundle = SQLTestHelper.QueryInt(db, + @"SELECT COUNT(*) FROM build_report_packed_assets_view + WHERE serialized_file = 'Player.buildreport' AND assetbundle IS NULL"); + Assert.That(playerPackedAssetsWithNullBundle, Is.GreaterThan(0), + "Expected PackedAssets from Player.buildreport to have NULL assetbundle"); } } From e39b32c50833521fea0642e1ab6d3fa6a6338d89 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Mon, 29 Dec 2025 17:08:20 -0500 Subject: [PATCH 16/17] Update documentation, improve view --- Analyzer/Properties/Resources.Designer.cs | 16 +-- Analyzer/Resources/PackedAssets.sql | 16 +-- Documentation/buildreport.md | 164 ++++++++++++++++------ UnityDataTool.Tests/BuildReportTests.cs | 9 +- 4 files changed, 143 insertions(+), 62 deletions(-) diff --git a/Analyzer/Properties/Resources.Designer.cs b/Analyzer/Properties/Resources.Designer.cs index 2f868da..6eab80f 100644 --- a/Analyzer/Properties/Resources.Designer.cs +++ b/Analyzer/Properties/Resources.Designer.cs @@ -924,16 +924,16 @@ internal static string MonoScript { /// ///CREATE VIEW build_report_packed_assets_view AS ///SELECT - /// o.id, + /// pa.id, /// o.object_id, - /// o.serialized_file, + /// brac.assetbundle, + /// sf.name as build_report, /// pa.path, - /// pa.file_header_size, - /// brac.assetbundle - ///FROM object_view o - ///INNER JOIN build_report_packed_assets pa ON o.id = pa.id - ///INNER JOIN objects o_raw ON o.id = o_raw.id - ///LEFT JOIN objects br_obj ON o_raw.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 + /// pa.file_header_size + ///FROM build_report_packed_assets pa + ///INNER JOIN objects o ON pa.id = o.id + ///INNER JOIN serialized_files sf ON o.serialized_file = sf.id + ///LEFT JOIN objects br_obj ON o.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 ///LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id AND pa.path = brac.assetbundle_content; /// ///CREATE VIEW build_report_packed_asset_contents_view AS diff --git a/Analyzer/Resources/PackedAssets.sql b/Analyzer/Resources/PackedAssets.sql index 767ee13..40c788c 100644 --- a/Analyzer/Resources/PackedAssets.sql +++ b/Analyzer/Resources/PackedAssets.sql @@ -25,16 +25,16 @@ CREATE TABLE IF NOT EXISTS build_report_packed_asset_info( CREATE VIEW build_report_packed_assets_view AS SELECT - o.id, + pa.id, o.object_id, - o.serialized_file, + brac.assetbundle, + sf.name as build_report, pa.path, - pa.file_header_size, - brac.assetbundle -FROM object_view o -INNER JOIN build_report_packed_assets pa ON o.id = pa.id -INNER JOIN objects o_raw ON o.id = o_raw.id -LEFT JOIN objects br_obj ON o_raw.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 + pa.file_header_size +FROM build_report_packed_assets pa +INNER JOIN objects o ON pa.id = o.id +INNER JOIN serialized_files sf ON o.serialized_file = sf.id +LEFT JOIN objects br_obj ON o.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id AND pa.path = brac.assetbundle_content; CREATE VIEW build_report_packed_asset_contents_view AS diff --git a/Documentation/buildreport.md b/Documentation/buildreport.md index ed48047..9c67a62 100644 --- a/Documentation/buildreport.md +++ b/Documentation/buildreport.md @@ -1,70 +1,39 @@ # BuildReport support -The [BuildReport](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.html) file is created by Player builds. It is also created if you build AssetBundles with [BuildPipeline.BuildAssetBundle](https://docs.unity3d.com/ScriptReference/BuildPipeline.BuildAssetBundles.html). However it is not created for Addressables or builds using the Scriptable Build Pipeline. +The [BuildReport](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.html) file is written by Player builds. It is also written when AssetBundles are built using [BuildPipeline.BuildAssetBundle](https://docs.unity3d.com/ScriptReference/BuildPipeline.BuildAssetBundles.html). However it is not written by the [Addressables](addressables-build-reports.md) package, nor builds make with the Scriptable Build Pipeline package. -This file is currently written to `Library/LastBuild.buildReport`. By default this is a Unity binary serialized file, the same format used for build output. Because UnityDataTool supports reading this format it can read this file and extract information about the build results, using the same mechanisms used for other Unity object types. +This file is currently written to `Library/LastBuild.buildReport`. By default this is a Unity binary serialized file, the same format that Unity uses for build output. Because UnityDataTool supports reading this format it can read this file and extract information about the build results, using the same mechanisms used for other Unity object types. ## UnityDataTool support -Because it is a SerializedFile you can ["dump"](command-dump.md) it into text format. +Because it is a SerializedFile you can [`dump`](command-dump.md) it into text format. The [`analyze`](command-analyze.md) command now has custom support for BuildReport files. When you analyze a BuildReport file it will extract information into dedicated tables in the output database. Specifically there are now custom handlers for the following types: * **BuildReport** - The primary object that reports the inputs and results for a Unity build. -* **PackedAssets** - An object that describes the contents of a specific Serialized file, or resource file. It records information such as the type, size and source asset for each object or resource blob. This makes it possible to do analysis of the content down to the object level. - -These are represented in the following tables and views: - -| Name in Database | Type | Description/Notes | -|-----------------------------------------|---------|------------------| -| build_reports | table | BuildReport summary (build type, result, platform, duration etc) | -| build_report_packed_assets | table | Info about a SerializedFile, .resS or .resource file in the build output | -| build_report_packed_asset_info | table | Info about each object inside a Serialized file (or data owned by an object inside a .resS or .resource file | -| build_report_source_assets | table | AssetDatabase GUID and path for each source asset referenced from a PackedAssetInfo. This table normalizes the repeated paths and GUIDs, which makes the SQL representation much more compact than the BuildReport format for some large build results. | -| build_report_packed_assets_view | view | Shows the name of the BuildReport file along with each build_report_packed_assets. This view is useful if the database contains the analysis of more than one build report file. | -| build_report_packed_asset_contents_view | view | View of all the PackedAssetInfo entries, including the BuildReport file and source asset path and GUID | - - -## Notes on column naming - -For consistency and clarify, the SQL representation uses slightly different names than the BuildReport API for some fields. - -| Name in Database | Name in BuildReport API | Notes | -|---------------------------------------|--------------------------|-------| -| build_report_packed_assets.path | PackedAssets.ShortPath | Filename of the Serialized File, .resS or .resource file. This is the only path that is recorded, so "short" was redundant | -| build_report_packed_assets.file_header_size | PackedAssets.Overhead | The "overhead" is the size of the file header (zero for .resS and .resource files) | -| build_report_packed_asset_info.object_id | PackedAssetsInfo.fileID | Local file ID of the object in the build output. Named object_id for consistency with objects.object_id | -| build_report_packed_asset_info.type | PackedAssetsInfo.classID | Type of the Unity Object. Named type for consistency with objects.type | +* **PackedAssets** - An object that describes the contents of a specific Serialized file, or resource file. It records information such as the type, size and source asset for each object or resource blob. This makes it possible to do analysis of the content down to the object level. Note: the PackedAsset information is currently not written for Scenes in the build. ## Cross referencing with the build result -A suggested usage is run analyze on a full build as well as the matching BuildReport. For best results this should be a clean build so that the PackedAsset information is fully populated. You may need to temporarily copy the BuildReport file into the build output location so that it is found by your call to analyze. +A suggested usage is to run analyze on both the build results and the matching BuildReport file. For best results this should be a clean build, so that the PackedAsset information is fully populated in the BuildReport. You may need to temporarily copy the BuildReport file into the build output location, so that it is found by your call to analyze. -The PackedAsset information adds the extra information about the source asset of each object that is missing when only analyzing the build output. The PackedAsset will list objects in the same order as they are found in the output Serialized file, resS or resource file. For objects in Serialized file it records the `object_id`, e.g. local file id. This would match an entry in the `objects` object table if you have also analyzed the built file. +The PackedAsset information adds the extra information about the source asset of each object that is missing when only analyzing the build output. The PackedAsset will list objects in the same order as they are found in the output Serialized file, resS or resource file. -Note: currently the source LFID is not recorded in the PackedAssetInfo entry. So, while you can find the source asset (e.g. which prefab), its not possible to directly pinpoint the precise object within that asset. When necessary it should be possible to determine the precise object in a more ad hoc way, based on its name or other distinguishing values. +In the database this means that a row in the `build_report_packed_assets` table can matched with the associated analyzed Serialized file through the `object_view_.serialized_file` and `build_report_packed_assets.path` values. Similarly the `build_report_packed_asset_info` entries can be matched to the objects in the build output based on the `object_id` (local file id). -## Limitations +Note: currently the source local file id is not recorded in the PackedAssetInfo entry. So, while you can find the source asset (e.g. which prefab), it is not possible to directly pinpoint the precise object within that asset. When necessary it is often possible to determine the precise object in a more ad hoc way, based on its name or other distinguishing values. -Currently you cannot analyze multiple build reports in a single database if they have the same name. This is a general limitation of UnityDataTool where it assumes all SerializedFiles have unique filenames. +## Working with Multiple Build Reports -The `build_report_packed_asset_info.type` will record a valid [Class ID](https://docs.unity3d.com/Manual/ClassIDReference.html) for the type of each object. However there may be no string version of this type in the `types` table. That is because the types table is only populated when processing instances of those object types (e.g. part of the TypeTree analysis). So if you analyze both the build output and the build report together the types should be fully populated, otherwise only the numeric value is available. +So long as the file names of each build report is different, `analyze` can import multiple files into the same database. That can be useful for seeing a comprehensive history of builds, for comparison or looking for duplicated data between Player and AssetBundle builds. -### Information that is not exported - -Only a subset of information is currently extracted from the BuildReport. Initially the focus is on the most useful information, not attempting to fully export the entire BuildReport into SQL. More support can be added as needed. Possible data to add would be: - -* The BuildReport.m_Files array -* the BuildReport.m_BuildSteps array -* BuildAssetBundleInfoSet appendix (reporting which files belong inside each AssetBundle) -* [code stripping](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-strippingInfo.html) appendix (available for IL2CPP player builds) -* [ScenesUsingAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-scenesUsingAssets.html) available in some detailed build reports. +The following sections that detail the schema can be useful for writing queries that work correctly with multiple build reports in the same database. ## Alternatives -Using UnityDataTool to look at the BuildReport is rather low-level, so it is a good idea to consider other options that may be easier. +Using UnityDataTool to look at the BuildReport is rather low-level, so it is a good idea to consider other options to find the easiest and most convenient approach. ### Inspecting within Unity @@ -72,7 +41,7 @@ You can view BuildReports using the [BuildReportInspector](https://github.com/Un ### API access within Unity -From within the Unity Editor you can retrive information from a BuildReport using the BuildReport API. +From within the Unity Editor you can retrieve information from a BuildReport using the BuildReport API. There are three ways to load a BuildReport @@ -144,8 +113,113 @@ The resulting file will tend to be a lot larger. You can also get a text versio The "dump" command of UnityDataTool can be used to get a non-YAML text representation of the BuildReport contents. -The text formats can potentially be useful for quick extraction of very specific information using text processing tools (YAML, regular expression text searching etc). +The text formats can potentially be useful for quick extraction of very specific information using text processing tools (YAML, regular expression text searching etc). But when working with the full structured data it is better to use the UnityDataTool analyze support, or the Unity BuildReport API. ### Addressables Build Layout Support When using the Addressables package, the equivalent to a BuildReport is the `buildlayout.json` file. This is an entirely different file format and schema, but it records much of the same information as the BuildReport. The UnityDataTool analyze command supports importing these files, see [Addressables Build Reports](addressables-build-reports.md) for details. + +## BuildReport Schema + +The BuildReport is represented in the following tables and views: + +| Name in Database | Type | Description/Notes | +|-----------------------------------------------|---------|------------------| +| build_reports | table | BuildReport summary (build type, result, platform, duration etc) | +| build_report_files | table | Files included in the build (path, role, size). Corresponds to [BuildReport.GetFiles](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.GetFiles.html) | +| build_report_archive_contents | table | Tracks the files inside each AssetBundle | +| build_report_packed_assets | table | Info about a SerializedFile, .resS or .resource file in the build output. See [PackedAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.PackedAssets.html) | +| build_report_packed_asset_info | table | Info about each object inside a Serialized file (or data owned by an object inside a .resS or .resource file). See [PackedAssetInfo](https://docs.unity3d.com/ScriptReference/Build.Reporting.PackedAssetInfo.html) | +| build_report_source_assets | table | AssetDatabase GUID and path for each source asset referenced from a PackedAssetInfo | +| build_report_files_view | view | List all files from each build report | +| build_report_packed_assets_view | view | List of all PackedAssets in the database, along with which BuildReport, AssetBundle and Serialized File they correspond to | +| build_report_packed_asset_contents_view | view | List of all objects and object resources tracked in the build reports | + +The build_reports table has the primary information for looking at the inputs and results of a build. For analysis of the contents of the build the raw data is recorded in the additional tables. The views are provided for convenience, making it easier to work with the file and PackedAsset information without needing to join multiple tables, especially in the case where multiple build reports are being analyzed in the same database. + +### Overview of the Schema + +Several views are provided that automatically show which build report the data comes from, which aids in working with multiple reports in the same file. However to create your own queries that work correctly it is useful to understand the relationships between the tables. This section gives a high level overview of the schema, for details refer to the actual table and view definitions. + +The build_reports table will have one entry per BuildReport file analyzed. More precisely each row corresponds (through the `id` column) to the BuildReport object tracked inside the `objects` table. This object is where the main information about the build is stored, and there is always only one BuildReport object per BuildReport file. The `id` column makes possible to JOIN from the build_reports table to the objects table to find the object. And from that its possible to find the file containing the BuildReport (objects.serialized_file) and a lot of other information. + +Similarly build_report_packed_assets records the `id` of the PackedAssets object, which can be used to JOIN into the `objects` table. build_report_packed_assets doesn't directly record the `id` of the BuildReport object (because PackedAsset objects are processed individually and independently of the BuildReport object). However it is possible to find the associated BuildReport object based on the shared `objects.serialized_file` value. + +Note: There is also a relationship between the BuildReport and PackedAsset objects recorded in the `refs` table. That exists because the BuildReport has references to each PackedAsset object in its appendices array. However the population of the `refs` table is optional so this is not used for the definition of the built in views. + +The auxiliary tables such as build_report_files and build_report_archive_contents record the `id` of the BuildReport object that each row belongs to. Similarly the build_report_packed_asset_info records the `id` of the PackedAssets object that each row belongs to. + +The build_report_source_assets table records the distinct source info (GUID and path) globally for all build_report_packed_asset_info entries. This is linked through the build_report_packed_asset_info.source_asset_id and build_report_source_assets.id columns. + +Example 1: + +The `build_report_packed_assets_view` demonstrates some of these relationships. Specifically it finds the BuildReport object (br_obj) based on its Unity object type (1125) and the fact it is in the same serialized_file as the PackedAsset (pa). It retrieves the name of the serialized file from the serialized_files table (sf.name). For AssetBundle builds the PackedAsset path is the name of a file inside a Unity archive, so the view also retrieves the AssetBundle name from the build_report_archive_contents table (brac.assetbundle) by matching the BuildReport id and the PackedAsset path. The AssetBundle name will be null for Player builds. + +``` +CREATE VIEW build_report_packed_assets_view AS +SELECT + pa.id, + o.object_id, + brac.assetbundle, + sf.name as build_report, + pa.path, + pa.file_header_size +FROM build_report_packed_assets pa +INNER JOIN objects o ON pa.id = o.id +INNER JOIN serialized_files sf ON o.serialized_file = sf.id +LEFT JOIN objects br_obj ON o.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 +LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id AND pa.path = brac.assetbundle_content; +``` + +Example 2: + +The `build_report_packed_asset_contents_view` shows all the entries in the build_report_packed_asset_info table and uses + +The `build_report_packed_asset_contents_view` makes use of the `object_view` rather than raw access to `objects`. That makes it a little easier to retrieve the filename of the BuildReport (`o.serialized_file`). + +``` +CREATE VIEW build_report_packed_asset_contents_view AS +SELECT + o.serialized_file, + pa.path, + pac.packed_assets_id, + pac.object_id, + pac.type, + pac.size, + pac.offset, + sa.source_asset_guid, + sa.build_time_asset_path +FROM build_report_packed_asset_info pac +LEFT JOIN build_report_packed_assets pa ON pac.packed_assets_id = pa.id +LEFT JOIN object_view o ON o.id = pa.id +LEFT JOIN build_report_source_assets sa ON pac.source_asset_id = sa.id; +``` + +### Notes on column naming + +For consistency and clarify, the SQL representation uses slightly different names than the BuildReport API for some fields. + +| Name in Database | Name in BuildReport API | Notes | +|---------------------------------------|--------------------------|-------| +| build_report_packed_assets.path | PackedAssets.ShortPath | Filename of the Serialized File, .resS or .resource file. This is the only path that is recorded, so "short" was redundant | +| build_report_packed_assets.file_header_size | PackedAssets.Overhead | The "overhead" is the size of the file header (zero for .resS and .resource files) | +| build_report_packed_asset_info.object_id | PackedAssetsInfo.fileID | Local file ID of the object in the build output. Named object_id for consistency with objects.object_id | +| build_report_packed_asset_info.type | PackedAssetsInfo.classID | Type of the Unity Object. Named type for consistency with objects.type | + +## Limitations + +Currently you cannot analyze multiple build reports in a single database if they have the same name. This is a general limitation of UnityDataTool where it assumes all SerializedFiles have unique filenames. + +The `build_report_packed_asset_info.type` will record a valid [Class ID](https://docs.unity3d.com/Manual/ClassIDReference.html) for the type of each object. However there may be no string version of this type in the `types` table. That is because the types table is only populated when processing instances of those object types (e.g. part of the TypeTree analysis). So if you analyze both the build output and the build report together the types should be fully populated, otherwise only the numeric value is available. + +### Information that is not exported + +Only a subset of information is currently extracted from the BuildReport. Initially the focus is on the most useful information, not attempting to fully export the entire BuildReport into SQL. More support can be added as needed. Possible data to add would be: + +* [code stripping](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-strippingInfo.html) appendix (available for IL2CPP player builds) +* [ScenesUsingAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-scenesUsingAssets.html) available in some detailed build reports. +* the BuildReport.m_BuildSteps array. SQL is not necessarily the ideal format for working with this hierarchical data. +* BuildAssetBundleInfoSet appendix (an undocumented object that reports which files belong inside each AssetBundle). Currently the build_report_archive_contents is populated based on analysis of the BuildReport object's File list. + +There are also some appendices used for purely analytics purposes, it is unlikely these would be valuable to analyze. + diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index e4b8fa6..982917e 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -459,8 +459,15 @@ public async Task Analyze_BuildReports_BothReports_ContainsBuildReportFilesData( // Verify PackedAssets from Player build have NULL assetbundle var playerPackedAssetsWithNullBundle = SQLTestHelper.QueryInt(db, @"SELECT COUNT(*) FROM build_report_packed_assets_view - WHERE serialized_file = 'Player.buildreport' AND assetbundle IS NULL"); + WHERE build_report = 'Player.buildreport' AND assetbundle IS NULL"); Assert.That(playerPackedAssetsWithNullBundle, Is.GreaterThan(0), "Expected PackedAssets from Player.buildreport to have NULL assetbundle"); + + var playerPackedAssetsWithNonNullBundle = SQLTestHelper.QueryInt(db, + @"SELECT COUNT(*) FROM build_report_packed_assets_view + WHERE build_report = 'Player.buildreport' AND assetbundle IS NOT NULL"); + Assert.AreEqual(0, playerPackedAssetsWithNonNullBundle, + "Expected all PackedAssets from Player.buildreport have NULL assetbundle"); + } } From 33bcabb6e2209e4459b9fb17b5bfba83d7f89d21 Mon Sep 17 00:00:00 2001 From: Andrew Skowronski Date: Tue, 30 Dec 2025 09:41:33 -0500 Subject: [PATCH 17/17] Finishing work on docs, fix for AddrBuilds.sql Improving PackedAsset views to make them more usable for working with AssetBundles Adding examples Remove accidental change to another table --- Analyzer/Resources/AddrBuilds.sql | 1 - Analyzer/Resources/PackedAssets.sql | 18 +- Documentation/buildreport.md | 227 +++++++++++++----------- UnityDataTool.Tests/BuildReportTests.cs | 5 +- 4 files changed, 140 insertions(+), 111 deletions(-) diff --git a/Analyzer/Resources/AddrBuilds.sql b/Analyzer/Resources/AddrBuilds.sql index 97e535c..7e047f2 100644 --- a/Analyzer/Resources/AddrBuilds.sql +++ b/Analyzer/Resources/AddrBuilds.sql @@ -4,7 +4,6 @@ CREATE TABLE IF NOT EXISTS addressables_builds name TEXT, build_target INTEGER, start_time TEXT, - end_time TEXT, duration REAL, error TEXT, package_version TEXT, diff --git a/Analyzer/Resources/PackedAssets.sql b/Analyzer/Resources/PackedAssets.sql index 40c788c..dd55bb0 100644 --- a/Analyzer/Resources/PackedAssets.sql +++ b/Analyzer/Resources/PackedAssets.sql @@ -28,9 +28,10 @@ SELECT pa.id, o.object_id, brac.assetbundle, - sf.name as build_report, pa.path, - pa.file_header_size + pa.file_header_size, + br_obj.id as build_report_id, + sf.name as build_report_filename FROM build_report_packed_assets pa INNER JOIN objects o ON pa.id = o.id INNER JOIN serialized_files sf ON o.serialized_file = sf.id @@ -39,7 +40,8 @@ LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id CREATE VIEW build_report_packed_asset_contents_view AS SELECT - o.serialized_file, + sf.name as serialized_file, + brac.assetbundle, pa.path, pac.packed_assets_id, pac.object_id, @@ -47,9 +49,13 @@ SELECT pac.size, pac.offset, sa.source_asset_guid, - sa.build_time_asset_path + sa.build_time_asset_path, + br_obj.id as build_report_id FROM build_report_packed_asset_info pac LEFT JOIN build_report_packed_assets pa ON pac.packed_assets_id = pa.id -LEFT JOIN object_view o ON o.id = pa.id -LEFT JOIN build_report_source_assets sa ON pac.source_asset_id = sa.id; +LEFT JOIN objects o ON o.id = pa.id +INNER JOIN serialized_files sf ON o.serialized_file = sf.id +LEFT JOIN build_report_source_assets sa ON pac.source_asset_id = sa.id +LEFT JOIN objects br_obj ON o.serialized_file = br_obj.serialized_file AND br_obj.type = 1125 +LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id AND pa.path = brac.assetbundle_content; diff --git a/Documentation/buildreport.md b/Documentation/buildreport.md index 9c67a62..1ce1d87 100644 --- a/Documentation/buildreport.md +++ b/Documentation/buildreport.md @@ -1,53 +1,93 @@ -# BuildReport support +# BuildReport Support -The [BuildReport](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.html) file is written by Player builds. It is also written when AssetBundles are built using [BuildPipeline.BuildAssetBundle](https://docs.unity3d.com/ScriptReference/BuildPipeline.BuildAssetBundles.html). However it is not written by the [Addressables](addressables-build-reports.md) package, nor builds make with the Scriptable Build Pipeline package. +Unity generates a [BuildReport](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.html) file for Player builds and when building AssetBundles via [BuildPipeline.BuildAssetBundles](https://docs.unity3d.com/ScriptReference/BuildPipeline.BuildAssetBundles.html). Build reports are **not** generated by the [Addressables](addressables-build-reports.md) package or Scriptable Build Pipeline. -This file is currently written to `Library/LastBuild.buildReport`. By default this is a Unity binary serialized file, the same format that Unity uses for build output. Because UnityDataTool supports reading this format it can read this file and extract information about the build results, using the same mechanisms used for other Unity object types. +Build reports are written to `Library/LastBuild.buildreport` as Unity SerializedFiles (the same binary format used for build output). UnityDataTool can read this format and extract detailed build information using the same mechanisms as other Unity object types. -## UnityDataTool support +## UnityDataTool Support -Because it is a SerializedFile you can [`dump`](command-dump.md) it into text format. +Since build reports are SerializedFiles, you can use [`dump`](command-dump.md) to convert them to text format. -The [`analyze`](command-analyze.md) command now has custom support for BuildReport files. When you analyze a BuildReport file it will extract information into dedicated tables in the output database. +The [`analyze`](command-analyze.md) command extracts build report data into dedicated database tables with custom handlers for: -Specifically there are now custom handlers for the following types: +* **BuildReport** - The primary object containing build inputs and results +* **PackedAssets** - Describes the contents of each SerializedFile, .resS, or .resource file, including type, size, and source asset for each object or resource blob, enabling object-level analysis -* **BuildReport** - The primary object that reports the inputs and results for a Unity build. -* **PackedAssets** - An object that describes the contents of a specific Serialized file, or resource file. It records information such as the type, size and source asset for each object or resource blob. This makes it possible to do analysis of the content down to the object level. Note: the PackedAsset information is currently not written for Scenes in the build. +**Note:** PackedAssets information is not currently written for scenes in the build. -## Cross referencing with the build result +## Examples -A suggested usage is to run analyze on both the build results and the matching BuildReport file. For best results this should be a clean build, so that the PackedAsset information is fully populated in the BuildReport. You may need to temporarily copy the BuildReport file into the build output location, so that it is found by your call to analyze. +These are some example queries that can be run after running analyze on a build report file. -The PackedAsset information adds the extra information about the source asset of each object that is missing when only analyzing the build output. The PackedAsset will list objects in the same order as they are found in the output Serialized file, resS or resource file. +1. Show all successful builds recorded in the database. -In the database this means that a row in the `build_report_packed_assets` table can matched with the associated analyzed Serialized file through the `object_view_.serialized_file` and `build_report_packed_assets.path` values. Similarly the `build_report_packed_asset_info` entries can be matched to the objects in the build output based on the `object_id` (local file id). +``` +SELECT * from build_reports WHERE build_result = "Succeeded" +``` + +2. Show information about the data in the build that originates from "Assets/Sprites/Snow.jpg". + +``` +SELECT * +FROM build_report_packed_asset_contents_view +WHERE build_time_asset_path like "Assets/Sprites/Snow.jpg" +``` + +3. Show the AssetBundles that contain content from "Assets/Sprites/Snow.jpg". + +``` +SELECT DISTINCT assetbundle +FROM build_report_packed_asset_contents_view +WHERE build_time_asset_path like "Assets/Sprites/Snow.jpg" +``` + +4. Show all source assets included in the build (excluding C# scripts, e.g. MonoScript objects) + +``` +SELECT build_time_asset_path from build_report_source_assets WHERE build_time_asset_path NOT LIKE "%.cs" +``` + +## Cross-Referencing with Build Output + +For comprehensive analysis, run `analyze` on both the build output **and** the matching build report file. Use a clean build to ensure PackedAssets information is fully populated. You may need to copy the build report into the build output directory so both are found by `analyze`. -Note: currently the source local file id is not recorded in the PackedAssetInfo entry. So, while you can find the source asset (e.g. which prefab), it is not possible to directly pinpoint the precise object within that asset. When necessary it is often possible to determine the precise object in a more ad hoc way, based on its name or other distinguishing values. +PackedAssets data provides source asset information for each object that isn't available when analyzing only the build output. Objects are listed in the same order as they appear in the output SerializedFile, .resS, or .resource file. + +### Database Relationships + +- Match `build_report_packed_assets` rows to analyzed SerializedFiles using `object_view.serialized_file` and `build_report_packed_assets.path` +- Match `build_report_packed_asset_info` entries to objects in the build output using `object_id` (local file ID) + +**Note:** build_report_packed_assets` also record .resS and .resource files. These rows will not match with the serialized_files table. + +**Note:** The source object's local file ID is not recorded in PackedAssetInfo. While you can identify the source asset (e.g., which Prefab), you cannot directly pinpoint the specific object within that asset. When needed, objects can often be distinguished by name or other properties. ## Working with Multiple Build Reports -So long as the file names of each build report is different, `analyze` can import multiple files into the same database. That can be useful for seeing a comprehensive history of builds, for comparison or looking for duplicated data between Player and AssetBundle builds. +Multiple build reports can be imported into the same database if their filenames differ. This enables: +- Comprehensive build history tracking +- Cross-build comparisons +- Identifying duplicated data between Player and AssetBundle builds -The following sections that detail the schema can be useful for writing queries that work correctly with multiple build reports in the same database. +See the schema sections below for guidance on writing queries that handle multiple build reports correctly. ## Alternatives -Using UnityDataTool to look at the BuildReport is rather low-level, so it is a good idea to consider other options to find the easiest and most convenient approach. +UnityDataTool provides low-level access to build reports. Consider these alternatives for easier or more convenient workflows: -### Inspecting within Unity +### BuildReportInspector Package -You can view BuildReports using the [BuildReportInspector](https://github.com/Unity-Technologies/BuildReportInspector) package. +View build reports in the Unity Editor using the [BuildReportInspector](https://github.com/Unity-Technologies/BuildReportInspector) package. -### API access within Unity +### BuildReport API -From within the Unity Editor you can retrieve information from a BuildReport using the BuildReport API. +Access build report data programmatically within Unity using the BuildReport API: -There are three ways to load a BuildReport +**1. Most recent build:** +Use [BuildPipeline.GetLatestReport()](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.GetLatestReport.html) -1. Results of the most recently completed build can be accessed using [BuildPipeline.GetLastBuildReport()](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.GetLatestReport.html). - -2. If the build report is saved inside your Assets folder you can load it using the AssetDatabase API. For example: +**2. Build report in Assets folder:** +Load via AssetDatabase API: ```csharp using UnityEditor; @@ -68,7 +108,8 @@ public class BuildReportInProjectUtility } ``` -3. If the file is outside your assets folder (for example inside the Library folder) you can load it using code like this: +**3. Build report outside Assets folder:** +For files in Library or elsewhere, use `InternalEditorUtility`: ```csharp @@ -103,57 +144,65 @@ public class BuildReportUtility } ``` -### Text parsing +### Text Format Access -The BuildReport can be output in Unity's pseudo-YAML format instead of binary, using a diagnostic flag. +Build reports can be output in Unity's pseudo-YAML format using a diagnostic flag: ![](Diagnostics-TextBasedBuildReport.png) -The resulting file will tend to be a lot larger. You can also get a text version by copying or moving the binary file into your Unity project (because, by default, assets are stored in Unity's text format instead of binary). - -The "dump" command of UnityDataTool can be used to get a non-YAML text representation of the BuildReport contents. +Text files are significantly larger than binary. You can also convert to text by moving the binary file into your Unity project (assets default to text format). -The text formats can potentially be useful for quick extraction of very specific information using text processing tools (YAML, regular expression text searching etc). But when working with the full structured data it is better to use the UnityDataTool analyze support, or the Unity BuildReport API. +UnityDataTool's `dump` command produces a non-YAML text representation of build report contents. -### Addressables Build Layout Support +**When to use text formats:** +- Quick extraction of specific information via text processing tools (regex, YAML parsers, etc.) -When using the Addressables package, the equivalent to a BuildReport is the `buildlayout.json` file. This is an entirely different file format and schema, but it records much of the same information as the BuildReport. The UnityDataTool analyze command supports importing these files, see [Addressables Build Reports](addressables-build-reports.md) for details. +**When to use structured access:** +- Working with full structured data: use UnityDataTool's `analyze` command or Unity's BuildReport API -## BuildReport Schema +### Addressables Build Reports -The BuildReport is represented in the following tables and views: +The Addressables package generates `buildlayout.json` files instead of BuildReport files. While the format and schema differ, they contain similar information. See [Addressables Build Reports](addressables-build-reports.md) for details on importing these files with UnityDataTool. -| Name in Database | Type | Description/Notes | -|-----------------------------------------------|---------|------------------| -| build_reports | table | BuildReport summary (build type, result, platform, duration etc) | -| build_report_files | table | Files included in the build (path, role, size). Corresponds to [BuildReport.GetFiles](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.GetFiles.html) | -| build_report_archive_contents | table | Tracks the files inside each AssetBundle | -| build_report_packed_assets | table | Info about a SerializedFile, .resS or .resource file in the build output. See [PackedAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.PackedAssets.html) | -| build_report_packed_asset_info | table | Info about each object inside a Serialized file (or data owned by an object inside a .resS or .resource file). See [PackedAssetInfo](https://docs.unity3d.com/ScriptReference/Build.Reporting.PackedAssetInfo.html) | -| build_report_source_assets | table | AssetDatabase GUID and path for each source asset referenced from a PackedAssetInfo | -| build_report_files_view | view | List all files from each build report | -| build_report_packed_assets_view | view | List of all PackedAssets in the database, along with which BuildReport, AssetBundle and Serialized File they correspond to | -| build_report_packed_asset_contents_view | view | List of all objects and object resources tracked in the build reports | +## Database Schema -The build_reports table has the primary information for looking at the inputs and results of a build. For analysis of the contents of the build the raw data is recorded in the additional tables. The views are provided for convenience, making it easier to work with the file and PackedAsset information without needing to join multiple tables, especially in the case where multiple build reports are being analyzed in the same database. +Build report data is stored in the following tables and views: -### Overview of the Schema +| Name | Type | Description | +|------|------|-------------| +| `build_reports` | table | Build summary (type, result, platform, duration, etc.) | +| `build_report_files` | table | Files included in the build (path, role, size). See [BuildReport.GetFiles](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport.GetFiles.html) | +| `build_report_archive_contents` | table | Files inside each AssetBundle | +| `build_report_packed_assets` | table | SerializedFile, .resS, or .resource file info. See [PackedAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.PackedAssets.html) | +| `build_report_packed_asset_info` | table | Each object inside a SerializedFile (or data in .resS/.resource files). See [PackedAssetInfo](https://docs.unity3d.com/ScriptReference/Build.Reporting.PackedAssetInfo.html) | +| `build_report_source_assets` | table | Source asset GUID and path for each PackedAssetInfo reference | +| `build_report_files_view` | view | All files from all build reports | +| `build_report_packed_assets_view` | view | All PackedAssets with their BuildReport, AssetBundle, and SerializedFile | +| `build_report_packed_asset_contents_view` | view | All objects and resources tracked in build reports | -Several views are provided that automatically show which build report the data comes from, which aids in working with multiple reports in the same file. However to create your own queries that work correctly it is useful to understand the relationships between the tables. This section gives a high level overview of the schema, for details refer to the actual table and view definitions. +The `build_reports` table contains primary build information. Additional tables store detailed content data. Views simplify queries by automatically joining tables, especially when working with multiple build reports. -The build_reports table will have one entry per BuildReport file analyzed. More precisely each row corresponds (through the `id` column) to the BuildReport object tracked inside the `objects` table. This object is where the main information about the build is stored, and there is always only one BuildReport object per BuildReport file. The `id` column makes possible to JOIN from the build_reports table to the objects table to find the object. And from that its possible to find the file containing the BuildReport (objects.serialized_file) and a lot of other information. +### Schema Overview -Similarly build_report_packed_assets records the `id` of the PackedAssets object, which can be used to JOIN into the `objects` table. build_report_packed_assets doesn't directly record the `id` of the BuildReport object (because PackedAsset objects are processed individually and independently of the BuildReport object). However it is possible to find the associated BuildReport object based on the shared `objects.serialized_file` value. +Views automatically identify which build report each row belongs to, simplifying multi-report queries. To create custom queries, understand the table relationships: -Note: There is also a relationship between the BuildReport and PackedAsset objects recorded in the `refs` table. That exists because the BuildReport has references to each PackedAsset object in its appendices array. However the population of the `refs` table is optional so this is not used for the definition of the built in views. +**Primary relationships:** +- `build_reports`: One row per analyzed BuildReport file, corresponding to the BuildReport object in the `objects` table via the `id` column +- `build_report_packed_assets`: Records the `id` of each PackedAssets object. Find the associated BuildReport via the shared `objects.serialized_file` value (PackedAssets are processed independently of BuildReport objects) -The auxiliary tables such as build_report_files and build_report_archive_contents record the `id` of the BuildReport object that each row belongs to. Similarly the build_report_packed_asset_info records the `id` of the PackedAssets object that each row belongs to. +**Auxiliary tables:** +- `build_report_files` and `build_report_archive_contents`: Stores the BuildReport object `id` for each row (as `build_report_id`). +- `build_report_packed_asset_info`: Stores the PackedAssets object `id` for each row (as `packed_assets_id`). +- `build_report_source_assets`: Normalized table of distinct source asset GUIDs and paths, linked via `build_report_packed_asset_info.source_asset_id` -The build_report_source_assets table records the distinct source info (GUID and path) globally for all build_report_packed_asset_info entries. This is linked through the build_report_packed_asset_info.source_asset_id and build_report_source_assets.id columns. +**Note:** BuildReport and PackedAssets objects are also linked in the `refs` table (BuildReport references PackedAssets in its appendices array), but this relationship is not used in built-in views since `refs` table population is optional. -Example 1: +**Example: build_report_packed_assets_view** -The `build_report_packed_assets_view` demonstrates some of these relationships. Specifically it finds the BuildReport object (br_obj) based on its Unity object type (1125) and the fact it is in the same serialized_file as the PackedAsset (pa). It retrieves the name of the serialized file from the serialized_files table (sf.name). For AssetBundle builds the PackedAsset path is the name of a file inside a Unity archive, so the view also retrieves the AssetBundle name from the build_report_archive_contents table (brac.assetbundle) by matching the BuildReport id and the PackedAsset path. The AssetBundle name will be null for Player builds. +This view demonstrates key relationships: +- Finds the BuildReport object (`br_obj`) by type (1125) and shared `serialized_file` with the PackedAssets (`pa`) +- Retrieves the serialized file name from `serialized_files` table (`sf.name`) +- For AssetBundle builds, retrieves the AssetBundle name from `build_report_archive_contents` by matching BuildReport ID and PackedAssets path (`assetbundle` is NULL for Player builds) ``` CREATE VIEW build_report_packed_assets_view AS @@ -161,9 +210,10 @@ SELECT pa.id, o.object_id, brac.assetbundle, - sf.name as build_report, pa.path, - pa.file_header_size + pa.file_header_size, + br_obj.id as build_report_id, + sf.name as build_report_filename FROM build_report_packed_assets pa INNER JOIN objects o ON pa.id = o.id INNER JOIN serialized_files sf ON o.serialized_file = sf.id @@ -171,55 +221,30 @@ LEFT JOIN objects br_obj ON o.serialized_file = br_obj.serialized_file AND br_ob LEFT JOIN build_report_archive_contents brac ON br_obj.id = brac.build_report_id AND pa.path = brac.assetbundle_content; ``` -Example 2: +### Column Naming -The `build_report_packed_asset_contents_view` shows all the entries in the build_report_packed_asset_info table and uses +For consistency and clarity, database columns use slightly different names than the BuildReport API: -The `build_report_packed_asset_contents_view` makes use of the `object_view` rather than raw access to `objects`. That makes it a little easier to retrieve the filename of the BuildReport (`o.serialized_file`). - -``` -CREATE VIEW build_report_packed_asset_contents_view AS -SELECT - o.serialized_file, - pa.path, - pac.packed_assets_id, - pac.object_id, - pac.type, - pac.size, - pac.offset, - sa.source_asset_guid, - sa.build_time_asset_path -FROM build_report_packed_asset_info pac -LEFT JOIN build_report_packed_assets pa ON pac.packed_assets_id = pa.id -LEFT JOIN object_view o ON o.id = pa.id -LEFT JOIN build_report_source_assets sa ON pac.source_asset_id = sa.id; -``` - -### Notes on column naming - -For consistency and clarify, the SQL representation uses slightly different names than the BuildReport API for some fields. - -| Name in Database | Name in BuildReport API | Notes | -|---------------------------------------|--------------------------|-------| -| build_report_packed_assets.path | PackedAssets.ShortPath | Filename of the Serialized File, .resS or .resource file. This is the only path that is recorded, so "short" was redundant | -| build_report_packed_assets.file_header_size | PackedAssets.Overhead | The "overhead" is the size of the file header (zero for .resS and .resource files) | -| build_report_packed_asset_info.object_id | PackedAssetsInfo.fileID | Local file ID of the object in the build output. Named object_id for consistency with objects.object_id | -| build_report_packed_asset_info.type | PackedAssetsInfo.classID | Type of the Unity Object. Named type for consistency with objects.type | +| Database Column | BuildReport API | Notes | +|-----------------|-----------------|-------| +| `build_report_packed_assets.path` | `PackedAssets.ShortPath` | Filename of the SerializedFile, .resS, or .resource file ("short" was redundant since only one path is recorded) | +| `build_report_packed_assets.file_header_size` | `PackedAssets.Overhead` | Size of the file header (zero for .resS and .resource files) | +| `build_report_packed_asset_info.object_id` | `PackedAssetInfo.fileID` | Local file ID of the object (renamed for consistency with `objects.object_id`) | +| `build_report_packed_asset_info.type` | `PackedAssetInfo.classID` | Unity object type (renamed for consistency with `objects.type`) | ## Limitations -Currently you cannot analyze multiple build reports in a single database if they have the same name. This is a general limitation of UnityDataTool where it assumes all SerializedFiles have unique filenames. - -The `build_report_packed_asset_info.type` will record a valid [Class ID](https://docs.unity3d.com/Manual/ClassIDReference.html) for the type of each object. However there may be no string version of this type in the `types` table. That is because the types table is only populated when processing instances of those object types (e.g. part of the TypeTree analysis). So if you analyze both the build output and the build report together the types should be fully populated, otherwise only the numeric value is available. +**Duplicate filenames:** Multiple build reports cannot be imported into the same database if they share the same filename. This is a general UnityDataTool limitation that assumes unique SerializedFile names. -### Information that is not exported +**Type names:** While `build_report_packed_asset_info.type` records valid [Class IDs](https://docs.unity3d.com/Manual/ClassIDReference.html), the string type name may not exist in the `types` table. The `types` table is only populated when processing object instances (during TypeTree analysis). Analyzing both build output **and** build report together ensures types are fully populated; otherwise only numeric IDs are available. -Only a subset of information is currently extracted from the BuildReport. Initially the focus is on the most useful information, not attempting to fully export the entire BuildReport into SQL. More support can be added as needed. Possible data to add would be: +### Information Not Exported -* [code stripping](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-strippingInfo.html) appendix (available for IL2CPP player builds) -* [ScenesUsingAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-scenesUsingAssets.html) available in some detailed build reports. -* the BuildReport.m_BuildSteps array. SQL is not necessarily the ideal format for working with this hierarchical data. -* BuildAssetBundleInfoSet appendix (an undocumented object that reports which files belong inside each AssetBundle). Currently the build_report_archive_contents is populated based on analysis of the BuildReport object's File list. +Currently, only the most useful BuildReport data is extracted to SQL. Additional data may be added as needed: -There are also some appendices used for purely analytics purposes, it is unlikely these would be valuable to analyze. +* [Code stripping](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-strippingInfo.html) appendix (IL2CPP Player builds) +* [ScenesUsingAssets](https://docs.unity3d.com/ScriptReference/Build.Reporting.BuildReport-scenesUsingAssets.html) (detailed build reports) +* `BuildReport.m_BuildSteps` array (SQL may not be ideal for this hierarchical data) +* `BuildAssetBundleInfoSet` appendix (undocumented object listing files in each AssetBundle; `build_report_archive_contents` currently derives this from the File list) +* Analytics-only appendices (unlikely to be valuable for analysis) diff --git a/UnityDataTool.Tests/BuildReportTests.cs b/UnityDataTool.Tests/BuildReportTests.cs index 982917e..7378de4 100644 --- a/UnityDataTool.Tests/BuildReportTests.cs +++ b/UnityDataTool.Tests/BuildReportTests.cs @@ -459,15 +459,14 @@ public async Task Analyze_BuildReports_BothReports_ContainsBuildReportFilesData( // Verify PackedAssets from Player build have NULL assetbundle var playerPackedAssetsWithNullBundle = SQLTestHelper.QueryInt(db, @"SELECT COUNT(*) FROM build_report_packed_assets_view - WHERE build_report = 'Player.buildreport' AND assetbundle IS NULL"); + WHERE build_report_filename = 'Player.buildreport' AND assetbundle IS NULL"); Assert.That(playerPackedAssetsWithNullBundle, Is.GreaterThan(0), "Expected PackedAssets from Player.buildreport to have NULL assetbundle"); var playerPackedAssetsWithNonNullBundle = SQLTestHelper.QueryInt(db, @"SELECT COUNT(*) FROM build_report_packed_assets_view - WHERE build_report = 'Player.buildreport' AND assetbundle IS NOT NULL"); + WHERE build_report_filename = 'Player.buildreport' AND assetbundle IS NOT NULL"); Assert.AreEqual(0, playerPackedAssetsWithNonNullBundle, "Expected all PackedAssets from Player.buildreport have NULL assetbundle"); - } }