internal ScopedBuildStep(LogLevel level, string stepName, IBuildLogger logger, bool multiThreaded, string context) { m_Logger = logger; m_Logger?.BeginBuildStep(level, stepName, multiThreaded); if (!string.IsNullOrEmpty(context)) { m_Logger?.AddEntrySafe(level, context); } }
public static ReturnCode RunCachedOperation <T>(IBuildCache cache, IBuildLogger log, IProgressTracker tracker, List <WorkItem <T> > workItems, IRunCachedCallbacks <T> cbs ) { using (log.ScopedStep(LogLevel.Info, "RunCachedOperation")) { List <CacheEntry> cacheEntries = null; List <WorkItem <T> > nonCachedItems = workItems; var cachedItems = new List <WorkItem <T> >(); for (int i = 0; i < workItems.Count; i++) { workItems[i].Index = i; } IList <CachedInfo> cachedInfo = null; if (cache != null) { using (log.ScopedStep(LogLevel.Info, "Creating Cache Entries")) for (int i = 0; i < workItems.Count; i++) { workItems[i].entry = cbs.CreateCacheEntry(workItems[i]); } cacheEntries = workItems.Select(i => i.entry).ToList(); using (log.ScopedStep(LogLevel.Info, "Load Cached Data")) cache.LoadCachedData(cacheEntries, out cachedInfo); cachedItems = workItems.Where(x => cachedInfo[x.Index] != null).ToList(); nonCachedItems = workItems.Where(x => cachedInfo[x.Index] == null).ToList(); } using (log.ScopedStep(LogLevel.Info, "Process Entries")) foreach (WorkItem <T> item in nonCachedItems) { if (!tracker.UpdateInfoUnchecked(item.StatusText)) { return(ReturnCode.Canceled); } cbs.ProcessUncached(item); } using (log.ScopedStep(LogLevel.Info, "Process Cached Entries")) foreach (WorkItem <T> item in cachedItems) { cbs.ProcessCached(item, cachedInfo[item.Index]); } foreach (WorkItem <T> item in workItems) { cbs.PostProcess(item); } if (cache != null) { List <CachedInfo> uncachedInfo; using (log.ScopedStep(LogLevel.Info, "Saving to Cache")) { using (log.ScopedStep(LogLevel.Info, "Creating Cached Infos")) uncachedInfo = nonCachedItems.Select((item) => cbs.CreateCachedInfo(item)).ToList(); cache.SaveCachedData(uncachedInfo); } } log.AddEntrySafe(LogLevel.Info, $"Total Entries: {workItems.Count}, Processed: {nonCachedItems.Count}, Cached: {cachedItems.Count}"); return(ReturnCode.Success); } }