test/lib/sun/hotspot/WhiteBox.java
author tschatzl
Fri, 07 Aug 2015 15:37:07 +0200
changeset 32193 862a68285b1e
parent 31572 886b43bbc0d4
child 31949 ddd0594084a7
permissions -rw-r--r--
8133042: Remove some direct accesses of G1Allocator to G1CollectedHeap members Summary: Remove direct access to private members of G1CollectedHeap from G1Allocator and G1ArchiveAllocator. Allows removal of friend delcarations. Reviewed-by: kbarrett, jmasa, jwilhelm
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     1
/*
29562
779fa8e10961 8069111: Investigate NMT detail tracking support for 32bit ARM
cjplummer
parents: 28351
diff changeset
     2
 * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     4
 *
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     7
 * published by the Free Software Foundation.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     8
 *
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    13
 * accompanied this code).
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    14
 *
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    18
 *
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    21
 * questions.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    22
 *
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    23
 */
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    24
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    25
package sun.hotspot;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    26
29664
54de61fbee04 8061715: gc/g1/TestShrinkAuxiliaryData15.java fails with java.lang.RuntimeException: heap decommit failed - after > before
azakharov
parents: 28351
diff changeset
    27
import java.lang.management.MemoryUsage;
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    28
import java.lang.reflect.Executable;
31572
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
    29
import java.nio.ByteBuffer;
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    30
import java.util.Arrays;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    31
import java.util.List;
29440
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
    32
import java.util.function.BiFunction;
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    33
import java.util.function.Function;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    34
import java.util.stream.Stream;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    35
import java.security.BasicPermission;
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    36
import java.util.Objects;
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    37
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    38
import sun.hotspot.parser.DiagnosticCommand;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    39
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    40
public class WhiteBox {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    41
  @SuppressWarnings("serial")
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    42
  public static class WhiteBoxPermission extends BasicPermission {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    43
    public WhiteBoxPermission(String s) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    44
      super(s);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    45
    }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    46
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    47
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    48
  private WhiteBox() {}
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    49
  private static final WhiteBox instance = new WhiteBox();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    50
  private static native void registerNatives();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    51
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    52
  /**
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    53
   * Returns the singleton WhiteBox instance.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    54
   *
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    55
   * The returned WhiteBox object should be carefully guarded
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    56
   * by the caller, since it can be used to read and write data
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    57
   * at arbitrary memory addresses. It must never be passed to
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    58
   * untrusted code.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    59
   */
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    60
  public synchronized static WhiteBox getWhiteBox() {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    61
    SecurityManager sm = System.getSecurityManager();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    62
    if (sm != null) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    63
      sm.checkPermission(new WhiteBoxPermission("getInstance"));
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    64
    }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    65
    return instance;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    66
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    67
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    68
  static {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    69
    registerNatives();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    70
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    71
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    72
  // Get the maximum heap size supporting COOPs
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    73
  public native long getCompressedOopsMaxHeapSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    74
  // Arguments
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    75
  public native void printHeapSizes();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    76
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    77
  // Memory
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    78
  private native long getObjectAddress0(Object o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    79
  public           long getObjectAddress(Object o) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    80
    Objects.requireNonNull(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    81
    return getObjectAddress0(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    82
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    83
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    84
  public native int  getHeapOopSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    85
  public native int  getVMPageSize();
31320
5358f1744a3f 8079208: gc/g1/TestLargePageUseForAuxMemory.java fails due to not considering page allocation granularity for setup
tschatzl
parents: 31317
diff changeset
    86
  public native long getVMAllocationGranularity();
30078
cecb6ee4437a 8058354: SPECjvm2008-Derby -2.7% performance regression on Solaris-X64 starting with 9-b29
tschatzl
parents: 30077
diff changeset
    87
  public native long getVMLargePageSize();
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    88
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    89
  private native boolean isObjectInOldGen0(Object o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    90
  public         boolean isObjectInOldGen(Object o) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    91
    Objects.requireNonNull(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    92
    return isObjectInOldGen0(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    93
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    94
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    95
  private native long getObjectSize0(Object o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    96
  public         long getObjectSize(Object o) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    97
    Objects.requireNonNull(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    98
    return getObjectSize0(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
    99
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   100
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   101
  // Runtime
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   102
  // Make sure class name is in the correct format
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   103
  public boolean isClassAlive(String name) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   104
    return isClassAlive0(name.replace('.', '/'));
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   105
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   106
  private native boolean isClassAlive0(String name);
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   107
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   108
  private native boolean isMonitorInflated0(Object obj);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   109
  public         boolean isMonitorInflated(Object obj) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   110
    Objects.requireNonNull(obj);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   111
    return isMonitorInflated0(obj);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   112
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   113
28351
bbdca807711d 8068272: Extend WhiteBox API with methods that check monitor state and force safepoint
fzhinkin
parents: 28159
diff changeset
   114
  public native void forceSafepoint();
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   115
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   116
  // JVMTI
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   117
  private native void addToBootstrapClassLoaderSearch0(String segment);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   118
  public         void addToBootstrapClassLoaderSearch(String segment){
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   119
    Objects.requireNonNull(segment);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   120
    addToBootstrapClassLoaderSearch0(segment);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   121
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   122
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   123
  private native void addToSystemClassLoaderSearch0(String segment);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   124
  public         void addToSystemClassLoaderSearch(String segment) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   125
    Objects.requireNonNull(segment);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   126
    addToSystemClassLoaderSearch0(segment);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   127
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   128
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   129
  // G1
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   130
  public native boolean g1InConcurrentMark();
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   131
  private native boolean g1IsHumongous0(Object o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   132
  public         boolean g1IsHumongous(Object o) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   133
    Objects.requireNonNull(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   134
    return g1IsHumongous0(o);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   135
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   136
29664
54de61fbee04 8061715: gc/g1/TestShrinkAuxiliaryData15.java fails with java.lang.RuntimeException: heap decommit failed - after > before
azakharov
parents: 28351
diff changeset
   137
  public native long    g1NumMaxRegions();
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   138
  public native long    g1NumFreeRegions();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   139
  public native int     g1RegionSize();
29664
54de61fbee04 8061715: gc/g1/TestShrinkAuxiliaryData15.java fails with java.lang.RuntimeException: heap decommit failed - after > before
azakharov
parents: 28351
diff changeset
   140
  public native MemoryUsage g1AuxiliaryMemoryUsage();
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   141
  private  native Object[]    parseCommandLine0(String commandline, char delim, DiagnosticCommand[] args);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   142
  public          Object[]    parseCommandLine(String commandline, char delim, DiagnosticCommand[] args) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   143
    Objects.requireNonNull(args);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   144
    return parseCommandLine0(commandline, delim, args);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   145
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   146
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   147
  // NMT
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   148
  public native long NMTMalloc(long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   149
  public native void NMTFree(long mem);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   150
  public native long NMTReserveMemory(long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   151
  public native void NMTCommitMemory(long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   152
  public native void NMTUncommitMemory(long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   153
  public native void NMTReleaseMemory(long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   154
  public native long NMTMallocWithPseudoStack(long size, int index);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   155
  public native boolean NMTChangeTrackingLevel();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   156
  public native int NMTGetHashSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   157
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   158
  // Compiler
28157
1305bf148a19 8028595: WhiteBox API for stress testing of TieredCompilation
iignatyev
parents: 28154
diff changeset
   159
  public native int     deoptimizeFrames(boolean makeNotEntrant);
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   160
  public native void    deoptimizeAll();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   161
  public        boolean isMethodCompiled(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   162
    return isMethodCompiled(method, false /*not osr*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   163
  }
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   164
  private native boolean isMethodCompiled0(Executable method, boolean isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   165
  public         boolean isMethodCompiled(Executable method, boolean isOsr){
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   166
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   167
    return isMethodCompiled0(method, isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   168
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   169
  public        boolean isMethodCompilable(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   170
    return isMethodCompilable(method, -1 /*any*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   171
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   172
  public        boolean isMethodCompilable(Executable method, int compLevel) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   173
    return isMethodCompilable(method, compLevel, false /*not osr*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   174
  }
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   175
  private native boolean isMethodCompilable0(Executable method, int compLevel, boolean isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   176
  public         boolean isMethodCompilable(Executable method, int compLevel, boolean isOsr) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   177
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   178
    return isMethodCompilable0(method, compLevel, isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   179
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   180
  private native boolean isMethodQueuedForCompilation0(Executable method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   181
  public         boolean isMethodQueuedForCompilation(Executable method) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   182
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   183
    return isMethodQueuedForCompilation0(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   184
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   185
  public        int     deoptimizeMethod(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   186
    return deoptimizeMethod(method, false /*not osr*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   187
  }
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   188
  private native int     deoptimizeMethod0(Executable method, boolean isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   189
  public         int     deoptimizeMethod(Executable method, boolean isOsr) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   190
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   191
    return deoptimizeMethod0(method, isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   192
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   193
  public        void    makeMethodNotCompilable(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   194
    makeMethodNotCompilable(method, -1 /*any*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   195
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   196
  public        void    makeMethodNotCompilable(Executable method, int compLevel) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   197
    makeMethodNotCompilable(method, compLevel, false /*not osr*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   198
  }
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   199
  private native void    makeMethodNotCompilable0(Executable method, int compLevel, boolean isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   200
  public         void    makeMethodNotCompilable(Executable method, int compLevel, boolean isOsr) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   201
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   202
    makeMethodNotCompilable0(method, compLevel, isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   203
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   204
  public        int     getMethodCompilationLevel(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   205
    return getMethodCompilationLevel(method, false /*not ost*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   206
  }
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   207
  private native int     getMethodCompilationLevel0(Executable method, boolean isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   208
  public         int     getMethodCompilationLevel(Executable method, boolean isOsr) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   209
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   210
    return getMethodCompilationLevel0(method, isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   211
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   212
  private native boolean testSetDontInlineMethod0(Executable method, boolean value);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   213
  public         boolean testSetDontInlineMethod(Executable method, boolean value) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   214
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   215
    return testSetDontInlineMethod0(method, value);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   216
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   217
  public        int     getCompileQueuesSize() {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   218
    return getCompileQueueSize(-1 /*any*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   219
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   220
  public native int     getCompileQueueSize(int compLevel);
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   221
  private native boolean testSetForceInlineMethod0(Executable method, boolean value);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   222
  public         boolean testSetForceInlineMethod(Executable method, boolean value) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   223
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   224
    return testSetForceInlineMethod0(method, value);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   225
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   226
  public        boolean enqueueMethodForCompilation(Executable method, int compLevel) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   227
    return enqueueMethodForCompilation(method, compLevel, -1 /*InvocationEntryBci*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   228
  }
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   229
  private native boolean enqueueMethodForCompilation0(Executable method, int compLevel, int entry_bci);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   230
  public  boolean enqueueMethodForCompilation(Executable method, int compLevel, int entry_bci) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   231
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   232
    return enqueueMethodForCompilation0(method, compLevel, entry_bci);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   233
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   234
  private native void    clearMethodState0(Executable method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   235
  public         void    clearMethodState(Executable method) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   236
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   237
    clearMethodState0(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   238
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   239
  public native void    lockCompilation();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   240
  public native void    unlockCompilation();
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   241
  private native int     getMethodEntryBci0(Executable method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   242
  public         int     getMethodEntryBci(Executable method) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   243
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   244
    return getMethodEntryBci0(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   245
  }
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   246
  private native Object[] getNMethod0(Executable method, boolean isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   247
  public         Object[] getNMethod(Executable method, boolean isOsr) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   248
    Objects.requireNonNull(method);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   249
    return getNMethod0(method, isOsr);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   250
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   251
  public native long    allocateCodeBlob(int size, int type);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   252
  public        long    allocateCodeBlob(long size, int type) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   253
      int intSize = (int) size;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   254
      if ((long) intSize != size || size < 0) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   255
          throw new IllegalArgumentException(
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   256
                "size argument has illegal value " + size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   257
      }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   258
      return allocateCodeBlob( intSize, type);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   259
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   260
  public native void    freeCodeBlob(long addr);
30081
2dd31ea5f49c 8075214: SIGSEGV in nmethod sweeping
thartmann
parents: 29666
diff changeset
   261
  public native void    forceNMethodSweep();
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   262
  public native Object[] getCodeHeapEntries(int type);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   263
  public native int     getCompilationActivityMode();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   264
  public native Object[] getCodeBlob(long addr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   265
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   266
  // Intered strings
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   267
  public native boolean isInStringTable(String str);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   268
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   269
  // Memory
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   270
  public native void readReservedMemory();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   271
  public native long allocateMetaspace(ClassLoader classLoader, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   272
  public native void freeMetaspace(ClassLoader classLoader, long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   273
  public native long incMetaspaceCapacityUntilGC(long increment);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   274
  public native long metaspaceCapacityUntilGC();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   275
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   276
  // Force Young GC
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   277
  public native void youngGC();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   278
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   279
  // Force Full GC
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   280
  public native void fullGC();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   281
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   282
  // Method tries to start concurrent mark cycle.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   283
  // It returns false if CM Thread is always in concurrent cycle.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   284
  public native boolean g1StartConcMarkCycle();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   285
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   286
  // Tests on ReservedSpace/VirtualSpace classes
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   287
  public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   288
  public native void runMemoryUnitTests();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   289
  public native void readFromNoaccessArea();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   290
  public native long getThreadStackSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   291
  public native long getThreadRemainingStackSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   292
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   293
  // CPU features
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   294
  public native String getCPUFeatures();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   295
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   296
  // Native extensions
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   297
  public native long getHeapUsageForContext(int context);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   298
  public native long getHeapRegionCountForContext(int context);
30077
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   299
  private native int getContextForObject0(Object obj);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   300
  public         int getContextForObject(Object obj) {
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   301
    Objects.requireNonNull(obj);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   302
    return getContextForObject0(obj);
1b49d946a1c8 8043225: Make whitebox API functions more stable
iignatyev
parents: 29666
diff changeset
   303
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   304
  public native void printRegionInfo(int context);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   305
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   306
  // VM flags
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   307
  public native boolean isConstantVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   308
  public native boolean isLockedVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   309
  public native void    setBooleanVMFlag(String name, boolean value);
31221
72b40bd3f4ee 8080947: Add uint as a valid VM flag type
david
parents: 30083
diff changeset
   310
  public native void    setIntVMFlag(String name, long value);
72b40bd3f4ee 8080947: Add uint as a valid VM flag type
david
parents: 30083
diff changeset
   311
  public native void    setUintVMFlag(String name, long value);
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   312
  public native void    setIntxVMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   313
  public native void    setUintxVMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   314
  public native void    setUint64VMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   315
  public native void    setSizeTVMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   316
  public native void    setStringVMFlag(String name, String value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   317
  public native void    setDoubleVMFlag(String name, double value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   318
  public native Boolean getBooleanVMFlag(String name);
31221
72b40bd3f4ee 8080947: Add uint as a valid VM flag type
david
parents: 30083
diff changeset
   319
  public native Long    getIntVMFlag(String name);
72b40bd3f4ee 8080947: Add uint as a valid VM flag type
david
parents: 30083
diff changeset
   320
  public native Long    getUintVMFlag(String name);
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   321
  public native Long    getIntxVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   322
  public native Long    getUintxVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   323
  public native Long    getUint64VMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   324
  public native Long    getSizeTVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   325
  public native String  getStringVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   326
  public native Double  getDoubleVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   327
  private final List<Function<String,Object>> flagsGetters = Arrays.asList(
31221
72b40bd3f4ee 8080947: Add uint as a valid VM flag type
david
parents: 30083
diff changeset
   328
    this::getBooleanVMFlag, this::getIntVMFlag, this::getUintVMFlag,
72b40bd3f4ee 8080947: Add uint as a valid VM flag type
david
parents: 30083
diff changeset
   329
    this::getIntxVMFlag, this::getUintxVMFlag, this::getUint64VMFlag,
72b40bd3f4ee 8080947: Add uint as a valid VM flag type
david
parents: 30083
diff changeset
   330
    this::getSizeTVMFlag, this::getStringVMFlag, this::getDoubleVMFlag);
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   331
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   332
  public Object getVMFlag(String name) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   333
    return flagsGetters.stream()
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   334
                       .map(f -> f.apply(name))
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   335
                       .filter(x -> x != null)
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   336
                       .findAny()
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   337
                       .orElse(null);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   338
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   339
  public native int getOffsetForName0(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   340
  public int getOffsetForName(String name) throws Exception {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   341
    int offset = getOffsetForName0(name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   342
    if (offset == -1) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   343
      throw new RuntimeException(name + " not found");
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   344
    }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   345
    return offset;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   346
  }
29440
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   347
  public native Boolean getMethodBooleanOption(Executable method, String name);
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   348
  public native Long    getMethodIntxOption(Executable method, String name);
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   349
  public native Long    getMethodUintxOption(Executable method, String name);
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   350
  public native Double  getMethodDoubleOption(Executable method, String name);
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   351
  public native String  getMethodStringOption(Executable method, String name);
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   352
  private final List<BiFunction<Executable,String,Object>> methodOptionGetters
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   353
      = Arrays.asList(this::getMethodBooleanOption, this::getMethodIntxOption,
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   354
          this::getMethodUintxOption, this::getMethodDoubleOption,
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   355
          this::getMethodStringOption);
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   356
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   357
  public Object getMethodOption(Executable method, String name) {
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   358
    return methodOptionGetters.stream()
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   359
                              .map(f -> f.apply(method, name))
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   360
                              .filter(x -> x != null)
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   361
                              .findAny()
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   362
                              .orElse(null);
87390f81c75d 8074980: add WhiteBox API to get a flag value for a method
iignatyev
parents: 28351
diff changeset
   363
  }
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   364
31572
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   365
  public native boolean readImageFile(String imagePath);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   366
  public native long imageOpenImage(String imagePath, boolean bigEndian);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   367
  public native void imageCloseImage(long id);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   368
  public native long imageGetIndexAddress(long id);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   369
  public native long imageGetDataAddress(long id);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   370
  public native boolean imageReadCompressed(long id, long offset,
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   371
    ByteBuffer compressedBuffer, long compressedSize,
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   372
    ByteBuffer uncompressedBuffer, long uncompressedSize);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   373
  public native boolean imageRead(long id, long offset,
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   374
    ByteBuffer uncompressedBuffer, long uncompressedSize);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   375
  public native byte[] imageGetStringBytes(long id, int offset);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   376
  public native long imageGetStringsSize(long id);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   377
  public native long[] imageGetAttributes(long id, int offset);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   378
  public native long[] imageFindAttributes(long id, byte[] path);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   379
  public native int[] imageAttributeOffsets(long id);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   380
  public native int imageGetIntAtAddress(long address, int offset, boolean big_endian);
886b43bbc0d4 8080511: Refresh of jimage support
jfdenise
parents: 31320
diff changeset
   381
28159
d5940675c190 8067972: Bring changes made to WhiteBox.java in 8047290 to that file new location in the top repo
kvn
parents: 28157
diff changeset
   382
  // Safepoint Checking
d5940675c190 8067972: Bring changes made to WhiteBox.java in 8047290 to that file new location in the top repo
kvn
parents: 28157
diff changeset
   383
  public native void assertMatchingSafepointCalls(boolean mutexSafepointValue, boolean attemptedNoSafepointValue);
31314
f273a8edea25 8015086: add interned strings to the shared archive.
jiangli
parents: 31221
diff changeset
   384
f273a8edea25 8015086: add interned strings to the shared archive.
jiangli
parents: 31221
diff changeset
   385
  // Sharing
f273a8edea25 8015086: add interned strings to the shared archive.
jiangli
parents: 31221
diff changeset
   386
  public native boolean isShared(Object o);
31317
9029b3303113 8098821: Crash in system dictionary initialization with shared strings
mseledtsov
parents: 31314
diff changeset
   387
  public native boolean areSharedStringsIgnored();
28154
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   388
}