private void AnalyzePip(PipCacheMissInfo miss, Process pip, TextWriter writer) { string pipUniqueOutputHashStr = null; if ((pip as Process).TryComputePipUniqueOutputHash(PathTable, out var pipUniqueOutputHash, m_model.CachedGraph.MountPathExpander)) { pipUniqueOutputHashStr = pipUniqueOutputHash.ToString(); } WriteLine(pip.GetDescription(PipGraph.Context)); var analysisResult = CacheMissAnalysisResult.Invalid; if (m_newCacheLookupReader != null && miss.CacheMissType == PipCacheMissType.MissForDescriptorsDueToStrongFingerprints && m_newCacheLookupReader.Store.ContainsFingerprintStoreEntry(pip.FormattedSemiStableHash, pipUniqueOutputHashStr)) { // Strong fingerprint miss analysis is most accurate when compared to the fingerprints computed at cache lookup time // because those fingerprints capture the state of the disk at cache lookup time, including dynamic observations var resultAndDetail = CacheMissAnalysisUtilities.AnalyzeCacheMiss( miss, () => m_oldReader.StartPipRecordingSession(pip, pipUniqueOutputHashStr), () => m_newCacheLookupReader.StartPipRecordingSession(pip, pipUniqueOutputHashStr), CacheMissDiffFormat); analysisResult = resultAndDetail.Result; m_writer?.WriteLine(JsonConvert.SerializeObject(resultAndDetail.Detail)); } else { var resultAndDetail = CacheMissAnalysisUtilities.AnalyzeCacheMiss( miss, () => m_oldReader.StartPipRecordingSession(pip, pipUniqueOutputHashStr), () => m_newReader.StartPipRecordingSession(pip, pipUniqueOutputHashStr), CacheMissDiffFormat); analysisResult = resultAndDetail.Result; m_writer?.WriteLine(JsonConvert.SerializeObject(resultAndDetail.Detail)); } if (analysisResult == CacheMissAnalysisResult.MissingFromOldBuild) { Tracing.Logger.Log.FingerprintStorePipMissingFromOldBuild(LoggingContext); } else if (analysisResult == CacheMissAnalysisResult.MissingFromNewBuild) { Tracing.Logger.Log.FingerprintStorePipMissingFromNewBuild(LoggingContext); } else if (analysisResult == CacheMissAnalysisResult.UncacheablePip) { Tracing.Logger.Log.FingerprintStoreUncacheablePipAnalyzed(LoggingContext); } }
private void AnalyzePip(PipCacheMissInfo miss, Process pip, TextWriter writer) { (pip as Process).TryComputePipUniqueOutputHash(PathTable, out var pipUniqueOutputHash, m_model.CachedGraph.MountPathExpander); WriteLine(pip.GetDescription(PipGraph.Context)); var result = CacheMissAnalysisUtilities.AnalyzeCacheMiss( writer, miss, () => m_oldReader.StartPipRecordingSession(pip, pipUniqueOutputHash.ToString()), () => m_newReader.StartPipRecordingSession(pip, pipUniqueOutputHash.ToString())); if (result == CacheMissAnalysisResult.MissingFromOldBuild) { Tracing.Logger.Log.FingerprintStorePipMissingFromOldBuild(LoggingContext); } else if (result == CacheMissAnalysisResult.MissingFromNewBuild) { Tracing.Logger.Log.FingerprintStorePipMissingFromNewBuild(LoggingContext); } else if (result == CacheMissAnalysisResult.UncacheablePip) { Tracing.Logger.Log.FingerprintStoreUncacheablePipAnalyzed(LoggingContext); } }