示例#1
0
文件: Args.cs 项目: kittinap/kunnjae
        public int Analyze()
        {
            if (m_analyzer == null)
            {
                return(0);
            }

            m_analyzer.Prepare();
            if (m_analysisInput.ExecutionLogPath != null)
            {
                // NOTE: We call Prepare above so we don't need to prepare as a part of reading the execution log
                var reader = Task.Run(() => m_analyzer.ReadExecutionLog(prepare: false));
                if (m_mode == AnalysisMode.LogCompare)
                {
                    m_analyzerOther.Prepare();
                    var otherReader = Task.Run(() => m_analyzerOther.ReadExecutionLog());
                    otherReader.Wait();
                }

                if (m_mode == AnalysisMode.FailedPipsDump && m_analyzerOther != null)
                {
                    var start = DateTime.Now;
                    Console.WriteLine($"[{start}] Reading compare to Log");
                    var otherReader = Task.Run(() => m_analyzerOther.ReadExecutionLog());
                    otherReader.Wait();
                    var duration = DateTime.Now - start;
                    Console.WriteLine($"Done reading compare to log : duration = [{duration}]");
                }

                reader.Wait();

                if (m_mode == AnalysisMode.CacheMissLegacy)
                {
                    // First pass just to read in PipCacheMissType data
                    var otherReader = Task.Run(() => m_analyzerOther.ReadExecutionLog());
                    otherReader.Wait();

                    // Second pass to do fingerprint differences analysis
                    otherReader = Task.Run(() => m_analyzerOther.ReadExecutionLog());
                    otherReader.Wait();
                }
            }

            var exitCode = m_analyzer.Analyze();

            if (m_mode == AnalysisMode.FailedPipsDump && m_analyzerOther != null)
            {
                var failedPipsDump = (FailedPipsDumpAnalyzer)m_analyzer;
                exitCode = failedPipsDump.Compare(m_analyzerOther);
            }

            if (m_mode == AnalysisMode.LogCompare)
            {
                m_analyzerOther.Analyze();
                SummaryAnalyzer summary = (SummaryAnalyzer)m_analyzer;
                exitCode = summary.Compare((SummaryAnalyzer)m_analyzerOther);
            }

            if (m_mode == AnalysisMode.CacheMissLegacy)
            {
                exitCode = m_analyzerOther.Analyze();
            }

            m_analyzer?.Dispose();
            m_analyzerOther?.Dispose();

            TelemetryShutdown();
            return(exitCode);
        }