コード例 #1
0
        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);
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }