Пример #1
0
    public void TestParallelNativeInitializerReturningEntityReferencesMultipleJobs()
    {
        var firstCreationJob = new CreateEntitiesJob
        {
            factory    = _factory.ToNative <TestDescriptor>("TestNative"),
            references = new NativeArray <EntityReference>(10000, Allocator.Persistent)
        };
        var firstJob = firstCreationJob.Schedule(firstCreationJob.references.Length, 1);

        var secondCreationJob = new CreateEntitiesJob
        {
            factory    = _factory.ToNative <TestDescriptor>("TestNative"),
            references = new NativeArray <EntityReference>(5000, Allocator.Persistent)
        };
        var secondJob = secondCreationJob.Schedule(secondCreationJob.references.Length, 1);

        JobHandle.CombineDependencies(firstJob, secondJob).Complete();

        _scheduler.SubmitEntities();

        var(egids, references, count) = _engine.entitiesDB.QueryEntities <EGIDComponent, NativeSelfReferenceComponent>(TestGroupA);
        for (var i = 0; i < count; i++)
        {
            Assert.IsTrue(_engine.entitiesDB.TryGetEGID(references[i].value, out var refEgid));
            Assert.AreEqual(egids[i].ID, refEgid);
        }
    }
Пример #2
0
    public void TestParallelNativeInitializerReturningEntityReferencesWithoutReuse()
    {
        var creationJob = new CreateEntitiesJob
        {
            factory    = _factory.ToNative <TestDescriptor>("TestNative"),
            references = new NativeArray <EntityReference>(10000, Allocator.Persistent)
        };

        // Full granularity to have as many threads as possible.
        var job = creationJob.Schedule(creationJob.references.Length, 1);

        job.Complete();

        _scheduler.SubmitEntities();

        var(egids, references, count) = _engine.entitiesDB.QueryEntities <EGIDComponent, NativeSelfReferenceComponent>(TestGroupA);
        for (var i = 0; i < count; i++)
        {
            Assert.IsTrue(_engine.entitiesDB.TryGetEGID(references[i].value, out var refEgid));
            Assert.AreEqual(egids[i].ID, refEgid);
        }
    }