#component lookup performance

1 messages · Page 1 of 1 (latest)

lean cloak
#

just curious on the performance of ComponentLookup in jobs, is it O(n), O(1), etc

thorny anvil
#

index into 2 pointers

m_EntityInChunkByEntity[entity.Index].Chunk
m_EntityInChunkByEntity[entity.Index].IndexInChunk
m_ArchetypeByEntity[entity.Index]

chunk->Buffer + (lookupCache.ComponentOffset + lookupCache.ComponentSizeOf * baseEntityIndex)
then an offset

#

actual code

        public byte* GetComponentDataWithTypeRO(Entity entity, TypeIndex typeIndex, ref LookupCache cache)
        {
            return ChunkDataUtility.GetComponentDataWithTypeRO(m_EntityInChunkByEntity[entity.Index].Chunk, m_ArchetypeByEntity[entity.Index], m_EntityInChunkByEntity[entity.Index].IndexInChunk, typeIndex, ref cache);
        }```

```cs
        public static byte* GetComponentDataWithTypeRO(Chunk* chunk, Archetype* archetype, int baseEntityIndex, TypeIndex typeIndex, ref LookupCache lookupCache)
        {
            if (Hint.Unlikely(lookupCache.Archetype != archetype))
                lookupCache.Update(archetype, typeIndex);

            return chunk->Buffer + (lookupCache.ComponentOffset + lookupCache.ComponentSizeOf * baseEntityIndex);
        }```