test/lib/sun/hotspot/WhiteBox.java
author thartmann
Fri, 12 Dec 2014 09:36:44 +0100
changeset 28154 342e86350dc8
child 28157 1305bf148a19
permissions -rw-r--r--
8066433: Move Whitebox test library to top level repository Summary: Moved Whitebox test library to top level repository. Reviewed-by: iignatyev, sla, mr
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
/*
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
     2
 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
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
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    27
import java.lang.reflect.Executable;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    28
import java.util.Arrays;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    29
import java.util.List;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    30
import java.util.function.Function;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    31
import java.util.stream.Stream;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    32
import java.security.BasicPermission;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    33
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    34
import sun.hotspot.parser.DiagnosticCommand;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    35
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    36
public class WhiteBox {
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
  @SuppressWarnings("serial")
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    39
  public static class WhiteBoxPermission extends BasicPermission {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    40
    public WhiteBoxPermission(String s) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    41
      super(s);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    42
    }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    43
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    44
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    45
  private WhiteBox() {}
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    46
  private static final WhiteBox instance = new WhiteBox();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    47
  private static native void registerNatives();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    48
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    49
  /**
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    50
   * Returns the singleton WhiteBox instance.
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
   * The returned WhiteBox object should be carefully guarded
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    53
   * 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
    54
   * at arbitrary memory addresses. It must never be passed to
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    55
   * untrusted code.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    56
   */
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    57
  public synchronized static WhiteBox getWhiteBox() {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    58
    SecurityManager sm = System.getSecurityManager();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    59
    if (sm != null) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    60
      sm.checkPermission(new WhiteBoxPermission("getInstance"));
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    61
    }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    62
    return instance;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    63
  }
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
  static {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    66
    registerNatives();
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
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    69
  // Get the maximum heap size supporting COOPs
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    70
  public native long getCompressedOopsMaxHeapSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    71
  // Arguments
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    72
  public native void printHeapSizes();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    73
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    74
  // Memory
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    75
  public native long getObjectAddress(Object o);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    76
  public native int  getHeapOopSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    77
  public native int  getVMPageSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    78
  public native boolean isObjectInOldGen(Object o);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    79
  public native long getObjectSize(Object o);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    80
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    81
  // Runtime
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    82
  // Make sure class name is in the correct format
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    83
  public boolean isClassAlive(String name) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    84
    return isClassAlive0(name.replace('.', '/'));
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    85
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    86
  private native boolean isClassAlive0(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    87
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    88
  // JVMTI
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    89
  public native void addToBootstrapClassLoaderSearch(String segment);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    90
  public native void addToSystemClassLoaderSearch(String segment);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    91
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    92
  // G1
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    93
  public native boolean g1InConcurrentMark();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    94
  public native boolean g1IsHumongous(Object o);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    95
  public native long    g1NumFreeRegions();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    96
  public native int     g1RegionSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    97
  public native Object[]    parseCommandLine(String commandline, char delim, DiagnosticCommand[] args);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    98
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
    99
  // NMT
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   100
  public native long NMTMalloc(long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   101
  public native void NMTFree(long mem);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   102
  public native long NMTReserveMemory(long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   103
  public native void NMTCommitMemory(long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   104
  public native void NMTUncommitMemory(long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   105
  public native void NMTReleaseMemory(long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   106
  public native long NMTMallocWithPseudoStack(long size, int index);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   107
  public native boolean NMTIsDetailSupported();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   108
  public native boolean NMTChangeTrackingLevel();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   109
  public native int NMTGetHashSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   110
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   111
  // Compiler
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   112
  public native void    deoptimizeAll();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   113
  public        boolean isMethodCompiled(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   114
    return isMethodCompiled(method, false /*not osr*/);
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
  public native boolean isMethodCompiled(Executable method, boolean isOsr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   117
  public        boolean isMethodCompilable(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   118
    return isMethodCompilable(method, -1 /*any*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   119
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   120
  public        boolean isMethodCompilable(Executable method, int compLevel) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   121
    return isMethodCompilable(method, compLevel, false /*not osr*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   122
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   123
  public native boolean isMethodCompilable(Executable method, int compLevel, boolean isOsr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   124
  public native boolean isMethodQueuedForCompilation(Executable method);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   125
  public        int     deoptimizeMethod(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   126
    return deoptimizeMethod(method, false /*not osr*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   127
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   128
  public native int     deoptimizeMethod(Executable method, boolean isOsr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   129
  public        void    makeMethodNotCompilable(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   130
    makeMethodNotCompilable(method, -1 /*any*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   131
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   132
  public        void    makeMethodNotCompilable(Executable method, int compLevel) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   133
    makeMethodNotCompilable(method, compLevel, false /*not osr*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   134
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   135
  public native void    makeMethodNotCompilable(Executable method, int compLevel, boolean isOsr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   136
  public        int     getMethodCompilationLevel(Executable method) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   137
    return getMethodCompilationLevel(method, false /*not ost*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   138
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   139
  public native int     getMethodCompilationLevel(Executable method, boolean isOsr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   140
  public native boolean testSetDontInlineMethod(Executable method, boolean value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   141
  public        int     getCompileQueuesSize() {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   142
    return getCompileQueueSize(-1 /*any*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   143
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   144
  public native int     getCompileQueueSize(int compLevel);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   145
  public native boolean testSetForceInlineMethod(Executable method, boolean value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   146
  public        boolean enqueueMethodForCompilation(Executable method, int compLevel) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   147
    return enqueueMethodForCompilation(method, compLevel, -1 /*InvocationEntryBci*/);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   148
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   149
  public native boolean enqueueMethodForCompilation(Executable method, int compLevel, int entry_bci);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   150
  public native void    clearMethodState(Executable method);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   151
  public native void    lockCompilation();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   152
  public native void    unlockCompilation();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   153
  public native int     getMethodEntryBci(Executable method);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   154
  public native Object[] getNMethod(Executable method, boolean isOsr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   155
  public native long    allocateCodeBlob(int size, int type);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   156
  public        long    allocateCodeBlob(long size, int type) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   157
      int intSize = (int) size;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   158
      if ((long) intSize != size || size < 0) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   159
          throw new IllegalArgumentException(
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   160
                "size argument has illegal value " + size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   161
      }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   162
      return allocateCodeBlob( intSize, type);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   163
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   164
  public native void    freeCodeBlob(long addr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   165
  public        void    forceNMethodSweep() {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   166
    try {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   167
        forceNMethodSweep0().join();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   168
    } catch (InterruptedException e) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   169
        Thread.currentThread().interrupt();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   170
    }
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 native Thread  forceNMethodSweep0();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   173
  public native Object[] getCodeHeapEntries(int type);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   174
  public native int     getCompilationActivityMode();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   175
  public native Object[] getCodeBlob(long addr);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   176
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   177
  // Intered strings
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   178
  public native boolean isInStringTable(String str);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   179
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   180
  // Memory
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   181
  public native void readReservedMemory();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   182
  public native long allocateMetaspace(ClassLoader classLoader, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   183
  public native void freeMetaspace(ClassLoader classLoader, long addr, long size);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   184
  public native long incMetaspaceCapacityUntilGC(long increment);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   185
  public native long metaspaceCapacityUntilGC();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   186
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   187
  // Force Young GC
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   188
  public native void youngGC();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   189
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   190
  // Force Full GC
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   191
  public native void fullGC();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   192
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   193
  // Method tries to start concurrent mark cycle.
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   194
  // 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
   195
  public native boolean g1StartConcMarkCycle();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   196
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   197
  // Tests on ReservedSpace/VirtualSpace classes
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   198
  public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   199
  public native void runMemoryUnitTests();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   200
  public native void readFromNoaccessArea();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   201
  public native long getThreadStackSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   202
  public native long getThreadRemainingStackSize();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   203
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   204
  // CPU features
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   205
  public native String getCPUFeatures();
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   206
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   207
  // Native extensions
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   208
  public native long getHeapUsageForContext(int context);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   209
  public native long getHeapRegionCountForContext(int context);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   210
  public native int getContextForObject(Object obj);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   211
  public native void printRegionInfo(int context);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   212
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   213
  // VM flags
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   214
  public native boolean isConstantVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   215
  public native boolean isLockedVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   216
  public native void    setBooleanVMFlag(String name, boolean value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   217
  public native void    setIntxVMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   218
  public native void    setUintxVMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   219
  public native void    setUint64VMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   220
  public native void    setSizeTVMFlag(String name, long value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   221
  public native void    setStringVMFlag(String name, String value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   222
  public native void    setDoubleVMFlag(String name, double value);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   223
  public native Boolean getBooleanVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   224
  public native Long    getIntxVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   225
  public native Long    getUintxVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   226
  public native Long    getUint64VMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   227
  public native Long    getSizeTVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   228
  public native String  getStringVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   229
  public native Double  getDoubleVMFlag(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   230
  private final List<Function<String,Object>> flagsGetters = Arrays.asList(
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   231
    this::getBooleanVMFlag, this::getIntxVMFlag, this::getUintxVMFlag,
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   232
    this::getUint64VMFlag, this::getSizeTVMFlag, this::getStringVMFlag,
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   233
    this::getDoubleVMFlag);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   234
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   235
  public Object getVMFlag(String name) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   236
    return flagsGetters.stream()
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   237
                       .map(f -> f.apply(name))
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   238
                       .filter(x -> x != null)
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   239
                       .findAny()
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   240
                       .orElse(null);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   241
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   242
  public native int getOffsetForName0(String name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   243
  public int getOffsetForName(String name) throws Exception {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   244
    int offset = getOffsetForName0(name);
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   245
    if (offset == -1) {
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   246
      throw new RuntimeException(name + " not found");
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   247
    }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   248
    return offset;
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   249
  }
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   250
342e86350dc8 8066433: Move Whitebox test library to top level repository
thartmann
parents:
diff changeset
   251
}