public void IncrementalPerformance() { // Sample program properties string folder = "Parser" + Path.DirectorySeparatorChar + "Samples"; string textName = "BigBatch"; DocumentFormat documentFormat = DocumentFormat.RDZReferenceFormat; // Create a FileCompiler for this program DirectoryInfo localDirectory = new DirectoryInfo(PlatformUtils.GetPathForProjectFile(folder)); if (!localDirectory.Exists) { throw new Exception(String.Format("Directory : {0} does not exist", localDirectory.FullName)); } CompilationProject project = new CompilationProject("test", localDirectory.FullName, new string[] { ".cbl", ".cpy" }, documentFormat.Encoding, documentFormat.EndOfLineDelimiter, documentFormat.FixedLineLength, documentFormat.ColumnsLayout, new TypeCobolOptions()); FileCompiler compiler = new FileCompiler(null, textName, project.SourceFileProvider, project, documentFormat.ColumnsLayout, new TypeCobolOptions(), null, false, project); //Make an incremental change to the source code TestUtils.CompilationStats stats = new TestUtils.CompilationStats(); ExecuteInceremental(compiler, stats); // Display a performance report TestUtils.CreateRunReport(TestUtils.GetReportDirectoryPath(), compiler.CobolFile.Name + "-Incremental", stats, compiler.CompilationResultsForProgram); }
public static void ExecuteInceremental(FileCompiler compiler, TestUtils.CompilationStats stats) { // Execute a first (complete) compilation compiler.CompileOnce(); //Iterate multiple times over an incremental change stats.IterationNumber = 20; for (int i = 0; i < stats.IterationNumber; i++) { // Append one line in the middle of the program ITextLine newLine = new TextLineSnapshot(9211, "094215D DISPLAY '-ICLAUA = ' ICLAUA. 0000000", null); TextChangedEvent textChangedEvent = new TextChangedEvent(); textChangedEvent.TextChanges.Add(new TextChange(TextChangeType.LineInserted, 9211, newLine)); compiler.CompilationResultsForProgram.UpdateTextLines(textChangedEvent); // Execute a second (incremental) compilation compiler.CompileOnce(); //Accumulate results stats.AverageTextUpdateTime += compiler.CompilationResultsForProgram.PerfStatsForText.LastRefreshTime; stats.AverageScannerTime += compiler.CompilationResultsForProgram.PerfStatsForScanner.LastRefreshTime; stats.AveragePreprocessorTime += compiler.CompilationResultsForProgram.PerfStatsForPreprocessor.LastRefreshTime; stats.AverageCodeElementParserTime += compiler.CompilationResultsForProgram.PerfStatsForCodeElementsParser.LastRefreshTime; stats.AverateTemporarySemanticsParserTime += compiler.CompilationResultsForProgram.PerfStatsForTemporarySemantic.LastRefreshTime; stats.AverageCrossCheckerParserTime += compiler.CompilationResultsForProgram.PerfStatsForProgramCrossCheck.LastRefreshTime; } //Compute average time needed for each phase stats.AverageTextUpdateTime = (int)stats.AverageTextUpdateTime / stats.IterationNumber; stats.AverageScannerTime = (int)stats.AverageScannerTime / stats.IterationNumber; stats.AveragePreprocessorTime = (int)stats.AveragePreprocessorTime / stats.IterationNumber; stats.AverageCodeElementParserTime = (int)stats.AverageCodeElementParserTime / stats.IterationNumber; stats.AverateTemporarySemanticsParserTime = (int)stats.AverateTemporarySemanticsParserTime / stats.IterationNumber; stats.AverageCrossCheckerParserTime = (int)stats.AverageCrossCheckerParserTime / stats.IterationNumber; stats.AverageTotalProcessingTime = stats.AverageCodeElementParserTime + stats.AverageCrossCheckerParserTime + stats.AveragePreprocessorTime + stats.AverageScannerTime + stats.AverageTextUpdateTime + stats.AverateTemporarySemanticsParserTime; }
public void FullParsingAndGenerationTest() { string[] copiesFolder = new string[] { }; string pwd = Directory.GetCurrentDirectory(); var format = TypeCobol.Compiler.DocumentFormat.RDZReferenceFormat; string rootFolder = Directory.GetParent(pwd)?.Parent?.FullName + "\\TypeCobol.Test\\Parser\\Samples"; string textName = "BigBatch"; string filename = Path.GetFileName(textName); string path = Path.Combine(rootFolder, filename); TestUtils.CompilationStats stats = new TestUtils.CompilationStats(); stats.IterationNumber = 20; //Warmup before measurement var documentWarmup = new TypeCobol.Parser(); var optionsWarmup = new TypeCobolOptions { ExecToStep = ExecutionStep.CrossCheck, #if EUROINFO_RULES AutoRemarksEnable = true #endif }; for (int i = 0; i < stats.IterationNumber; i++) { documentWarmup = new TypeCobol.Parser(); documentWarmup.Init(path, optionsWarmup, format, copiesFolder); documentWarmup.Parse(path); var document = new TypeCobol.Parser(); var options = new TypeCobolOptions { ExecToStep = ExecutionStep.CrossCheck, #if EUROINFO_RULES AutoRemarksEnable = true #endif }; document.Init(path, options, format, copiesFolder); document.Parse(path); stats.AverageTextUpdateTime += document.Results.PerfStatsForText.FirstCompilationTime; stats.AverageScannerTime += document.Results.PerfStatsForScanner.FirstCompilationTime; stats.AveragePreprocessorTime += document.Results.PerfStatsForPreprocessor.FirstCompilationTime; stats.AverageCodeElementParserTime += document.Results.PerfStatsForCodeElementsParser.FirstCompilationTime; stats.AverateTemporarySemanticsParserTime += document.Results.PerfStatsForTemporarySemantic.FirstCompilationTime; stats.AverageCrossCheckerParserTime += document.Results.PerfStatsForProgramCrossCheck.FirstCompilationTime; } //Compute average time needed for each phase stats.AverageTextUpdateTime = (int)stats.AverageTextUpdateTime / stats.IterationNumber; stats.AverageScannerTime = (int)stats.AverageScannerTime / stats.IterationNumber; stats.AveragePreprocessorTime = (int)stats.AveragePreprocessorTime / stats.IterationNumber; stats.AverageCodeElementParserTime = (int)stats.AverageCodeElementParserTime / stats.IterationNumber; stats.AverateTemporarySemanticsParserTime = (int)stats.AverateTemporarySemanticsParserTime / stats.IterationNumber; stats.AverageCrossCheckerParserTime = (int)stats.AverageCrossCheckerParserTime / stats.IterationNumber; stats.AverageTotalProcessingTime = stats.AverageCodeElementParserTime + stats.AverageCrossCheckerParserTime + stats.AveragePreprocessorTime + stats.AverageScannerTime + stats.AverageTextUpdateTime + stats.AverateTemporarySemanticsParserTime; stats.Line = documentWarmup.Results.CobolTextLines.Count; stats.TotalCodeElements = documentWarmup.Results.CodeElementsDocumentSnapshot.CodeElements.Count(); TestUtils.CreateRunReport(TestUtils.GetReportDirectoryPath(), filename + "-FullParsing", stats, null); }