diff options
author | Taras Tsugrii <ttsugrii@fb.com> | 2018-08-01 08:51:38 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-01 08:53:06 -0700 |
commit | 09cf2074ed21eb8921b22da6069ef889b071b717 (patch) | |
tree | 39cdde9de270ac9c6655f49a96a0bc0ed2445112 /src/main/java/com/google/devtools/build/lib/syntax | |
parent | 7372c04d40d7ab45fa2649c8be002ee6909668d1 (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
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java | 20 |
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()); } |