float GetAverageRunningTime(SystemHandle systemHandle, SystemHandle parentSystemHandle) { if (systemHandle.Managed != null && systemHandle.Managed is ComponentSystemGroup systemGroup) { if (systemGroup.Systems != null) { var managedChildSystemsSum = systemGroup.Systems.Sum(child => GetAverageRunningTime(child, systemGroup)); // unmanaged system var unmanagedChildSystems = systemGroup.UnmanagedSystems; var unmanagedChildSystemSum = 0.0f; for (var i = 0; i < unmanagedChildSystems.length; i++) { unmanagedChildSystemSum += GetAverageRunningTime(new SystemHandle(unmanagedChildSystems[i], systemGroup.World), systemGroup); } return(managedChildSystemsSum + unmanagedChildSystemSum); } } else { var recorderKey = new PlayerLoopSystemGraph.RecorderKey { World = systemHandle.World, Group = parentSystemHandle.Managed as ComponentSystemGroup, SystemHandle = systemHandle }; return(Graph.RecordersBySystem.TryGetValue(recorderKey, out var recorder) ? recorder.ReadMilliseconds() : 0.0f); } return(-1); }
static void Parse(SystemHandle systemHandle, PlayerLoopSystemGraph graph, IPlayerLoopNode parent = null) { IPlayerLoopNode node; graph.AllSystems.Add(systemHandle); if (systemHandle.Managed != null && systemHandle.Managed is ComponentSystemGroup group) { var groupNode = Pool <ComponentGroupNode> .GetPooled(); groupNode.Value = group; node = groupNode; ref var updateSystemList = ref group.m_MasterUpdateList; for (int i = 0, count = updateSystemList.length; i < count; ++i) { var updateIndex = updateSystemList[i]; if (updateIndex.IsManaged) { var child = group.Systems[updateIndex.Index]; Parse(child, graph, node); } else { var child = group.UnmanagedSystems[updateIndex.Index]; Parse(new SystemHandle(child, group.World), graph, node); } } }
public SystemForSearch(SystemHandle systemHandle) { SystemHandle = systemHandle; var systemType = systemHandle.GetSystemType(); SystemName = Properties.Editor.TypeUtility.GetTypeDisplayName(systemType).Replace(".", "|"); m_ComponentNamesInQueryCache = EntityQueryUtility.CollectComponentTypesFromSystemQuery(SystemHandle).ToArray(); }
public static unsafe IEnumerable <string> CollectComponentTypesFromSystemQuery(SystemHandle systemHandle) { if (systemHandle == null || !systemHandle.Valid) { return(Enumerable.Empty <string>()); } ; using (var hashPool = PooledHashSet <string> .Make()) { var hashset = hashPool.Set; var ptr = systemHandle.StatePointer; if (ptr != null && ptr->EntityQueries.length > 0) { var queries = ptr->EntityQueries; for (var i = 0; i < queries.length; i++) { using (var queryTypeList = queries[i].GetQueryTypes().ToPooledList()) { foreach (var name in queryTypeList.List.Select(queryType => SpecifiedTypeName(queryType.GetManagedType()))) { hashset.Add(name); } } } } return(hashset.ToArray()); } }