annotate src/share/vm/prims/whitebox.cpp @ 8733:9def4075da6d

8008079: G1: Add nextObject routine to CMBitMapRO and replace nextWord Summary: Update the task local finger to the start of the next object when marking aborts, in order to avoid the redundant scanning of all 0's when the marking task restarts, if otherwise updating to the next word. In addition, reuse the routine nextObject() in routine iterate(). Reviewed-by: johnc, ysr Contributed-by: tamao <tao.mao@oracle.com>
author tamao
date Tue, 05 Mar 2013 15:36:56 -0800
parents 12e01444ca2d
children ede380e13960
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1 /*
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
4 *
2d503de963b3 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
2d503de963b3 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
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
7 * published by the Free Software Foundation.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
8 *
2d503de963b3 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
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2d503de963b3 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
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
13 * accompanied this code).
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
14 *
2d503de963b3 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
2d503de963b3 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,
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
18 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2d503de963b3 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
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
21 * questions.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
22 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
23 */
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
24
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
25 #include "precompiled.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
26
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
27 #include "memory/universe.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
28 #include "oops/oop.inline.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
29
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
30 #include "classfile/symbolTable.hpp"
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
31 #include "classfile/classLoaderData.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
32
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
33 #include "prims/whitebox.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
34 #include "prims/wbtestmethods/parserTests.hpp"
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
35
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
36 #include "runtime/interfaceSupport.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
37 #include "runtime/os.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
38 #include "utilities/debug.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
39 #include "utilities/macros.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
40
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
41 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
42 #include "gc_implementation/g1/concurrentMark.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
43 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
44 #include "gc_implementation/g1/heapRegionRemSet.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
45 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
46
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
47 #ifdef INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
48 #include "services/memTracker.hpp"
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
49 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
50
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
51 #include "compiler/compileBroker.hpp"
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
52
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
53 bool WhiteBox::_used = false;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
54
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
55 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
56 return (jlong)(void*)JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
57 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
58
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
59 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
60 return heapOopSize;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
61 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
62
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
63
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
64 class WBIsKlassAliveClosure : public KlassClosure {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
65 Symbol* _name;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
66 bool _found;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
67 public:
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
68 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {}
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
69
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
70 void do_klass(Klass* k) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
71 if (_found) return;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
72 Symbol* ksym = k->name();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
73 if (ksym->fast_compare(_name) == 0) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
74 _found = true;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
75 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
76 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
77
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
78 bool found() const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
79 return _found;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
80 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
81 };
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
82
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
83 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name))
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
84 Handle h_name = JNIHandles::resolve(name);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
85 if (h_name.is_null()) return false;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
86 Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
87 TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
88
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
89 WBIsKlassAliveClosure closure(sym);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
90 ClassLoaderDataGraph::classes_do(&closure);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
91
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
92 return closure.found();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
93 WB_END
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
94
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
95 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
96 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
97 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
98 oop result = JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
99 const HeapRegion* hr = g1->heap_region_containing(result);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
100 return hr->isHumongous();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
101 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
102
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
103 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
104 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
105 size_t nr = g1->free_regions();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
106 return (jlong)nr;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
107 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
108
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
109 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
110 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
111 ConcurrentMark* cm = g1->concurrent_mark();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
112 return cm->concurrent_marking_in_progress();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
113 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
114
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
115 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
116 return (jint)HeapRegion::GrainBytes;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
117 WB_END
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
118 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
119
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
120 #ifdef INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
121 // Keep track of the 3 allocations in NMTAllocTest so we can free them later
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
122 // on and verify that they're not visible anymore
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
123 static void* nmtMtTest1 = NULL, *nmtMtTest2 = NULL, *nmtMtTest3 = NULL;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
124
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
125 // Alloc memory using the test memory type so that we can use that to see if
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
126 // NMT picks it up correctly
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
127 WB_ENTRY(jboolean, WB_NMTAllocTest(JNIEnv* env))
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
128 void *mem;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
129
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
130 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) {
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
131 return false;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
132 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
133
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
134 // Allocate 2 * 128k + 256k + 1024k and free the 1024k one to make sure we track
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
135 // everything correctly. Total should be 512k held alive.
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
136 nmtMtTest1 = os::malloc(128 * 1024, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
137 mem = os::malloc(1024 * 1024, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
138 nmtMtTest2 = os::malloc(256 * 1024, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
139 os::free(mem, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
140 nmtMtTest3 = os::malloc(128 * 1024, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
141
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
142 return true;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
143 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
144
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
145 // Free the memory allocated by NMTAllocTest
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
146 WB_ENTRY(jboolean, WB_NMTFreeTestMemory(JNIEnv* env))
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
147
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
148 if (nmtMtTest1 == NULL || nmtMtTest2 == NULL || nmtMtTest3 == NULL) {
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
149 return false;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
150 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
151
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
152 os::free(nmtMtTest1, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
153 nmtMtTest1 = NULL;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
154 os::free(nmtMtTest2, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
155 nmtMtTest2 = NULL;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
156 os::free(nmtMtTest3, mtTest);
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
157 nmtMtTest3 = NULL;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
158
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
159 return true;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
160 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
161
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
162 // Block until the current generation of NMT data to be merged, used to reliably test the NMT feature
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
163 WB_ENTRY(jboolean, WB_NMTWaitForDataMerge(JNIEnv* env))
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
164
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
165 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) {
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
166 return false;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
167 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
168
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
169 return MemTracker::wbtest_wait_for_data_merge();
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
170 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
171
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
172 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
173
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
174 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
175 assert(method != NULL, "method should not be null");
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
176 ThreadToNativeFromVM ttn(thread);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
177 return env->FromReflectedMethod(method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
178 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
179
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
180 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
181 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
182 CodeCache::mark_all_nmethods_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
183 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
184 VMThread::execute(&op);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
185 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
186
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
187 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
188 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
189 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
190 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
191 int result = 0;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
192 nmethod* code = mh->code();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
193 if (code != NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
194 code->mark_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
195 ++result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
196 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
197 result += CodeCache::mark_for_deoptimization(mh());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
198 if (result > 0) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
199 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
200 VMThread::execute(&op);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
201 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
202 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
203 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
204
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
205 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
206 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
207 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
208 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
209 nmethod* code = mh->code();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
210 if (code == NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
211 return JNI_FALSE;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
212 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
213 return (code->is_alive() && !code->is_marked_for_deoptimization());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
214 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
215
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
216 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
217 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
218 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
219 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
220 return !mh->is_not_compilable();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
221 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
222
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
223 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
224 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
225 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
226 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
227 return mh->queued_for_compilation();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
228 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
229
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
230 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
231 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
232 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
233 nmethod* code = mh->code();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
234 return (code != NULL ? code->comp_level() : CompLevel_none);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
235 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
236
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
237
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
238 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
239 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
240 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
241 mh->set_not_compilable();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
242 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
243
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
244 WB_ENTRY(jboolean, WB_SetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
245 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
246 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
247 bool result = mh->dont_inline();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
248 mh->set_dont_inline(value == JNI_TRUE);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
249 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
250 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
251
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
252 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
253 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ +
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
254 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
255 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
256
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
257 //Some convenience methods to deal with objects from java
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
258 int WhiteBox::offset_for_field(const char* field_name, oop object,
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
259 Symbol* signature_symbol) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
260 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
261 Thread* THREAD = Thread::current();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
262
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
263 //Get the class of our object
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
264 Klass* arg_klass = object->klass();
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
265 //Turn it into an instance-klass
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
266 InstanceKlass* ik = InstanceKlass::cast(arg_klass);
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
267
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
268 //Create symbols to look for in the class
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
269 TempNewSymbol name_symbol = SymbolTable::lookup(field_name, (int) strlen(field_name),
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
270 THREAD);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
271
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
272 //To be filled in with an offset of the field we're looking for
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
273 fieldDescriptor fd;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
274
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
275 Klass* res = ik->find_field(name_symbol, signature_symbol, &fd);
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
276 if (res == NULL) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
277 tty->print_cr("Invalid layout of %s at %s", ik->external_name(),
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
278 name_symbol->as_C_string());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
279 fatal("Invalid layout of preloaded class");
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
280 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
281
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
282 //fetch the field at the offset we've found
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
283 int dest_offset = fd.offset();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
284
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
285 return dest_offset;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
286 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
287
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
288
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
289 const char* WhiteBox::lookup_jstring(const char* field_name, oop object) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
290 int offset = offset_for_field(field_name, object,
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
291 vmSymbols::string_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
292 oop string = object->obj_field(offset);
6202
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
293 if (string == NULL) {
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
294 return NULL;
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
295 }
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
296 const char* ret = java_lang_String::as_utf8_string(string);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
297 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
298 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
299
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
300 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
301 int offset =
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
302 offset_for_field(field_name, object, vmSymbols::bool_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
303 bool ret = (object->bool_field(offset) == JNI_TRUE);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
304 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
305 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
306
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
307
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
308 #define CC (char*)
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
309
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
310 static JNINativeMethod methods[] = {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
311 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
312 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
313 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
314 {CC"parseCommandLine",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
315 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
316 (void*) &WB_ParseCommandLine
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
317 },
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
318 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
319 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
320 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
321 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
322 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
323 #endif // INCLUDE_ALL_GCS
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
324 #ifdef INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
325 {CC"NMTAllocTest", CC"()Z", (void*)&WB_NMTAllocTest },
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
326 {CC"NMTFreeTestMemory", CC"()Z", (void*)&WB_NMTFreeTestMemory },
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
327 {CC"NMTWaitForDataMerge",CC"()Z", (void*)&WB_NMTWaitForDataMerge},
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
328 #endif // INCLUDE_NMT
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
329 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
330 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Method;)I",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
331 (void*)&WB_DeoptimizeMethod },
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
332 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Method;)Z",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
333 (void*)&WB_IsMethodCompiled },
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
334 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Method;)Z",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
335 (void*)&WB_IsMethodCompilable},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
336 {CC"isMethodQueuedForCompilation",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
337 CC"(Ljava/lang/reflect/Method;)Z", (void*)&WB_IsMethodQueuedForCompilation},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
338 {CC"makeMethodNotCompilable",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
339 CC"(Ljava/lang/reflect/Method;)V", (void*)&WB_MakeMethodNotCompilable},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
340 {CC"setDontInlineMethod",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
341 CC"(Ljava/lang/reflect/Method;Z)Z", (void*)&WB_SetDontInlineMethod},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
342 {CC"getMethodCompilationLevel",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
343 CC"(Ljava/lang/reflect/Method;)I", (void*)&WB_GetMethodCompilationLevel},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
344 {CC"getCompileQueuesSize",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
345 CC"()I", (void*)&WB_GetCompileQueuesSize},
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
346 };
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
347
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
348 #undef CC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
349
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
350 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
351 {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
352 if (WhiteBoxAPI) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
353 // Make sure that wbclass is loaded by the null classloader
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
354 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
355 Handle loader(ikh->class_loader());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
356 if (loader.is_null()) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
357 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
358 jint result = env->RegisterNatives(wbclass, methods, sizeof(methods)/sizeof(methods[0]));
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
359 if (result == 0) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
360 WhiteBox::set_used();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
361 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
362 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
363 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
364 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
365 JVM_END