In TransitiveBaseTraversalFunction, only process the deps once we have all the information we need. It is a waste of CPU time otherwise as we will just lose the state. Note that we don't pass the env directly into the processDeps function so this wasn't a skyframe restart optimization. Also, none of the state recorded in the processDeps for the direct label deps is used in computing the aspect deps, as we immediately call targetAndErrorIfAny#getTarget.

PiperOrigin-RevId: 186373573
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
index 5b6e9ed..b51bab4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
@@ -125,7 +125,6 @@
         loadTargetResultsType.equals(LoadTargetResultsType.TARGET_AND_ERROR_IF_ANY),
         loadTargetResultsType);
     TargetAndErrorIfAny targetAndErrorIfAny = (TargetAndErrorIfAny) loadTargetResults;
-    TProcessedTargets processedTargets = processTarget(label, targetAndErrorIfAny);
 
     // Process deps from attributes.
     Collection<SkyKey> labelDepKeys =
@@ -134,22 +133,23 @@
     Map<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>> depMap =
         env.getValuesOrThrow(labelDepKeys, NoSuchPackageException.class,
             NoSuchTargetException.class);
-    processDeps(processedTargets, env.getListener(), targetAndErrorIfAny, depMap.entrySet());
     if (env.valuesMissing()) {
       return null;
     }
-
     // Process deps from aspects.
     Iterable<SkyKey> labelAspectKeys =
         getStrictLabelAspectKeys(targetAndErrorIfAny.getTarget(), depMap, env);
     Set<Entry<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>>>
         labelAspectEntries = env.getValuesOrThrow(labelAspectKeys, NoSuchPackageException.class,
         NoSuchTargetException.class).entrySet();
-    processDeps(processedTargets, env.getListener(), targetAndErrorIfAny, labelAspectEntries);
     if (env.valuesMissing()) {
       return null;
     }
 
+    TProcessedTargets processedTargets = processTarget(label, targetAndErrorIfAny);
+    processDeps(processedTargets, env.getListener(), targetAndErrorIfAny, depMap.entrySet());
+    processDeps(processedTargets, env.getListener(), targetAndErrorIfAny, labelAspectEntries);
+
     return computeSkyValue(targetAndErrorIfAny, processedTargets);
   }