diff options
author | Taras Tsugrii <ttsugrii@fb.com> | 2018-07-30 10:48:31 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-30 10:49:57 -0700 |
commit | 7dbc5e03f1ced0e3a67e42e0f182579865d26af7 (patch) | |
tree | c181d7456e951a103cccf57b301f49ee7de489ff /src/main/java/com/google/devtools/build/lib/skylarkdebug | |
parent | f59022b9b19c0086adc9795fd8659f8bc988f747 (diff) |
[Skylark] Use POJOs instead of dynamic proxies.
Java uses dynamically generated proxy classes to access annotation properties
and their methods are ~7X slower than plain getters. According to async-profiler
50%+ of `convertArgumentList` method time is spent in dynamic proxy methods, so
optimizing their performance makes sense.
This also makes the model less anemic, since POJOs can actually provide business
methods.
Closes #5666.
PiperOrigin-RevId: 206608812
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skylarkdebug')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java index 75d7e00c8f..ba3743de85 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.syntax.ClassObject; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.syntax.FuncallExpression; +import com.google.devtools.build.lib.syntax.MethodDescriptor; import com.google.devtools.build.lib.syntax.Printer; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.lang.reflect.Array; @@ -146,7 +147,7 @@ final class DebuggerSerialization { } ImmutableList.Builder<Value> children = ImmutableList.builder(); for (String fieldName : fieldNames) { - FuncallExpression.MethodDescriptor method = + MethodDescriptor method = FuncallExpression.getStructField(skylarkValue.getClass(), fieldName); try { children.add( |