Mercurial > hg > truffle
comparison src/share/vm/prims/whitebox.cpp @ 9080:b84fd7d73702
8007288: Additional WB API for compiler's testing
Reviewed-by: kvn, vlivanov
author | iignatyev |
---|---|
date | Tue, 09 Apr 2013 09:54:17 -0700 |
parents | ede380e13960 |
children | 7a5aec879506 |
comparison
equal
deleted
inserted
replaced
9079:f67065f02409 | 9080:b84fd7d73702 |
---|---|
47 #ifdef INCLUDE_NMT | 47 #ifdef INCLUDE_NMT |
48 #include "services/memTracker.hpp" | 48 #include "services/memTracker.hpp" |
49 #endif // INCLUDE_NMT | 49 #endif // INCLUDE_NMT |
50 | 50 |
51 #include "compiler/compileBroker.hpp" | 51 #include "compiler/compileBroker.hpp" |
52 #include "runtime/compilationPolicy.hpp" | |
52 | 53 |
53 bool WhiteBox::_used = false; | 54 bool WhiteBox::_used = false; |
54 | 55 |
55 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj)) | 56 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj)) |
56 return (jlong)(void*)JNIHandles::resolve(obj); | 57 return (jlong)(void*)JNIHandles::resolve(obj); |
211 return JNI_FALSE; | 212 return JNI_FALSE; |
212 } | 213 } |
213 return (code->is_alive() && !code->is_marked_for_deoptimization()); | 214 return (code->is_alive() && !code->is_marked_for_deoptimization()); |
214 WB_END | 215 WB_END |
215 | 216 |
216 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method)) | 217 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level)) |
217 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 218 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
218 MutexLockerEx mu(Compile_lock); | 219 MutexLockerEx mu(Compile_lock); |
219 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 220 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
220 return !mh->is_not_compilable(); | 221 return CompilationPolicy::can_be_compiled(mh, comp_level); |
221 WB_END | 222 WB_END |
222 | 223 |
223 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) | 224 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) |
224 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 225 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
225 MutexLockerEx mu(Compile_lock); | 226 MutexLockerEx mu(Compile_lock); |
239 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 240 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
240 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 241 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
241 mh->set_not_compilable(); | 242 mh->set_not_compilable(); |
242 WB_END | 243 WB_END |
243 | 244 |
244 WB_ENTRY(jboolean, WB_SetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) | 245 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) |
245 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 246 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
246 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 247 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
247 bool result = mh->dont_inline(); | 248 bool result = mh->dont_inline(); |
248 mh->set_dont_inline(value == JNI_TRUE); | 249 mh->set_dont_inline(value == JNI_TRUE); |
249 return result; | 250 return result; |
250 WB_END | 251 WB_END |
251 | 252 |
252 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o)) | 253 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o)) |
253 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ + | 254 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ + |
254 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */; | 255 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */; |
256 WB_END | |
257 | |
258 | |
259 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) | |
260 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | |
261 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | |
262 bool result = mh->force_inline(); | |
263 mh->set_force_inline(value == JNI_TRUE); | |
264 return result; | |
265 WB_END | |
266 | |
267 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level)) | |
268 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | |
269 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | |
270 nmethod* nm = CompileBroker::compile_method(mh, InvocationEntryBci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); | |
271 MutexLockerEx mu(Compile_lock); | |
272 return (mh->queued_for_compilation() || nm != NULL); | |
273 WB_END | |
274 | |
275 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) | |
276 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | |
277 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | |
278 MutexLockerEx mu(Compile_lock); | |
279 MethodData* mdo = mh->method_data(); | |
280 | |
281 if (mdo != NULL) { | |
282 mdo->init(); | |
283 ResourceMark rm; | |
284 int arg_count = mdo->method()->size_of_parameters(); | |
285 for (int i = 0; i < arg_count; i++) { | |
286 mdo->set_arg_modified(i, 0); | |
287 } | |
288 } | |
289 | |
290 mh->backedge_counter()->init(); | |
291 mh->invocation_counter()->init(); | |
292 mh->set_interpreter_invocation_count(0); | |
293 mh->set_interpreter_throwout_count(0); | |
294 mh->clear_not_c1_compilable(); | |
295 mh->clear_not_c2_compilable(); | |
296 mh->clear_not_c2_osr_compilable(); | |
297 NOT_PRODUCT(mh->set_compiled_invocation_count(0)); | |
298 | |
299 #ifdef TIERED | |
300 mh->set_rate(0.0F); | |
301 mh->set_prev_event_count(0); | |
302 mh->set_prev_time(0); | |
303 #endif | |
255 WB_END | 304 WB_END |
256 | 305 |
257 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) | 306 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) |
258 ResourceMark rm(THREAD); | 307 ResourceMark rm(THREAD); |
259 int len; | 308 int len; |
268 | 317 |
269 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o)) | 318 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o)) |
270 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); | 319 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); |
271 Universe::heap()->collect(GCCause::_last_ditch_collection); | 320 Universe::heap()->collect(GCCause::_last_ditch_collection); |
272 WB_END | 321 WB_END |
273 | |
274 | 322 |
275 //Some convenience methods to deal with objects from java | 323 //Some convenience methods to deal with objects from java |
276 int WhiteBox::offset_for_field(const char* field_name, oop object, | 324 int WhiteBox::offset_for_field(const char* field_name, oop object, |
277 Symbol* signature_symbol) { | 325 Symbol* signature_symbol) { |
278 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); | 326 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); |
347 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, | 395 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, |
348 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Method;)I", | 396 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Method;)I", |
349 (void*)&WB_DeoptimizeMethod }, | 397 (void*)&WB_DeoptimizeMethod }, |
350 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Method;)Z", | 398 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Method;)Z", |
351 (void*)&WB_IsMethodCompiled }, | 399 (void*)&WB_IsMethodCompiled }, |
352 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Method;)Z", | 400 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Method;I)Z", |
353 (void*)&WB_IsMethodCompilable}, | 401 (void*)&WB_IsMethodCompilable}, |
354 {CC"isMethodQueuedForCompilation", | 402 {CC"isMethodQueuedForCompilation", |
355 CC"(Ljava/lang/reflect/Method;)Z", (void*)&WB_IsMethodQueuedForCompilation}, | 403 CC"(Ljava/lang/reflect/Method;)Z", (void*)&WB_IsMethodQueuedForCompilation}, |
356 {CC"makeMethodNotCompilable", | 404 {CC"makeMethodNotCompilable", |
357 CC"(Ljava/lang/reflect/Method;)V", (void*)&WB_MakeMethodNotCompilable}, | 405 CC"(Ljava/lang/reflect/Method;)V", (void*)&WB_MakeMethodNotCompilable}, |
358 {CC"setDontInlineMethod", | 406 {CC"testSetDontInlineMethod", |
359 CC"(Ljava/lang/reflect/Method;Z)Z", (void*)&WB_SetDontInlineMethod}, | 407 CC"(Ljava/lang/reflect/Method;Z)Z", (void*)&WB_TestSetDontInlineMethod}, |
360 {CC"getMethodCompilationLevel", | 408 {CC"getMethodCompilationLevel", |
361 CC"(Ljava/lang/reflect/Method;)I", (void*)&WB_GetMethodCompilationLevel}, | 409 CC"(Ljava/lang/reflect/Method;)I", (void*)&WB_GetMethodCompilationLevel}, |
362 {CC"getCompileQueuesSize", | 410 {CC"getCompileQueuesSize", |
363 CC"()I", (void*)&WB_GetCompileQueuesSize}, | 411 CC"()I", (void*)&WB_GetCompileQueuesSize}, |
412 {CC"testSetForceInlineMethod", | |
413 CC"(Ljava/lang/reflect/Method;Z)Z", (void*)&WB_TestSetForceInlineMethod}, | |
414 {CC"enqueueMethodForCompilation", | |
415 CC"(Ljava/lang/reflect/Method;I)Z", (void*)&WB_EnqueueMethodForCompilation}, | |
416 {CC"clearMethodState", | |
417 CC"(Ljava/lang/reflect/Method;)V", (void*)&WB_ClearMethodState}, | |
364 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, | 418 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, |
365 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, | 419 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, |
366 }; | 420 }; |
367 | 421 |
368 #undef CC | 422 #undef CC |