internal void ProcessInput()
        {
            // Peek -1 or 0 can indicate internal error.
            while (!process.StandardOutput.EndOfStream && process.StandardOutput.Peek() > 0)
            {
                // ReadLine() can actually return string.Empty and null as valid values.
                string line = process.StandardOutput.ReadLine();

                if (!string.IsNullOrEmpty(line)) // Skip bad data.
                {
                    logger.WriteLine(LogKind.Default, line);

                    if (!line.StartsWith("//"))
                    {
                        LinesWithResults.Add(line);
                    }
                    else if (Engine.Signals.TryGetSignal(line, out var signal))
                    {
                        diagnoser?.Handle(signal, diagnoserActionParameters);
                        process.StandardInput.WriteLine(Engine.Signals.Acknowledgment);
                    }
                    else
                    {
                        LinesWithExtraOutput.Add(line);
                    }
                }
            }
        }
示例#2
0
        internal void ProcessInput()
        {
            string line;

            while ((line = process.StandardOutput.ReadLine()) != null)
            {
                logger.WriteLine(LogKind.Default, line);

                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                if (!line.StartsWith("//"))
                {
                    LinesWithResults.Add(line);
                }
                else if (Engine.Signals.TryGetSignal(line, out var signal))
                {
                    diagnoser?.Handle(signal, diagnoserActionParameters);
                    process.StandardInput.WriteLine(Engine.Signals.Acknowledgment);
                }
                else
                {
                    LinesWithExtraOutput.Add(line);
                }
            }
        }
示例#3
0
        internal void ProcessInput()
        {
            string line;

            while ((line = process.StandardOutput.ReadLine()) != null)
            {
                logger.WriteLine(LogKind.Default, line);

                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                if (!line.StartsWith("//"))
                {
                    LinesWithResults.Add(line);
                }
                else if (line == Engine.Signals.BeforeAnythingElse)
                {
                    diagnoser?.BeforeAnythingElse(process, benchmark);
                }
                else if (line == Engine.Signals.AfterSetup)
                {
                    diagnoser?.AfterSetup(process, benchmark);
                }
                else if (line == Engine.Signals.BeforeCleanup)
                {
                    diagnoser?.BeforeCleanup();
                }
                else
                {
                    LinesWithExtraOutput.Add(line);
                }
            }
        }
        internal void ProcessInput()
        {
            string line;

            while ((line = process.StandardOutput.ReadLine()) != null)
            {
                logger.WriteLine(LogKind.Default, line);

                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                if (!line.StartsWith("//"))
                {
                    LinesWithResults.Add(line);
                }
                else if (line == Engine.Signals.BeforeAnythingElse)
                {
                    diagnoser?.BeforeAnythingElse(diagnoserActionParameters);
                }
                else if (line == Engine.Signals.AfterGlobalSetup)
                {
                    diagnoser?.AfterGlobalSetup(diagnoserActionParameters);
                }
                else if (line == Engine.Signals.BeforeMainRun)
                {
                    diagnoser?.BeforeMainRun(diagnoserActionParameters);
                }
                else if (line == Engine.Signals.BeforeGlobalCleanup)
                {
                    diagnoser?.BeforeGlobalCleanup();
                }
                else if (line == Engine.Signals.AfterAnythingElse)
                {
                    // TODO: notify AfterAnythingElse
                }
                else
                {
                    LinesWithExtraOutput.Add(line);
                }
            }
        }
        internal void ProcessInput()
        {
            // Peek -1 or 0 can indicate internal error.
            while (!process.StandardOutput.EndOfStream && process.StandardOutput.Peek() > 0)
            {
                // ReadLine() can actually return string.Empty and null as valid values.
                string line = process.StandardOutput.ReadLine();

                if (line == null)
                {
                    continue;
                }

                logger.WriteLine(LogKind.Default, line);

                if (!line.StartsWith("//"))
                {
                    LinesWithResults.Add(line);
                }
                else if (Engine.Signals.TryGetSignal(line, out var signal))
                {
                    diagnoser?.Handle(signal, diagnoserActionParameters);

                    if (process.StartInfo.RedirectStandardInput)
                    {
                        process.StandardInput.WriteLine(Engine.Signals.Acknowledgment);
                    }

                    if (signal == HostSignal.AfterAll)
                    {
                        // we have received the last signal so we can stop reading the output
                        // if the process won't exit after this, its hung and needs to be killed
                        return;
                    }
                }
                else if (!string.IsNullOrEmpty(line))
                {
                    LinesWithExtraOutput.Add(line);
                }
            }
        }
示例#6
0
        internal void ProcessInput()
        {
            string line;

            while ((line = process.StandardOutput.ReadLine()) != null)
            {
                logger.WriteLine(LogKind.Default, line);

                if (!string.IsNullOrEmpty(line))
                {
                    if (!line.StartsWith("//"))
                    {
                        LinesWithResults.Add(line);
                    }
                    else
                    {
                        LinesWithExtraOutput.Add(line);
                    }
                }

                // This is important so the Diagnoser can know the [Benchmark] methods will have run and (e.g.) it can do a Memory Dump
                if (diagnosticsAlreadyRun || !line.StartsWith(IterationMode.MainWarmup.ToString()))
                {
                    continue;
                }

                try
                {
                    diagnoser?.AfterBenchmarkHasRun(benchmark, process);
                }
                finally
                {
                    // Always set this, even if something went wrong, otherwise we will try on every run of a benchmark batch
                    diagnosticsAlreadyRun = true;
                }
            }
        }