hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java
author gtriantafill
Wed, 05 Nov 2014 08:22:17 -0800
changeset 27470 8dd8521d6897
parent 27417 576e2b527e1c
child 27642 8c9eff693145
child 27610 ff5715ccba0d
permissions -rw-r--r--
8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms Reviewed-by: ctornqvi, coleenp
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     1
/*
23499
9d5b7480c9f4 8038240: new WB API to get nmethod
iignatyev
parents: 23493
diff changeset
     2
 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     4
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     7
 * published by the Free Software Foundation.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     8
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    13
 * accompanied this code).
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    14
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    18
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    21
 * questions.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    22
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    23
 */
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    24
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    25
package sun.hotspot;
15621
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
    26
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
    27
import java.lang.reflect.Executable;
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
    28
import java.util.Arrays;
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
    29
import java.util.List;
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
    30
import java.util.function.Function;
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
    31
import java.util.stream.Stream;
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    32
import java.security.BasicPermission;
26844
80398753ed99 8057752: WhiteBox extension support for testing
sjohanss
parents: 26183
diff changeset
    33
12262
fb3b9fede660 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 12095
diff changeset
    34
import sun.hotspot.parser.DiagnosticCommand;
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    35
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    36
public class WhiteBox {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    37
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    38
  @SuppressWarnings("serial")
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    39
  public static class WhiteBoxPermission extends BasicPermission {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    40
    public WhiteBoxPermission(String s) {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    41
      super(s);
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    42
    }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    43
  }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    44
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    45
  private WhiteBox() {}
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    46
  private static final WhiteBox instance = new WhiteBox();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    47
  private static native void registerNatives();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    48
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    49
  /**
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    50
   * Returns the singleton WhiteBox instance.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    51
   *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    52
   * The returned WhiteBox object should be carefully guarded
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    53
   * by the caller, since it can be used to read and write data
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    54
   * at arbitrary memory addresses. It must never be passed to
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    55
   * untrusted code.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    56
   */
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    57
  public synchronized static WhiteBox getWhiteBox() {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    58
    SecurityManager sm = System.getSecurityManager();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    59
    if (sm != null) {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    60
      sm.checkPermission(new WhiteBoxPermission("getInstance"));
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    61
    }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    62
    return instance;
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    63
  }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    64
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    65
  static {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    66
    registerNatives();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    67
  }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    68
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19554
diff changeset
    69
  // Get the maximum heap size supporting COOPs
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19554
diff changeset
    70
  public native long getCompressedOopsMaxHeapSize();
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17083
diff changeset
    71
  // Arguments
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17083
diff changeset
    72
  public native void printHeapSizes();
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17083
diff changeset
    73
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    74
  // Memory
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    75
  public native long getObjectAddress(Object o);
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    76
  public native int  getHeapOopSize();
26183
bbe259d3c8bc 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 25960
diff changeset
    77
  public native boolean isObjectInOldGen(Object o);
bbe259d3c8bc 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 25960
diff changeset
    78
  public native long getObjectSize(Object o);
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    79
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    80
  // Runtime
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    81
  // Make sure class name is in the correct format
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    82
  public boolean isClassAlive(String name) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    83
    return isClassAlive0(name.replace('.', '/'));
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    84
  }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    85
  private native boolean isClassAlive0(String name);
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    86
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    87
  // G1
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    88
  public native boolean g1InConcurrentMark();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    89
  public native boolean g1IsHumongous(Object o);
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    90
  public native long    g1NumFreeRegions();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    91
  public native int     g1RegionSize();
12262
fb3b9fede660 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 12095
diff changeset
    92
  public native Object[]    parseCommandLine(String commandline, DiagnosticCommand[] args);
15452
3bfde2dea09d 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 13728
diff changeset
    93
3bfde2dea09d 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 13728
diff changeset
    94
  // NMT
16666
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    95
  public native long NMTMalloc(long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    96
  public native void NMTFree(long mem);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    97
  public native long NMTReserveMemory(long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    98
  public native void NMTCommitMemory(long addr, long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    99
  public native void NMTUncommitMemory(long addr, long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
   100
  public native void NMTReleaseMemory(long addr, long size);
25946
1572c9f03fb9 8046598: Scalable Native memory tracking development
zgu
parents: 25736
diff changeset
   101
  public native long NMTMallocWithPseudoStack(long size, int index);
19554
3f21e829c7de 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 19332
diff changeset
   102
  public native boolean NMTIsDetailSupported();
27162
0a4a7276949b 8059100: SIGSEGV VirtualMemoryTracker::remove_released_region
coleenp
parents: 26938
diff changeset
   103
  public native boolean NMTChangeTrackingLevel();
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 27417
diff changeset
   104
  public native int NMTGetHashSize();
15621
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
   105
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
   106
  // Compiler
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
   107
  public native void    deoptimizeAll();
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   108
  public        boolean isMethodCompiled(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   109
    return isMethodCompiled(method, false /*not osr*/);
16689
efce070b8d42 8007288: Additional WB API for compiler's testing
iignatyev
parents: 16601
diff changeset
   110
  }
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   111
  public native boolean isMethodCompiled(Executable method, boolean isOsr);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   112
  public        boolean isMethodCompilable(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   113
    return isMethodCompilable(method, -1 /*any*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   114
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   115
  public        boolean isMethodCompilable(Executable method, int compLevel) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   116
    return isMethodCompilable(method, compLevel, false /*not osr*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   117
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   118
  public native boolean isMethodCompilable(Executable method, int compLevel, boolean isOsr);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   119
  public native boolean isMethodQueuedForCompilation(Executable method);
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   120
  public        int     deoptimizeMethod(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   121
    return deoptimizeMethod(method, false /*not osr*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   122
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   123
  public native int     deoptimizeMethod(Executable method, boolean isOsr);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   124
  public        void    makeMethodNotCompilable(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   125
    makeMethodNotCompilable(method, -1 /*any*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   126
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   127
  public        void    makeMethodNotCompilable(Executable method, int compLevel) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   128
    makeMethodNotCompilable(method, compLevel, false /*not osr*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   129
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   130
  public native void    makeMethodNotCompilable(Executable method, int compLevel, boolean isOsr);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   131
  public        int     getMethodCompilationLevel(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   132
    return getMethodCompilationLevel(method, false /*not ost*/);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   133
  }
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   134
  public native int     getMethodCompilationLevel(Executable method, boolean isOsr);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   135
  public native boolean testSetDontInlineMethod(Executable method, boolean value);
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   136
  public        int     getCompileQueuesSize() {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   137
    return getCompileQueueSize(-1 /*any*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   138
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   139
  public native int     getCompileQueueSize(int compLevel);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   140
  public native boolean testSetForceInlineMethod(Executable method, boolean value);
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   141
  public        boolean enqueueMethodForCompilation(Executable method, int compLevel) {
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   142
    return enqueueMethodForCompilation(method, compLevel, -1 /*InvocationEntryBci*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   143
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   144
  public native boolean enqueueMethodForCompilation(Executable method, int compLevel, int entry_bci);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   145
  public native void    clearMethodState(Executable method);
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   146
  public native int     getMethodEntryBci(Executable method);
23499
9d5b7480c9f4 8038240: new WB API to get nmethod
iignatyev
parents: 23493
diff changeset
   147
  public native Object[] getNMethod(Executable method, boolean isOsr);
16601
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   148
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   149
  // Intered strings
16601
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   150
  public native boolean isInStringTable(String str);
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   151
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents: 17019
diff changeset
   152
  // Memory
17824
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17322
diff changeset
   153
  public native void readReservedMemory();
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   154
  public native long allocateMetaspace(ClassLoader classLoader, long size);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   155
  public native void freeMetaspace(ClassLoader classLoader, long addr, long size);
26938
e0b35f8104a7 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 26844
diff changeset
   156
  public native long incMetaspaceCapacityUntilGC(long increment);
e0b35f8104a7 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 26844
diff changeset
   157
  public native long metaspaceCapacityUntilGC();
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents: 17019
diff changeset
   158
26183
bbe259d3c8bc 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 25960
diff changeset
   159
  // force Young GC
bbe259d3c8bc 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 25960
diff changeset
   160
  public native void youngGC();
bbe259d3c8bc 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 25960
diff changeset
   161
16601
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   162
  // force Full GC
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   163
  public native void fullGC();
21554
20b1821f4fbd 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 19986
diff changeset
   164
20b1821f4fbd 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 19986
diff changeset
   165
  // Tests on ReservedSpace/VirtualSpace classes
20b1821f4fbd 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 19986
diff changeset
   166
  public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations);
20b1821f4fbd 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 19986
diff changeset
   167
  public native void runMemoryUnitTests();
20b1821f4fbd 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 19986
diff changeset
   168
  public native void readFromNoaccessArea();
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   169
  public native long getThreadStackSize();
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   170
  public native long getThreadRemainingStackSize();
21554
20b1821f4fbd 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 19986
diff changeset
   171
23493
170c77c1103a 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 21554
diff changeset
   172
  // CPU features
170c77c1103a 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 21554
diff changeset
   173
  public native String getCPUFeatures();
170c77c1103a 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 21554
diff changeset
   174
26844
80398753ed99 8057752: WhiteBox extension support for testing
sjohanss
parents: 26183
diff changeset
   175
  // Native extensions
80398753ed99 8057752: WhiteBox extension support for testing
sjohanss
parents: 26183
diff changeset
   176
  public native long getHeapUsageForContext(int context);
80398753ed99 8057752: WhiteBox extension support for testing
sjohanss
parents: 26183
diff changeset
   177
  public native long getHeapRegionCountForContext(int context);
80398753ed99 8057752: WhiteBox extension support for testing
sjohanss
parents: 26183
diff changeset
   178
  public native int getContextForObject(Object obj);
80398753ed99 8057752: WhiteBox extension support for testing
sjohanss
parents: 26183
diff changeset
   179
  public native void printRegionInfo(int context);
80398753ed99 8057752: WhiteBox extension support for testing
sjohanss
parents: 26183
diff changeset
   180
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   181
  // VM flags
27417
576e2b527e1c 8061443: Whitebox get*VMFlag() methods fail with develop flags in product builds
thartmann
parents: 27162
diff changeset
   182
  public native boolean isConstantVMFlag(String name);
576e2b527e1c 8061443: Whitebox get*VMFlag() methods fail with develop flags in product builds
thartmann
parents: 27162
diff changeset
   183
  public native boolean isLockedVMFlag(String name);
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   184
  public native void    setBooleanVMFlag(String name, boolean value);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   185
  public native void    setIntxVMFlag(String name, long value);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   186
  public native void    setUintxVMFlag(String name, long value);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   187
  public native void    setUint64VMFlag(String name, long value);
25959
6c11a6272b60 8054823: Add size_t as a valid VM flag type
stefank
parents: 25736
diff changeset
   188
  public native void    setSizeTVMFlag(String name, long value);
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   189
  public native void    setStringVMFlag(String name, String value);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   190
  public native void    setDoubleVMFlag(String name, double value);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   191
  public native Boolean getBooleanVMFlag(String name);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   192
  public native Long    getIntxVMFlag(String name);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   193
  public native Long    getUintxVMFlag(String name);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   194
  public native Long    getUint64VMFlag(String name);
25959
6c11a6272b60 8054823: Add size_t as a valid VM flag type
stefank
parents: 25736
diff changeset
   195
  public native Long    getSizeTVMFlag(String name);
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   196
  public native String  getStringVMFlag(String name);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   197
  public native Double  getDoubleVMFlag(String name);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   198
  private final List<Function<String,Object>> flagsGetters = Arrays.asList(
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   199
    this::getBooleanVMFlag, this::getIntxVMFlag, this::getUintxVMFlag,
25959
6c11a6272b60 8054823: Add size_t as a valid VM flag type
stefank
parents: 25736
diff changeset
   200
    this::getUint64VMFlag, this::getSizeTVMFlag, this::getStringVMFlag,
6c11a6272b60 8054823: Add size_t as a valid VM flag type
stefank
parents: 25736
diff changeset
   201
    this::getDoubleVMFlag);
25951
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   202
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   203
  public Object getVMFlag(String name) {
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   204
    return flagsGetters.stream()
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   205
                       .map(f -> f.apply(name))
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   206
                       .filter(x -> x != null)
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   207
                       .findAny()
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   208
                       .orElse(null);
d9d32aabf941 8054938: [TESTBUG] Wrong WhiteBox.java was pushed by JDK-8044140
zgu
parents: 25948
diff changeset
   209
  }
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
   210
}