public void IJobEntityBatchRun()
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestData));

            using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)))
            {
                var entityCount = 100;
                m_Manager.CreateEntity(archetype, entityCount);
                var job = new WriteBatchIndex
                {
                    EcsTestTypeHandle = m_Manager.GetComponentTypeHandle <EcsTestData>(false)
                };
                Assert.DoesNotThrow(() => { job.Run(query); });
            }
        }
        public void IJobEntityBatchRunWithoutDependency_Throws()
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestData));

            using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)))
            {
                var entityCount = 100;
                m_Manager.CreateEntity(archetype, entityCount);
                var job = new WriteBatchIndex
                {
                    EcsTestTypeHandle = m_Manager.GetComponentTypeHandle <EcsTestData>(false)
                };
                var handle = job.Schedule(query);
                Assert.Throws <InvalidOperationException>(() => { job.Run(query); });
                handle.Complete();
            }
        }
        public void IJobEntityBatchProcess([Values(1, 4, 17, 100)] int jobsPerChunk)
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestData));
            var query     = m_Manager.CreateEntityQuery(typeof(EcsTestData));

            var entityCount = 100;

            var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.Temp);
            var job      = new WriteBatchIndex
            {
                EcsTestTypeHandle = m_Manager.GetComponentTypeHandle <EcsTestData>(false)
            };

            job.ScheduleParallel(query, jobsPerChunk).Complete();

            for (int batchIndex = 0; batchIndex < jobsPerChunk; ++batchIndex)
            {
                ArchetypeChunk.CalculateBatchSizeAndStartIndex(entityCount, jobsPerChunk, batchIndex, out var batchCount, out var startIndex);

                Assert.AreEqual(batchIndex, m_Manager.GetComponentData <EcsTestData>(entities[startIndex]).value);
            }

            query.Dispose();
        }
Exemple #4
0
        public void IJobEntityBatchProcess()
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestData));
            var query     = m_Manager.CreateEntityQuery(typeof(EcsTestData));

            var entityCount              = 100;
            var jobsPerChunk             = 4;
            var expectedEntitiesPerBatch = entityCount / jobsPerChunk;

            var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.Temp);
            var job      = new WriteBatchIndex
            {
                ecsTestType = m_Manager.GetArchetypeChunkComponentType <EcsTestData>(false)
            };

            job.ScheduleParallelBatched(query, jobsPerChunk).Complete();

            for (int i = 0; i < jobsPerChunk; ++i)
            {
                Assert.AreEqual(i, m_Manager.GetComponentData <EcsTestData>(entities[i * expectedEntitiesPerBatch]).value);
            }

            query.Dispose();
        }