コード例 #1
0
ファイル: GUBP.cs プロジェクト: colwalder/unrealengine
    private void DoCommanderSetup(ElectricCommander EC, IEnumerable<BuildNode> AllNodes, IEnumerable<AggregateNode> AllAggregates, List<BuildNode> OrdereredToDo, int TimeIndex, int TimeQuantum, bool bSkipTriggers, bool bFake, bool bFakeEC, string CLString, TriggerNode ExplicitTrigger, List<TriggerNode> UnfinishedTriggers, string FakeFail, bool bPreflightBuild)
    {
        List<BuildNode> SortedNodes = TopologicalSort(new HashSet<BuildNode>(AllNodes), null, SubSort: false, DoNotConsiderCompletion: true);
        Log("******* {0} GUBP Nodes", SortedNodes.Count);

        List<BuildNode> FilteredOrdereredToDo = new List<BuildNode>();
        using(TelemetryStopwatch StartFilterTimer = new TelemetryStopwatch("FilterNodes"))
        {
            // remove nodes that have unfinished triggers
            foreach (BuildNode NodeToDo in OrdereredToDo)
            {
                if (NodeToDo.ControllingTriggers.Length == 0 || !UnfinishedTriggers.Contains(NodeToDo.ControllingTriggers.Last()))
                {
                    // if we are triggering, then remove nodes that are not controlled by the trigger or are dependencies of this trigger
                    if (ExplicitTrigger != null && ExplicitTrigger != NodeToDo && !ExplicitTrigger.DependsOn(NodeToDo) && !NodeToDo.DependsOn(ExplicitTrigger))
                    {
                        continue; // this wasn't on the chain related to the trigger we are triggering, so it is not relevant
                    }

                    // in preflight builds, we are either skipping triggers (and running things downstream) or we just stop at triggers and don't make them available for triggering.
                    if (bPreflightBuild && !bSkipTriggers && (NodeToDo is TriggerNode))
                    {
                        continue;
                    }

                    FilteredOrdereredToDo.Add(NodeToDo);
                }
            }
        }
        using(TelemetryStopwatch PrintNodesTimer = new TelemetryStopwatch("SetupCommanderPrint"))
        {
            Log("*********** EC Nodes, in order.");
            PrintNodes(this, FilteredOrdereredToDo, AllAggregates, UnfinishedTriggers, TimeQuantum);
        }

        EC.DoCommanderSetup(AllNodes, AllAggregates, FilteredOrdereredToDo, SortedNodes, TimeIndex, TimeQuantum, bSkipTriggers, bFake, bFakeEC, CLString, ExplicitTrigger, UnfinishedTriggers, FakeFail);
    }