mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8066433: Move Whitebox test library to top level repository
Moved Whitebox test library to top level repository. Reviewed-by: iignatyev, sla, mr
This commit is contained in:
parent
e3198c371a
commit
38a4e8874b
7 changed files with 704 additions and 0 deletions
90
test/lib/sun/hotspot/code/BlobType.java
Normal file
90
test/lib/sun/hotspot/code/BlobType.java
Normal file
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright (c) 2014, 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.
|
||||
*
|
||||
* 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 sun.hotspot.code;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.MemoryPoolMXBean;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import sun.hotspot.WhiteBox;
|
||||
|
||||
public enum BlobType {
|
||||
// Execution level 1 and 4 (non-profiled) nmethods (including native nmethods)
|
||||
MethodNonProfiled(0, "CodeHeap 'non-profiled nmethods'"),
|
||||
// Execution level 2 and 3 (profiled) nmethods
|
||||
MethodProfiled(1, "CodeHeap 'profiled nmethods'"),
|
||||
// Non-nmethods like Buffers, Adapters and Runtime Stubs
|
||||
NonNMethod(2, "CodeHeap 'non-nmethods'") {
|
||||
@Override
|
||||
public boolean allowTypeWhenOverflow(BlobType type) {
|
||||
return super.allowTypeWhenOverflow(type)
|
||||
|| type == BlobType.MethodNonProfiled;
|
||||
}
|
||||
},
|
||||
// All types (No code cache segmentation)
|
||||
All(3, "CodeCache");
|
||||
|
||||
public final int id;
|
||||
private final String beanName;
|
||||
|
||||
private BlobType(int id, String beanName) {
|
||||
this.id = id;
|
||||
this.beanName = beanName;
|
||||
}
|
||||
|
||||
public MemoryPoolMXBean getMemoryPool() {
|
||||
for (MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()) {
|
||||
String name = bean.getName();
|
||||
if (beanName.equals(name)) {
|
||||
return bean;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean allowTypeWhenOverflow(BlobType type) {
|
||||
return type == this;
|
||||
}
|
||||
|
||||
public static EnumSet<BlobType> getAvailable() {
|
||||
WhiteBox whiteBox = WhiteBox.getWhiteBox();
|
||||
if (!whiteBox.getBooleanVMFlag("SegmentedCodeCache")) {
|
||||
// only All for non segmented world
|
||||
return EnumSet.of(All);
|
||||
}
|
||||
if (System.getProperty("java.vm.info").startsWith("interpreted ")) {
|
||||
// only NonNMethod for -Xint
|
||||
return EnumSet.of(NonNMethod);
|
||||
}
|
||||
|
||||
EnumSet<BlobType> result = EnumSet.complementOf(EnumSet.of(All));
|
||||
if (!whiteBox.getBooleanVMFlag("TieredCompilation")
|
||||
|| whiteBox.getIntxVMFlag("TieredStopAtLevel") <= 1) {
|
||||
// there is no MethodProfiled in non tiered world or pure C1
|
||||
result.remove(MethodProfiled);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
68
test/lib/sun/hotspot/code/CodeBlob.java
Normal file
68
test/lib/sun/hotspot/code/CodeBlob.java
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright (c) 2014, 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.
|
||||
*
|
||||
* 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 sun.hotspot.code;
|
||||
|
||||
import sun.hotspot.WhiteBox;
|
||||
|
||||
public class CodeBlob {
|
||||
private static final WhiteBox WB = WhiteBox.getWhiteBox();
|
||||
public static CodeBlob[] getCodeBlobs(BlobType type) {
|
||||
Object[] obj = WB.getCodeHeapEntries(type.id);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
}
|
||||
CodeBlob[] result = new CodeBlob[obj.length];
|
||||
for (int i = 0, n = result.length; i < n; ++i) {
|
||||
result[i] = new CodeBlob((Object[]) obj[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public static CodeBlob getCodeBlob(long addr) {
|
||||
Object[] obj = WB.getCodeBlob(addr);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
}
|
||||
return new CodeBlob(obj);
|
||||
}
|
||||
protected CodeBlob(Object[] obj) {
|
||||
assert obj.length == 3;
|
||||
name = (String) obj[0];
|
||||
size = (Integer) obj[1];
|
||||
code_blob_type = BlobType.values()[(Integer) obj[2]];
|
||||
assert code_blob_type.id == (Integer) obj[2];
|
||||
}
|
||||
public final String name;
|
||||
public final int size;
|
||||
public final BlobType code_blob_type;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CodeBlob{"
|
||||
+ "name=" + name
|
||||
+ ", size=" + size
|
||||
+ ", code_blob_type=" + code_blob_type
|
||||
+ '}';
|
||||
}
|
||||
}
|
56
test/lib/sun/hotspot/code/NMethod.java
Normal file
56
test/lib/sun/hotspot/code/NMethod.java
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (c) 2014, 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.
|
||||
*
|
||||
* 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 sun.hotspot.code;
|
||||
|
||||
import java.lang.reflect.Executable;
|
||||
import sun.hotspot.WhiteBox;
|
||||
|
||||
public class NMethod extends CodeBlob {
|
||||
private static final WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
public static NMethod get(Executable method, boolean isOsr) {
|
||||
Object[] obj = wb.getNMethod(method, isOsr);
|
||||
return obj == null ? null : new NMethod(obj);
|
||||
}
|
||||
private NMethod(Object[] obj) {
|
||||
super((Object[])obj[0]);
|
||||
assert obj.length == 4;
|
||||
comp_level = (Integer) obj[1];
|
||||
insts = (byte[]) obj[2];
|
||||
compile_id = (Integer) obj[3];
|
||||
}
|
||||
public final byte[] insts;
|
||||
public final int comp_level;
|
||||
public final int compile_id;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "NMethod{"
|
||||
+ super.toString()
|
||||
+ ", insts=" + insts
|
||||
+ ", comp_level=" + comp_level
|
||||
+ ", compile_id=" + compile_id
|
||||
+ '}';
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue