aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Taras Tsugrii <ttsugrii@fb.com>2018-08-01 08:51:38 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-01 08:53:06 -0700
commit09cf2074ed21eb8921b22da6069ef889b071b717 (patch)
tree39cdde9de270ac9c6655f49a96a0bc0ed2445112
parent7372c04d40d7ab45fa2649c8be002ee6909668d1 (diff)
[Skylark] Avoid unnecessary allocations.
Since this happens only every single Skylark method invocation CPU and memory usage quickly adds up and shows up on profiler samples a lot. Closes #5656. PiperOrigin-RevId: 206935520
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java
index 5994e03923..87991d539c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java
@@ -468,9 +468,24 @@ public final class FuncallExpression extends Expression {
*/
public static List<Object> extraInterpreterArgs(
MethodDescriptor method, @Nullable FuncallExpression ast, Location loc, Environment env) {
-
ImmutableList.Builder<Object> builder = ImmutableList.builder();
+ appendExtraInterpreterArgs(builder, method, ast, loc, env);
+ return builder.build();
+ }
+ /**
+ * Same as {@link #extraInterpreterArgs(MethodDescriptor, FuncallExpression, Location,
+ * Environment)} but appends args to a passed {@code builder} to avoid unnecessary allocations of
+ * intermediate instances.
+ *
+ * @see #extraInterpreterArgs(MethodDescriptor, FuncallExpression, Location, Environment)
+ */
+ private static void appendExtraInterpreterArgs(
+ ImmutableList.Builder<Object> builder,
+ MethodDescriptor method,
+ @Nullable FuncallExpression ast,
+ Location loc,
+ Environment env) {
if (method.isUseLocation()) {
builder.add(loc);
}
@@ -486,7 +501,6 @@ public final class FuncallExpression extends Expression {
if (method.isUseSkylarkSemantics()) {
builder.add(env.getSemantics());
}
- return builder.build();
}
/**
@@ -595,7 +609,7 @@ public final class FuncallExpression extends Expression {
if (acceptsExtraKwargs) {
builder.add(SkylarkDict.copyOf(environment, extraKwargs));
}
- builder.addAll(extraInterpreterArgs(method, this, getLocation(), environment));
+ appendExtraInterpreterArgs(builder, method, this, getLocation(), environment);
return ArgumentListConversionResult.fromArgumentList(builder.build());
}