Exemple #1
0
        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);
            }
        }