public SyntaxCheckerWorkItem(SledProjectFilesFileType file, SledSyntaxCheckerVerbosity verbosity, object userData, SledUtil.BoolWrapper shouldCancel)
 {
     m_file         = file;
     m_verbosity    = verbosity;
     m_userData     = userData;
     m_shouldCancel = shouldCancel;
     Errors         = new List <SledSyntaxCheckerEntry>();
 }
示例#2
0
 public ParserWorkItem(SledProjectFilesFileType file, SledLanguageParserVerbosity verbosity, object userData, SledUtil.BoolWrapper shouldCancel)
 {
     m_file         = file;
     m_verbosity    = verbosity;
     m_userData     = userData;
     m_shouldCancel = shouldCancel;
     Results        = new List <SledLanguageParserResult>();
 }
示例#3
0
        public ProducerConsumerQueue(int workerCount, SledUtil.BoolWrapper shouldCancel)
        {
            m_workers = new Thread[workerCount];
            m_cancel  = shouldCancel;

            for (var i = 0; i < workerCount; i++)
            {
                m_workers[i] =
                    new Thread(ThreadRun)
                {
                    Name             = string.Format("SLED - PCQueue Thread:{0}", i),
                    IsBackground     = true,
                    CurrentCulture   = Thread.CurrentThread.CurrentCulture,
                    CurrentUICulture = Thread.CurrentThread.CurrentUICulture
                };

                m_workers[i].SetApartmentState(ApartmentState.STA);
                m_workers[i].Start();
            }
        }
        private static IEnumerable <SledSyntaxCheckerEntry> CheckFiles(IEnumerable <SledProjectFilesFileType> files, SledSyntaxCheckerVerbosity verbosity, object userData, SledUtil.BoolWrapper shouldCancel)
        {
            SledHiPerfTimer timer = null;

            var enumeratedFiles = new List <SledProjectFilesFileType>(files);

            var errors    = new List <SledSyntaxCheckerEntry>();
            var fileCount = enumeratedFiles.Count;

            try
            {
                if (verbosity > SledSyntaxCheckerVerbosity.None)
                {
                    timer = new SledHiPerfTimer();
                    timer.Start();
                }

                var allWorkItems = new SyntaxCheckerWorkItem[fileCount];

                for (var i = 0; i < fileCount; ++i)
                {
                    allWorkItems[i] = new SyntaxCheckerWorkItem(enumeratedFiles[i], verbosity, userData, shouldCancel);
                }

                var workerCount = Math.Min(ProducerConsumerQueue.WorkerCount, fileCount);
                using (var pcQueue = new ProducerConsumerQueue(workerCount, shouldCancel))
                {
                    pcQueue.EnqueueWorkItems(allWorkItems);
                }

                if (shouldCancel.Value)
                {
                    return(EmptyEnumerable <SledSyntaxCheckerEntry> .Instance);
                }

                // gather all results from all work items
                foreach (var workItem in allWorkItems)
                {
                    errors.AddRange(workItem.Errors);
                }
            }
            catch (Exception ex)
            {
                SledOutDevice.OutLine(
                    SledMessageType.Error,
                    "{0}: Exception syntax checking files: {1}",
                    typeof(SledLuaSyntaxCheckerService), ex.Message);
            }
            finally
            {
                if ((timer != null) && (!shouldCancel.Value))
                {
                    SledOutDevice.OutLine(
                        SledMessageType.Info,
                        "[Lua] Syntax checked {0} files in {1} seconds",
                        fileCount, timer.Elapsed);
                }
            }

            return(errors);
        }