private void Log(RunStats stats, string packageId)
        {
            if (_logger != null)
            {
                _logger.WriteLine(stats.ToCsv(packageId));
                _logger.Flush();
            }

            RunStats prevStats = null;

            if (_baselineStats != null)
            {
                if (!_baselineStats.TryGetValue(packageId, out prevStats))
                {
                    Console.WriteLine("Didn't find baseline package: {0}", packageId);
                }
            }
            if (_htmlLogger != null)
            {
                _jsonResults.AppendFormat(@"[
    [{0}],
    [{1}]
],
", stats.ToCsv(packageId), prevStats == null ? "" : prevStats.ToCsv(packageId));
            }


            stats.Write(prevStats);
        }
示例#2
0
 void Start()
 {
     chosenSide = -2;
     rotButtons = GameObject.Find("rotationButtons");
     if (rotButtons != null)
     {
         rotButtons.SetActive(false);
     }
     forward   = back = rotLeft = rotRight = false;
     menuPanel = GameObject.Find("PauseMenu");
     if (menuPanel != null)
     {
         menuPanel.SetActive(true);
         RunStats.Reset();
         menuPanel.SetActive(false);
     }
     if (GameObject.Find("ResumeTextBox") != null)
     {
         resumeText = GameObject.Find("ResumeTextBox").GetComponent <Text>();
         if (resumeText != null)
         {
             resumeText.text = "";
         }
     }
 }
示例#3
0
        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult result = openFileDialog1.ShowDialog();

            if (result == DialogResult.OK)
            {
                string file = openFileDialog1.FileName;
                //byte[] fileData = File.ReadAllBytes(file);
                //string fileString = Convert.ToBase64String(fileData);


                try
                {
                    _sensorLog = _sensorService.GetSensorLog(file);
                    GenerateChart(_sensorLog);
                    chart1.Visible = true;
                    chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();
                    chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();

                    RunStats stats = new RunStats(_sensorLog);
                    label1.Text = stats.ToString();
                }
                catch (IOException)
                {
                }
            }
        }
 public ConsoleOutputRunListener()
 {
     _console = new DefaultConsole();
     _timer   = new RunStats();
     _output  = new ProgressOutput(_console);
     _summary = new FailedSpecificationsSummary(new VerboseOutput(_console), _console);
 }
        private static int Main(string[] args)
        {
            List <string> packages = new List <string>();

            if (args.Length == 0)
            {
                DisplayHelp();
                return(0);
            }

            int?           topCount = null, comboCount = null, runCount = null;
            bool           combo = false;
            int?           seed = null, dumpMembers = null;
            string         packagePath = null, logPath = null, htmlLogPath = null, dirRun = null;
            DependencyType depType = DependencyType.Standard;
            bool           installMissingPackages = false, installAll = false, cleanup = true, lowAnalysis = false, wait = false;
            Dictionary <string, RunStats> stats = null;

            foreach (var arg in args)
            {
                if (arg == "/?" || arg == "--help")
                {
                    DisplayHelp();
                    return(0);
                }
                else if (arg == "/install_missing")
                {
                    installMissingPackages = true;
                }
                else if (arg == "/install_all")
                {
                    installAll = true;
                }
                else if (arg == "/low")
                {
                    lowAnalysis = true;
                }
                else if (arg == "/no_cleanup")
                {
                    cleanup = false;
                }
                else if (arg == "/wait")
                {
                    wait = true;
                }
                else if (arg.StartsWith("/package_list:"))
                {
                    string filename = arg.Substring("/package_list:".Length);
                    try {
                        packages.AddRange(File.ReadAllLines(filename));
                    } catch (Exception e) {
                        Console.WriteLine("Failed to read package list: {0}", filename);
                        Console.WriteLine(e.Message);
                        return(-1);
                    }
                }
                else if (arg.StartsWith("/package:"))
                {
                    string packageName = arg.Substring("/package:".Length);
                    if (String.IsNullOrWhiteSpace(packageName))
                    {
                        Console.WriteLine("Missing package name");
                        return(-3);
                    }
                    foreach (var name in packageName.Split(','))
                    {
                        packages.Add(name.Trim());
                    }
                }
                else if (arg.StartsWith("/dir:"))
                {
                    dirRun = arg.Substring("/dir:".Length);
                    if (String.IsNullOrWhiteSpace(dirRun))
                    {
                        Console.WriteLine("/dir: missing directory name");
                        return(-3);
                    }
                    else if (!Directory.Exists(dirRun))
                    {
                        Console.WriteLine("/dir: Directory does not exist");
                        return(-52);
                    }
                    cleanup = false;
                }
                else if (arg.StartsWith("/log:"))
                {
                    logPath = arg.Substring("/log:".Length);
                    if (String.IsNullOrWhiteSpace(logPath))
                    {
                        Console.WriteLine("Missing log file name");
                        return(-16);
                    }
                }
                else if (arg.StartsWith("/html:"))
                {
                    htmlLogPath = arg.Substring("/html:".Length);
                    if (String.IsNullOrWhiteSpace(htmlLogPath))
                    {
                        Console.WriteLine("Missing HTML log file name");
                        return(-25);
                    }
                }
                else if (arg.StartsWith("/package_path:"))
                {
                    packagePath = arg.Substring("/package_path:".Length);
                    if (String.IsNullOrWhiteSpace(packagePath))
                    {
                        Console.WriteLine("Missing package path");
                        return(-10);
                    }
                    if (!Directory.Exists(packagePath))
                    {
                        Console.WriteLine("Package path directory does not exist");
                        return(-11);
                    }
                }
                else if (arg.StartsWith("/seed:"))
                {
                    int seedInt;
                    if (!Int32.TryParse(arg.Substring("/seed:".Length), out seedInt))
                    {
                        Console.WriteLine("Bad seed value: {0}", arg.Substring("/seed:".Length));
                        return(-8);
                    }
                    seed = seedInt;
                }
                else if (arg.StartsWith("/combo:"))
                {
                    string comboArgs = arg.Substring("/combo:".Length);
                    if (String.IsNullOrWhiteSpace(comboArgs))
                    {
                        Console.WriteLine("Missing combo values");
                        return(-4);
                    }
                    var comboArgsArray = comboArgs.Split(',');
                    if (comboArgsArray.Length != 1 && comboArgsArray.Length != 2)
                    {
                        Console.WriteLine("Invalid number of arguments for combination run: {0}", comboArgs);
                        return(-6);
                    }
                    int comboArgValue;
                    if (!Int32.TryParse(comboArgsArray[0], out comboArgValue))
                    {
                        Console.WriteLine("Invalid package count for combination run: {0}", comboArgsArray[0]);
                        return(-5);
                    }
                    comboCount = comboArgValue;
                    if (comboArgsArray.Length > 1)
                    {
                        if (!Int32.TryParse(comboArgsArray[1], out comboArgValue))
                        {
                            Console.WriteLine("Invalid run count for combination run: {0}", comboArgsArray[1]);
                            return(-7);
                        }
                        runCount = comboArgValue;
                    }
                }
                else if (arg.StartsWith("/combo"))
                {
                    combo = true;
                }
                else if (arg.StartsWith("/devdependencies"))
                {
                    depType = DependencyType.Development;
                }
                else if (arg.StartsWith("/top:"))
                {
                    int topCountInt;
                    if (!Int32.TryParse(arg.Substring("/top:".Length), out topCountInt))
                    {
                        Console.WriteLine("Bad top count: {0}", arg.Substring("/top:".Length));
                        return(-2);
                    }
                    topCount = topCountInt;
                }
                else if (arg.StartsWith("/dump_members:"))
                {
                    int dumpMembersInt;
                    if (!Int32.TryParse(arg.Substring("/dump_members:".Length), out dumpMembersInt))
                    {
                        Console.WriteLine("Bad dump members count: {0}", arg.Substring("/dump_members:".Length));
                        return(-2);
                    }
                    dumpMembers = dumpMembersInt;
                }
                else if (arg.StartsWith("/dump_members"))
                {
                    dumpMembers = 1;
                }
                else if (arg.StartsWith("/baseline:"))
                {
                    stats = new Dictionary <string, RunStats>();
                    string baselinePath = arg.Substring("/baseline:".Length);
                    if (String.IsNullOrWhiteSpace(baselinePath) || !File.Exists(baselinePath))
                    {
                        Console.WriteLine("Bad baseline path: {0}", baselinePath);
                        return(-20);
                    }
                    var baselineEntries = File.ReadAllLines(baselinePath).Skip(1).ToArray();
                    foreach (var line in baselineEntries)
                    {
                        var kvp = RunStats.Parse(line);
                        if (kvp.Key != null)
                        {
                            stats.Add(kvp.Key, kvp.Value);
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Unknown option: {0}", arg);
                    return(-15);
                }
            }


            if (packages.Count == 0)
            {
                Console.WriteLine("No packages were specified");
                return(-9);
            }

            if (topCount != null)
            {
                packages = new List <string>(packages.Where((value, index) => index < topCount.Value));
            }

            if (packagePath == null)
            {
                if (dirRun == null)
                {
                    packagePath = CreateTempDirectoryPath();
                    Console.WriteLine("Packages cached at {0}", packagePath);
                    installMissingPackages = true;
                }
                else
                {
                    packagePath = dirRun;
                }
            }

            Random random;

            if (seed == null)
            {
                seed = Environment.TickCount;
                if (comboCount != null)
                {
                    Console.WriteLine("Seed set to {0}", seed);
                }
            }

            random = new Random(seed.Value);
            TextWriter logger = null, htmlLogger = null;

            if (logPath != null)
            {
                logger = new StreamWriter(logPath);
            }

            if (htmlLogPath != null)
            {
                htmlLogger = new StreamWriter(htmlLogPath);
            }

            using (logger)
                using (htmlLogger)
                    using (var driver = new AnalysisDriver(
                               packages.ToArray(),
                               packagePath,
                               installMissingPackages,
                               installAll,
                               depType,
                               cleanup,
                               wait,
                               random,
                               logger,
                               htmlLogger,
                               dumpMembers,
                               lowAnalysis,
                               stats
                               )) {
                        if (combo)
                        {
                            comboCount = packages.Count;
                            runCount   = 1;
                        }
                        try {
                            if (dirRun != null)
                            {
                                driver.RunDirectory(
                                    dirRun,
                                    Path.GetFileName(dirRun),
                                    packages.ToArray(),
                                    1
                                    );
                            }
                            else if (comboCount == null)
                            {
                                driver.RunAll();
                            }
                            else
                            {
                                for (int i = 0; i < (runCount ?? 1); i++)
                                {
                                    driver.RunCombo(comboCount.Value, i + 1);
                                }
                            }
                        } catch (AssertFailedException e) {
                            Console.WriteLine("Run failed: {0}", e.Message);
                            return(-100);
                        } catch (Exception e) {
                            Console.WriteLine("Error during run: {0}\r\n{1}", e.Message, e.StackTrace);
                            return(-200);
                        }
                    }
            for (int i = 0; i < 3; i++)
            {
                GC.Collect(2);
                GC.WaitForPendingFinalizers();
            }
            //AnalysisValue.DumpStats();
            //VariableDef.DumpStats();
            return(0);
        }
            public void Write(RunStats baseline = null)
            {
                Console.ForegroundColor = ConsoleColor.Gray;
                int          left                        = Console.CursorLeft;
                const string timeFormat                  = "{0,6} ms ",
                             fileFormat                  = "{0,4} files ",
                             parserWorkingSetFormat      = "{0,4} MB parser WS, ",
                             parserGcFormat              = "{0,4} MB parser GC Mem, ",
                             workingSetFormat            = "{0,4} MB WS, ",
                             gcFormat                    = "{0,4} MB GC Mem, ",
                             totalCompletionFormat       = "{0,3} ",
                             secondLevelCompletionFormat = "({0,5}) completions";

                string format = timeFormat +
                                fileFormat.Replace("{0", "{1") +
                                parserWorkingSetFormat.Replace("{0", "{6") +
                                parserGcFormat.Replace("{0", "{7") +
                                workingSetFormat.Replace("{0", "{2") +
                                gcFormat.Replace("{0", "{5") +
                                totalCompletionFormat.Replace("{0", "{3") +
                                secondLevelCompletionFormat.Replace("{0", "{4");

                Console.WriteLine(format,
                                  Time,
                                  FileCount,
                                  TotalWorkingSet,
                                  TotalCompletions,
                                  SecondLevelCompletions,
                                  GcMem,
                                  ParserTotalWorkingSet,
                                  ParserGcMem

                                  );
                if (baseline != null)
                {
                    Console.CursorLeft = Math.Max(1, left - "BASE: ".Length);
                    Console.Write("BASE: ");
                    Console.WriteLine(format,
                                      baseline.Time,
                                      baseline.FileCount,
                                      baseline.TotalWorkingSet,
                                      baseline.TotalCompletions,
                                      baseline.SecondLevelCompletions,
                                      baseline.GcMem,
                                      baseline.ParserTotalWorkingSet,
                                      baseline.ParserGcMem
                                      );

                    Console.CursorLeft = Math.Max(1, left - "DIFF: ".Length);
                    Console.Write("DIFF: ");
                    LogDiff(timeFormat, Time - baseline.Time);
                    LogDiff(fileFormat, FileCount - baseline.FileCount);
                    LogDiff(parserWorkingSetFormat, ParserTotalWorkingSet - baseline.ParserTotalWorkingSet);
                    LogDiff(parserGcFormat, ParserGcMem - baseline.ParserGcMem);
                    LogDiff(workingSetFormat, TotalWorkingSet - baseline.TotalWorkingSet);
                    LogDiff(gcFormat, GcMem - baseline.GcMem);
                    LogDiff(totalCompletionFormat, TotalCompletions - baseline.TotalCompletions, reversed: true);
                    LogDiff(secondLevelCompletionFormat, SecondLevelCompletions - baseline.SecondLevelCompletions, reversed: true);
                    Console.WriteLine();
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
            }
        public void RunDirectory(string testDir, string packageId, string[] packages, int runOrder)
        {
            Stopwatch sw = new Stopwatch();

            for (int i = 0; i < 3; i++)
            {
                GC.Collect(GC.MaxGeneration);
                GC.WaitForPendingFinalizers();
            }
            var  startingGcMem    = GC.GetTotalMemory(true);
            var  workingSet       = Process.GetCurrentProcess().WorkingSet64;
            var  startTime        = sw.ElapsedMilliseconds;
            long parserGcMem      = 0;
            long parserWorkingSet = 0;

            sw.Start();
            var analyzer = Analysis.Analyze(
                testDir,
                _lowAnalysis ? AnalysisLimits.MakeLowAnalysisLimits() : null,
                () => {
                for (int i = 0; i < 3; i++)
                {
                    GC.Collect(GC.MaxGeneration);
                    GC.WaitForPendingFinalizers();
                }
                parserGcMem      = GC.GetTotalMemory(true);
                parserWorkingSet = Process.GetCurrentProcess().WorkingSet64;
            }
                );

            sw.Stop();
            var endingGcMem   = GC.GetTotalMemory(true);
            var endWorkingSet = Process.GetCurrentProcess().WorkingSet64;

            int completionCount = 0, secondLevelCompletionCount = 0;

            foreach (var module in analyzer.AllModules)
            {
                if (String.Equals(Path.Combine(testDir, "app.js"), module.FilePath, StringComparison.OrdinalIgnoreCase) ||
                    String.Equals(Path.Combine(testDir, "index.js"), module.FilePath, StringComparison.OrdinalIgnoreCase) ||
                    String.Equals(Path.Combine(testDir, "server.js"), module.FilePath, StringComparison.OrdinalIgnoreCase))
                {
                    foreach (var package in packages)
                    {
                        string packageName = package.Split('@')[0];
                        string requireCode = String.Format("require('{0}')", packageName);

                        var moduleMembers = module.Analysis.GetMembersByIndex(requireCode, 0);
                        completionCount += moduleMembers.Count();

                        foreach (var moduleMember in moduleMembers)
                        {
                            var memberCode = requireCode + "." + moduleMember.Completion;

                            secondLevelCompletionCount += module.Analysis.GetMembersByIndex(memberCode, 0).Count();
                        }

                        if (_dumpMembers != null)
                        {
                            DumpMembers(module.Analysis, requireCode, 0);
                        }
                    }

                    break;
                }
            }

            var time                  = sw.ElapsedMilliseconds - startTime;
            int fileCount             = analyzer.AllModules.Count();
            var totalWorkingSet       = (endWorkingSet - workingSet) / (1024 * 1024);
            var parserTotalWorkingSet = (parserWorkingSet - workingSet) / (1024 * 1024);

            var stats = new RunStats(
                completionCount,
                secondLevelCompletionCount,
                time,
                fileCount,
                parserTotalWorkingSet,
                (parserGcMem - startingGcMem) / (1024 * 1024),
                totalWorkingSet,
                (endingGcMem - startingGcMem) / (1024 * 1024),
                runOrder
                );

            Log(stats, packageId);
            if (_wait)
            {
                Console.ReadLine();
            }
            GC.KeepAlive(analyzer);
#if DEBUG
            //Console.WriteLine(analyzer.GetAnalysisStats());
#endif
            if (_cleanup)
            {
                Directory.Delete(testDir, true);
            }
            else
            {
                Console.WriteLine("   Ran in {0}", testDir);
            }
        }
            public void Write(RunStats baseline = null) {
                Console.ForegroundColor = ConsoleColor.Gray;
                int left = Console.CursorLeft;
                const string timeFormat = "{0,6} ms ",
                    fileFormat = "{0,4} files ",
                    parserWorkingSetFormat = "{0,4} MB parser WS, ",
                    parserGcFormat = "{0,4} MB parser GC Mem, ",
                    workingSetFormat = "{0,4} MB WS, ",
                    gcFormat = "{0,4} MB GC Mem, ",
                    totalCompletionFormat = "{0,3} ",
                    secondLevelCompletionFormat = "({0,5}) completions";

                string format = timeFormat +
                    fileFormat.Replace("{0", "{1") +
                    parserWorkingSetFormat.Replace("{0", "{6") +
                    parserGcFormat.Replace("{0", "{7") +
                    workingSetFormat.Replace("{0", "{2") +
                    gcFormat.Replace("{0", "{5") +
                    totalCompletionFormat.Replace("{0", "{3") +
                    secondLevelCompletionFormat.Replace("{0", "{4");

                Console.WriteLine(format,
                    Time,
                    FileCount,
                    TotalWorkingSet,
                    TotalCompletions,
                    SecondLevelCompletions,
                    GcMem,
                    ParserTotalWorkingSet,
                    ParserGcMem

                );
                if (baseline != null) {
                    Console.CursorLeft = Math.Max(1, left - "BASE: ".Length);
                    Console.Write("BASE: ");
                    Console.WriteLine(format,
                        baseline.Time,
                        baseline.FileCount,
                        baseline.TotalWorkingSet,
                        baseline.TotalCompletions,
                        baseline.SecondLevelCompletions,
                        baseline.GcMem,
                        baseline.ParserTotalWorkingSet,
                        baseline.ParserGcMem
                    );

                    Console.CursorLeft = Math.Max(1, left - "DIFF: ".Length);
                    Console.Write("DIFF: ");
                    LogDiff(timeFormat, Time - baseline.Time);
                    LogDiff(fileFormat, FileCount - baseline.FileCount);
                    LogDiff(parserWorkingSetFormat, ParserTotalWorkingSet - baseline.ParserTotalWorkingSet);
                    LogDiff(parserGcFormat, ParserGcMem - baseline.ParserGcMem);
                    LogDiff(workingSetFormat, TotalWorkingSet - baseline.TotalWorkingSet);
                    LogDiff(gcFormat, GcMem - baseline.GcMem);
                    LogDiff(totalCompletionFormat, TotalCompletions - baseline.TotalCompletions, reversed: true);
                    LogDiff(secondLevelCompletionFormat, SecondLevelCompletions - baseline.SecondLevelCompletions, reversed: true);
                    Console.WriteLine();
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
            }
        private void Log(RunStats stats, string packageId) {
            if (_logger != null) {
                _logger.WriteLine(stats.ToCsv(packageId));
                _logger.Flush();
            }

            RunStats prevStats = null;
            if (_baselineStats != null) {
                if (!_baselineStats.TryGetValue(packageId, out prevStats)) {
                    Console.WriteLine("Didn't find baseline package: {0}", packageId);
                }
            }
            if (_htmlLogger != null) {
                _jsonResults.AppendFormat(@"[
    [{0}],
    [{1}]
],
", stats.ToCsv(packageId), prevStats == null ? "" : prevStats.ToCsv(packageId));
            }


            stats.Write(prevStats);
        }
        public void RunDirectory(string testDir, string packageId, string[] packages, int runOrder) {
            Stopwatch sw = new Stopwatch();
            for (int i = 0; i < 3; i++) {
                GC.Collect(GC.MaxGeneration);
                GC.WaitForPendingFinalizers();
            }
            var startingGcMem = GC.GetTotalMemory(true);
            var workingSet = Process.GetCurrentProcess().WorkingSet64;
            var startTime = sw.ElapsedMilliseconds;
            long parserGcMem = 0;
            long parserWorkingSet = 0;
            sw.Start();
            var analyzer = Analysis.Analyze(
                testDir,
                _lowAnalysis ? AnalysisLimits.LowAnalysisLimit : null,
                () => {
                    for (int i = 0; i < 3; i++) {
                        GC.Collect(GC.MaxGeneration);
                        GC.WaitForPendingFinalizers();
                    }
                    parserGcMem = GC.GetTotalMemory(true);
                    parserWorkingSet = Process.GetCurrentProcess().WorkingSet64;
                }
            );
            sw.Stop();
            var endingGcMem = GC.GetTotalMemory(true);
            var endWorkingSet = Process.GetCurrentProcess().WorkingSet64;

            int completionCount = 0, secondLevelCompletionCount = 0;

            foreach (var module in analyzer.AllModules) {
                if (String.Equals(Path.Combine(testDir, "app.js"), module.FilePath, StringComparison.OrdinalIgnoreCase) ||
                    String.Equals(Path.Combine(testDir, "index.js"), module.FilePath, StringComparison.OrdinalIgnoreCase) ||
                    String.Equals(Path.Combine(testDir, "server.js"), module.FilePath, StringComparison.OrdinalIgnoreCase)) {
                    foreach (var package in packages) {
                        string packageName = package.Split('@')[0];
                        string requireCode = String.Format("require('{0}')", packageName);

                        var moduleMembers = module.Analysis.GetMembersByIndex(requireCode, 0);
                        completionCount += moduleMembers.Count();

                        foreach (var moduleMember in moduleMembers) {
                            var memberCode = requireCode + "." + moduleMember.Completion;

                            secondLevelCompletionCount += module.Analysis.GetMembersByIndex(memberCode, 0).Count();
                        }

                        if (_dumpMembers != null) {
                            DumpMembers(module.Analysis, requireCode, 0);
                        }
                    }

                    break;
                }
            }

            var time = sw.ElapsedMilliseconds - startTime;
            int fileCount = analyzer.AllModules.Count();
            var totalWorkingSet = (endWorkingSet - workingSet) / (1024 * 1024);
            var parserTotalWorkingSet = (parserWorkingSet - workingSet) / (1024 * 1024);

            var stats = new RunStats(
                completionCount,
                secondLevelCompletionCount,
                time,
                fileCount,
                parserTotalWorkingSet,
                (parserGcMem - startingGcMem) / ( 1024 * 1024),
                totalWorkingSet,
                (endingGcMem - startingGcMem) / (1024 * 1024),
                runOrder
            );

            Log(stats, packageId);
            if (_wait) {
                Console.ReadLine();
            }
            GC.KeepAlive(analyzer);
#if DEBUG
            //Console.WriteLine(analyzer.GetAnalysisStats());
#endif
            if (_cleanup) {
                Directory.Delete(testDir, true);
            } else {
                Console.WriteLine("   Ran in {0}", testDir);
            }
        }
示例#11
0
 public static void ResetCurrent()
 {
     Current = new RunStats();
 }
示例#12
0
 private void Awake()
 {
     _hud = GameObject.FindWithTag("HUD").GetComponent <Hud>();
     RunStats.ResetCurrent();
 }