/// <inheritdoc/> void IRunCachedCallbacks <Item> .ProcessUncached(WorkItem <Item> item) { IWriteOperation op = m_WriteData.WriteOperations[item.Index]; string targetDir = m_UseCache != null?m_UseCache.GetCachedArtifactsDirectory(item.entry) : m_Parameters.TempOutputFolder; Directory.CreateDirectory(targetDir); using (m_Log.ScopedStep(LogLevel.Info, $"Writing {op.GetType().Name}", op.Command.fileName)) { #if UNITY_2020_2_OR_NEWER || ENABLE_DETAILED_PROFILE_CAPTURING using (new ProfileCaptureScope(m_Log, ProfileCaptureOptions.None)) item.Context.Result = op.Write(targetDir, m_BuildSettings, m_GlobalUsage); #else item.Context.Result = op.Write(targetDir, m_BuildSettings, m_GlobalUsage); #endif } item.Context.MetaData = CalculateFileMetadata(ref item.Context.Result); if (ScriptableBuildPipeline.slimWriteResults) { SlimifySerializedObjects(ref item.Context.Result); } }
private void WriteSerialziedFiles(string bundleName, IWriteOperation op, List <WriteCommand> allCommands, BuildSettings settings, BuildUsageTagGlobal globalUsage, ref List <WriteResult> outResults) { WriteResult result; var dependencies = op.CalculateDependencies(allCommands); var objectIDs = op.command.serializeObjects.Select(x => x.serializationObject).ToArray(); var dependentIDs = dependencies.SelectMany(x => x.serializeObjects.Select(y => y.serializationObject)).ToArray(); BuildUsageTagSet buildUsage = new BuildUsageTagSet(); BundleBuildInterface.CalculateBuildUsageTags(objectIDs, dependentIDs, globalUsage, buildUsage); Hash128 hash = CalculateInputHash(op, dependencies, settings, globalUsage, buildUsage); if (UseCache && BuildCache.TryLoadCachedResults(hash, out result)) { outResults.Add(result); return; } result = op.Write(GetBuildPath(hash), dependencies, settings, globalUsage, buildUsage); outResults.Add(result); if (UseCache && !BuildCache.SaveCachedResults(hash, result)) { BuildLogger.LogWarning("Unable to cache CommandSetWriter results for command '{0}'.", op.command.internalName); } }
void IRunCachedCallbacks <Item> .ProcessUncached(WorkItem <Item> item) { IWriteOperation op = m_WriteData.WriteOperations[item.Index]; string targetDir = m_UseCache != null?m_UseCache.GetCachedArtifactsDirectory(item.entry) : m_Parameters.TempOutputFolder; Directory.CreateDirectory(targetDir); using (m_Log.ScopedStep(LogLevel.Info, $"Writing File {op.GetType().Name}")) item.Context.Result = op.Write(targetDir, m_BuildSettings, m_GlobalUsage); item.Context.MetaData = CalculateFileMetadata(ref item.Context.Result); if (ScriptableBuildPipeline.slimWriteResults) { SlimifySerializedObjects(ref item.Context.Result); } }
/// <inheritdoc /> public ReturnCode Run() { BuildUsageTagGlobal globalUsage = m_DependencyData.GlobalUsage; foreach (var sceneInfo in m_DependencyData.SceneInfo) { globalUsage |= sceneInfo.Value.globalUsage; } IList <CacheEntry> entries = m_WriteData.WriteOperations.Select(x => GetCacheEntry(x, m_Parameters.GetContentBuildSettings(), globalUsage)).ToList(); IList <CachedInfo> cachedInfo = null; IList <CachedInfo> uncachedInfo = null; if (m_Parameters.UseCache && m_Cache != null) { m_Cache.LoadCachedData(entries, out cachedInfo); uncachedInfo = new List <CachedInfo>(); } for (int i = 0; i < m_WriteData.WriteOperations.Count; i++) { IWriteOperation op = m_WriteData.WriteOperations[i]; WriteResult result; if (cachedInfo != null && cachedInfo[i] != null) { if (!m_Tracker.UpdateInfoUnchecked(string.Format("{0} (Cached)", op.Command.internalName))) { return(ReturnCode.Canceled); } result = (WriteResult)cachedInfo[i].Data[0]; } else { if (!m_Tracker.UpdateInfoUnchecked(op.Command.internalName)) { return(ReturnCode.Canceled); } var outputFolder = m_Parameters.TempOutputFolder; if (m_Parameters.UseCache && m_Cache != null) { outputFolder = m_Cache.GetCachedArtifactsDirectory(entries[i]); } Directory.CreateDirectory(outputFolder); result = op.Write(outputFolder, m_Parameters.GetContentBuildSettings(), globalUsage); if (uncachedInfo != null) { uncachedInfo.Add(GetCachedInfo(entries[i], op, result)); } } SetOutputInformation(op.Command.internalName, result); } if (m_Parameters.UseCache && m_Cache != null) { m_Cache.SaveCachedData(uncachedInfo); } return(ReturnCode.Success); }