OpenJDK / amber / amber
changeset 10616:12d87b26c8eb
Merge
author | jcoomes |
---|---|
date | Fri, 30 Sep 2011 17:20:56 -0700 |
parents | 262c6bd01735 7e211ad476ca |
children | 88f1603ed2de |
files | |
diffstat | 4 files changed, 59 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/java/lang/invoke/AdapterMethodHandle.java Thu Sep 29 18:53:53 2011 -0700 +++ b/jdk/src/share/classes/java/lang/invoke/AdapterMethodHandle.java Fri Sep 30 17:20:56 2011 -0700 @@ -53,7 +53,7 @@ // JVM might update VM-specific bits of conversion (ignore) MethodHandleNatives.init(this, target, convArgPos(conv)); } - private AdapterMethodHandle(MethodHandle target, MethodType newType, + AdapterMethodHandle(MethodHandle target, MethodType newType, long conv) { this(target, newType, conv, null); } @@ -423,7 +423,7 @@ insertStackMove(stackMove) ); } - private static long makeConv(int convOp) { + static long makeConv(int convOp) { assert(convOp == OP_RETYPE_ONLY || convOp == OP_RETYPE_RAW); return ((long)-1 << 32) | (convOp << CONV_OP_SHIFT); // stackMove, src, dst all zero }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/java/lang/invoke/CountingMethodHandle.java Fri Sep 30 17:20:56 2011 -0700 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang.invoke; + +import static java.lang.invoke.MethodHandleNatives.Constants.*; + +/** + * This method handle is used to optionally provide a count of how + * many times it was invoked. + * + * @author never + */ +class CountingMethodHandle extends AdapterMethodHandle { + private int vmcount; + + private CountingMethodHandle(MethodHandle target) { + super(target, target.type(), AdapterMethodHandle.makeConv(OP_RETYPE_ONLY)); + } + + /** Wrap the incoming MethodHandle in a CountingMethodHandle if they are enabled */ + static MethodHandle wrap(MethodHandle mh) { + if (MethodHandleNatives.COUNT_GWT) { + return new CountingMethodHandle(mh); + } + return mh; + } +}
--- a/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java Thu Sep 29 18:53:53 2011 -0700 +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java Fri Sep 30 17:20:56 2011 -0700 @@ -749,8 +749,8 @@ assert(target.type().equals(fallback.type())); MethodHandle tailcall = MethodHandles.exactInvoker(target.type()); MethodHandle select = selectAlternative(); - select = bindArgument(select, 2, fallback); - select = bindArgument(select, 1, target); + select = bindArgument(select, 2, CountingMethodHandle.wrap(fallback)); + select = bindArgument(select, 1, CountingMethodHandle.wrap(target)); // select(z: boolean) => (z ? target : fallback) MethodHandle filter = filterArgument(tailcall, 0, select); assert(filter.type().parameterType(0) == boolean.class);
--- a/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java Thu Sep 29 18:53:53 2011 -0700 +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java Fri Sep 30 17:20:56 2011 -0700 @@ -120,6 +120,8 @@ static final int OP_ROT_ARGS_DOWN_LIMIT_BIAS; + static final boolean COUNT_GWT; + private static native void registerNatives(); static { registerNatives(); @@ -131,6 +133,7 @@ k = getConstant(Constants.GC_OP_ROT_ARGS_DOWN_LIMIT_BIAS); OP_ROT_ARGS_DOWN_LIMIT_BIAS = (k != 0) ? (byte)k : -1; HAVE_RICOCHET_FRAMES = (CONV_OP_IMPLEMENTED_MASK & (1<<OP_COLLECT_ARGS)) != 0; + COUNT_GWT = getConstant(Constants.GC_COUNT_GWT) != 0; //sun.reflect.Reflection.registerMethodsToFilter(MethodHandleImpl.class, "init"); } @@ -143,7 +146,8 @@ GC_JVM_PUSH_LIMIT = 0, GC_JVM_STACK_MOVE_UNIT = 1, GC_CONV_OP_IMPLEMENTED_MASK = 2, - GC_OP_ROT_ARGS_DOWN_LIMIT_BIAS = 3; + GC_OP_ROT_ARGS_DOWN_LIMIT_BIAS = 3, + GC_COUNT_GWT = 4; static final int ETF_HANDLE_OR_METHOD_NAME = 0, // all available data (immediate MH or method) ETF_DIRECT_HANDLE = 1, // ultimate method handle (will be a DMH, may be self)