Ejemplo n.º 1
0
        public void TestPipelineHighlyParallel()
        {
            var success = true;
            int expected = 0, actual = 0;

            bool[] finished = new bool[100];
            ParameterizedThreadStart container = (index) =>
            {
                finished[(int)index] = true;
                var         random    = new Random();
                var         pipeline  = new ThreadedTaskPipeline <int>();
                ThreadStart processor = () =>
                {
                    pipeline.Connect();
                    for (int i = 0; i < 100; i++)
                    {
                        var v = pipeline.Take();
                        if (v != i)
                        {
                            success  = false;
                            expected = i;
                            actual   = v;
                            break;
                        }
                        Thread.Sleep(random.Next(1, 10));
                    }
                };
                var thread = new Thread(processor);
                thread.Start();
                for (int i = 0; i < 100; i++)
                {
                    pipeline.Put(i);
                    Thread.Sleep(random.Next(1, 10));
                }
                thread.Join();
            };

            for (int i = 0; i < 100; i++)
            {
                new Thread(container).Start(i);
            }
            while (true)
            {
                bool allFinished = true;
                for (int i = 0; i < 100; i++)
                {
                    allFinished = allFinished && finished[i];
                }
                if (allFinished)
                {
                    break;
                }
            }
            if (!success)
            {
                Assert.Equal(expected, actual);
            }
        }
Ejemplo n.º 2
0
        public ClientChunkGenerator(
            IChunkSizePolicy chunkSizePolicy, 
            IAssetManagerProvider assetManagerProvider)
        {
            this.m_ChunkSizePolicy = chunkSizePolicy;
            this.m_AssetManager = assetManagerProvider.GetAssetManager();

            this.m_TextureAtlasAsset = this.m_AssetManager.Get<TextureAtlasAsset>("atlas");
            this.m_Pipeline = new ThreadedTaskPipeline<ChunkGenerationRequest>();

            var thread = new Thread(this.Run) { IsBackground = true, Priority = ThreadPriority.Highest };
            thread.Start();
        }
Ejemplo n.º 3
0
 public void TestPipelineHighlyParallel()
 {
     var success = true;
     int expected = 0, actual = 0;
     var finished = new bool[100];
     ParameterizedThreadStart container = index =>
     {
         finished[(int) index] = true;
         var random = new Random();
         var pipeline = new ThreadedTaskPipeline<int>();
         ThreadStart processor = () =>
         {
             pipeline.OutputConnect();
             for (var i = 0; i < 100; i++)
             {
                 var v = pipeline.Take();
                 if (v != i)
                 {
                     success = false;
                     expected = i;
                     actual = v;
                     break;
                 }
                 Thread.Sleep(random.Next(1, 10));
             }
         };
         var thread = new Thread(processor);
         thread.Start();
         for (var i = 0; i < 100; i++)
         {
             pipeline.Put(i);
             Thread.Sleep(random.Next(1, 10));
         }
         thread.Join();
     };
     for (var i = 0; i < 100; i++)
         new Thread(container).Start(i);
     while (true)
     {
         var allFinished = true;
         for (var i = 0; i < 100; i++)
             allFinished = allFinished && finished[i];
         if (allFinished)
             break;
     }
     if (!success)
         Assert.Equal(expected, actual);
 }
Ejemplo n.º 4
0
 public void TestPipelineBasic()
 {
     var pipeline = new ThreadedTaskPipeline<int>();
     ThreadStart processor = () =>
     {
         pipeline.OutputConnect();
         Assert.Equal(pipeline.Take(), 1);
         Assert.Equal(pipeline.Take(), 2);
         Assert.Equal(pipeline.Take(), 3);
     };
     pipeline.Put(1);
     pipeline.Put(2);
     pipeline.Put(3);
     var thread = new Thread(processor);
     thread.Start();
     thread.Join();
 }
Ejemplo n.º 5
0
        public void TestPipelineParallel()
        {
            var         pipeline  = new ThreadedTaskPipeline <int>();
            ThreadStart processor = () =>
            {
                pipeline.Connect();
                Assert.Equal(pipeline.Take(), 1);
                Assert.Equal(pipeline.Take(), 2);
                Assert.Equal(pipeline.Take(), 3);
            };
            var thread = new Thread(processor);

            thread.Start();
            pipeline.Put(1);
            pipeline.Put(2);
            pipeline.Put(3);
            thread.Join();
        }
Ejemplo n.º 6
0
        public ServerChunkGenerator(
            IChunkSizePolicy chunkSizePolicy, 
            IAssetManagerProvider assetManagerProvider, 
            IGeneratorResolver generatorResolver,
            IEdgePointCalculator edgePointCalculator,
            IChunkConverter chunkConverter,
            IChunkCompressor chunkCompressor)
        {
            this.m_ChunkSizePolicy = chunkSizePolicy;
            this.m_EdgePointCalculator = edgePointCalculator;
            this.m_AssetManager = assetManagerProvider.GetAssetManager();
            this.m_ChunkCompressor = chunkCompressor;
            this.m_ChunkConverter = chunkConverter;

            this.m_GeneratorPipeline = new ThreadedTaskPipeline<ChunkGenerationRequest>();
            this.m_ConverterPipeline = new ThreadedTaskPipeline<ChunkConversionRequest>(false);
            this.m_CompressorPipeline = new ThreadedTaskPipeline<ChunkCompressionRequest>(false);

            this.m_Generator = generatorResolver.GetGeneratorForGame();
            this.m_Generator.SetSeed(10000);

            new Thread(this.GeneratorRun)
            {
                IsBackground = true,
                Priority = ThreadPriority.Highest
            }.Start();

            new Thread(this.ConverterRun)
            {
                IsBackground = true,
                Priority = ThreadPriority.Highest
            }.Start();

            new Thread(this.CompressorRun)
            {
                IsBackground = true,
                Priority = ThreadPriority.Highest
            }.Start();
        }
Ejemplo n.º 7
0
        public void TestPipelineParallelTo1000TakeSided()
        {
            var         random = new Random();
            var         pipeline = new ThreadedTaskPipeline <int>();
            var         success = true;
            int         expected = 0, actual = 0;
            ThreadStart processor = () =>
            {
                pipeline.Connect();
                for (int i = 0; i < 1000; i++)
                {
                    var v = pipeline.Take();
                    if (v != i)
                    {
                        success  = false;
                        expected = i;
                        actual   = v;
                        break;
                    }
                    Thread.Sleep(1);
                }
            };
            var thread = new Thread(processor);

            thread.Start();
            for (int i = 0; i < 1000; i++)
            {
                pipeline.Put(i);
                Thread.Sleep(random.Next(1, 2));
            }
            thread.Join();
            if (!success)
            {
                Assert.Equal(expected, actual);
            }
        }
Ejemplo n.º 8
0
 public void TestPipelineParallelTo1000TakeSided()
 {
     var random = new Random();
     var pipeline = new ThreadedTaskPipeline<int>();
     var success = true;
     int expected = 0, actual = 0;
     ThreadStart processor = () =>
     {
         pipeline.OutputConnect();
         for (var i = 0; i < 1000; i++)
         {
             var v = pipeline.Take();
             if (v != i)
             {
                 success = false;
                 expected = i;
                 actual = v;
                 break;
             }
             Thread.Sleep(1);
         }
     };
     var thread = new Thread(processor);
     thread.Start();
     for (var i = 0; i < 1000; i++)
     {
         pipeline.Put(i);
         Thread.Sleep(random.Next(1, 2));
     }
     thread.Join();
     if (!success)
         Assert.Equal(expected, actual);
 }