8134403: Nashorn react.js benchmark performance regression

Wed, 26 Aug 2015 20:30:34 +0200

author
attila
date
Wed, 26 Aug 2015 20:30:34 +0200
changeset 1618
4288b54b31ce
parent 1617
59d18db852bd
child 1620
cd562acc692c

8134403: Nashorn react.js benchmark performance regression
Reviewed-by: hannesw, sundar

src/jdk/nashorn/internal/runtime/UserAccessorProperty.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java	Mon Aug 31 14:00:51 2015 -0700
     1.2 +++ b/src/jdk/nashorn/internal/runtime/UserAccessorProperty.java	Wed Aug 26 20:30:34 2015 +0200
     1.3 @@ -24,7 +24,6 @@
     1.4   */
     1.5  
     1.6  package jdk.nashorn.internal.runtime;
     1.7 -
     1.8  import static jdk.nashorn.internal.lookup.Lookup.MH;
     1.9  import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
    1.10  import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
    1.11 @@ -34,6 +33,7 @@
    1.12  import java.lang.invoke.MethodHandle;
    1.13  import java.lang.invoke.MethodHandles;
    1.14  import java.lang.invoke.MethodType;
    1.15 +import java.util.concurrent.Callable;
    1.16  import jdk.nashorn.internal.lookup.Lookup;
    1.17  import jdk.nashorn.internal.runtime.linker.Bootstrap;
    1.18  import jdk.nashorn.internal.runtime.linker.NashornCallSiteDescriptor;
    1.19 @@ -80,6 +80,15 @@
    1.20      private final static MethodHandle INVOKE_LONG_SETTER = findOwnMH_S("invokeLongSetter", void.class, Accessors.class, MethodHandle.class, String.class, Object.class, long.class);
    1.21      private final static MethodHandle INVOKE_NUMBER_SETTER = findOwnMH_S("invokeNumberSetter", void.class, Accessors.class, MethodHandle.class, String.class, Object.class, double.class);
    1.22  
    1.23 +    private static final Object OBJECT_GETTER_INVOKER_KEY = new Object();
    1.24 +    private static MethodHandle getObjectGetterInvoker() {
    1.25 +        return Context.getGlobal().getDynamicInvoker(OBJECT_GETTER_INVOKER_KEY, new Callable<MethodHandle>() {
    1.26 +            @Override
    1.27 +            public MethodHandle call() throws Exception {
    1.28 +                return getINVOKE_UA_GETTER(Object.class, INVALID_PROGRAM_POINT);
    1.29 +            }
    1.30 +        });
    1.31 +    }
    1.32  
    1.33      static MethodHandle getINVOKE_UA_GETTER(final Class<?> returnType, final int programPoint) {
    1.34          if (UnwarrantedOptimismException.isValid(programPoint)) {
    1.35 @@ -90,6 +99,16 @@
    1.36          }
    1.37      }
    1.38  
    1.39 +    private static final Object OBJECT_SETTER_INVOKER_KEY = new Object();
    1.40 +    private static MethodHandle getObjectSetterInvoker() {
    1.41 +        return Context.getGlobal().getDynamicInvoker(OBJECT_SETTER_INVOKER_KEY, new Callable<MethodHandle>() {
    1.42 +            @Override
    1.43 +            public MethodHandle call() throws Exception {
    1.44 +                return getINVOKE_UA_SETTER(Object.class);
    1.45 +            }
    1.46 +        });
    1.47 +    }
    1.48 +
    1.49      static MethodHandle getINVOKE_UA_SETTER(final Class<?> valueType) {
    1.50          return Bootstrap.createDynamicInvoker("dyn:call", void.class, Object.class, Object.class, valueType);
    1.51      }
    1.52 @@ -181,7 +200,7 @@
    1.53      @Override
    1.54      public Object getObjectValue(final ScriptObject self, final ScriptObject owner) {
    1.55          try {
    1.56 -            return invokeObjectGetter(getAccessors((owner != null) ? owner : self), getINVOKE_UA_GETTER(Object.class, INVALID_PROGRAM_POINT), self);
    1.57 +            return invokeObjectGetter(getAccessors((owner != null) ? owner : self), getObjectGetterInvoker(), self);
    1.58          } catch (final Error | RuntimeException t) {
    1.59              throw t;
    1.60          } catch (final Throwable t) {
    1.61 @@ -207,7 +226,7 @@
    1.62      @Override
    1.63      public void setValue(final ScriptObject self, final ScriptObject owner, final Object value, final boolean strict) {
    1.64          try {
    1.65 -            invokeObjectSetter(getAccessors((owner != null) ? owner : self), getINVOKE_UA_SETTER(Object.class), strict ? getKey() : null, self, value);
    1.66 +            invokeObjectSetter(getAccessors((owner != null) ? owner : self), getObjectSetterInvoker(), strict ? getKey() : null, self, value);
    1.67          } catch (final Error | RuntimeException t) {
    1.68              throw t;
    1.69          } catch (final Throwable t) {

mercurial