comparison src/share/vm/prims/whitebox.cpp @ 9085:7a5aec879506

Merge
author bharadwaj
date Thu, 11 Apr 2013 17:16:39 -0700
parents 3b890cd4da64 b84fd7d73702
children 8df6ddda8090 4b2eebe03f93
comparison
equal deleted inserted replaced
9077:480d934f62a8 9085:7a5aec879506
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);
212 return JNI_FALSE; 213 return JNI_FALSE;
213 } 214 }
214 return (code->is_alive() && !code->is_marked_for_deoptimization()); 215 return (code->is_alive() && !code->is_marked_for_deoptimization());
215 WB_END 216 WB_END
216 217
217 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method)) 218 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level))
218 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 219 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
219 MutexLockerEx mu(Compile_lock); 220 MutexLockerEx mu(Compile_lock);
220 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 221 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
221 return !mh->is_not_compilable(); 222 return CompilationPolicy::can_be_compiled(mh, comp_level);
222 WB_END 223 WB_END
223 224
224 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) 225 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
225 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 226 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
226 MutexLockerEx mu(Compile_lock); 227 MutexLockerEx mu(Compile_lock);
240 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 241 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
241 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 242 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
242 mh->set_not_compilable(); 243 mh->set_not_compilable();
243 WB_END 244 WB_END
244 245
245 WB_ENTRY(jboolean, WB_SetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) 246 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
246 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 247 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
247 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 248 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
248 bool result = mh->dont_inline(); 249 bool result = mh->dont_inline();
249 mh->set_dont_inline(value == JNI_TRUE); 250 mh->set_dont_inline(value == JNI_TRUE);
250 return result; 251 return result;
251 WB_END 252 WB_END
252 253
253 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o)) 254 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o))
254 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ + 255 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ +
255 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */; 256 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */;
257 WB_END
258
259
260 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
261 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
262 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
263 bool result = mh->force_inline();
264 mh->set_force_inline(value == JNI_TRUE);
265 return result;
266 WB_END
267
268 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level))
269 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
270 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
271 nmethod* nm = CompileBroker::compile_method(mh, InvocationEntryBci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
272 MutexLockerEx mu(Compile_lock);
273 return (mh->queued_for_compilation() || nm != NULL);
274 WB_END
275
276 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
277 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
278 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
279 MutexLockerEx mu(Compile_lock);
280 MethodData* mdo = mh->method_data();
281
282 if (mdo != NULL) {
283 mdo->init();
284 ResourceMark rm;
285 int arg_count = mdo->method()->size_of_parameters();
286 for (int i = 0; i < arg_count; i++) {
287 mdo->set_arg_modified(i, 0);
288 }
289 }
290
291 mh->backedge_counter()->init();
292 mh->invocation_counter()->init();
293 mh->set_interpreter_invocation_count(0);
294 mh->set_interpreter_throwout_count(0);
295 mh->clear_not_c1_compilable();
296 mh->clear_not_c2_compilable();
297 mh->clear_not_c2_osr_compilable();
298 NOT_PRODUCT(mh->set_compiled_invocation_count(0));
299
300 #ifdef TIERED
301 mh->set_rate(0.0F);
302 mh->set_prev_event_count(0);
303 mh->set_prev_time(0);
304 #endif
256 WB_END 305 WB_END
257 306
258 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) 307 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
259 ResourceMark rm(THREAD); 308 ResourceMark rm(THREAD);
260 int len; 309 int len;
269 318
270 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o)) 319 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
271 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); 320 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true);
272 Universe::heap()->collect(GCCause::_last_ditch_collection); 321 Universe::heap()->collect(GCCause::_last_ditch_collection);
273 WB_END 322 WB_END
274
275 323
276 //Some convenience methods to deal with objects from java 324 //Some convenience methods to deal with objects from java
277 int WhiteBox::offset_for_field(const char* field_name, oop object, 325 int WhiteBox::offset_for_field(const char* field_name, oop object,
278 Symbol* signature_symbol) { 326 Symbol* signature_symbol) {
279 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); 327 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
352 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, 400 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
353 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Method;)I", 401 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Method;)I",
354 (void*)&WB_DeoptimizeMethod }, 402 (void*)&WB_DeoptimizeMethod },
355 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Method;)Z", 403 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Method;)Z",
356 (void*)&WB_IsMethodCompiled }, 404 (void*)&WB_IsMethodCompiled },
357 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Method;)Z", 405 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Method;I)Z",
358 (void*)&WB_IsMethodCompilable}, 406 (void*)&WB_IsMethodCompilable},
359 {CC"isMethodQueuedForCompilation", 407 {CC"isMethodQueuedForCompilation",
360 CC"(Ljava/lang/reflect/Method;)Z", (void*)&WB_IsMethodQueuedForCompilation}, 408 CC"(Ljava/lang/reflect/Method;)Z", (void*)&WB_IsMethodQueuedForCompilation},
361 {CC"makeMethodNotCompilable", 409 {CC"makeMethodNotCompilable",
362 CC"(Ljava/lang/reflect/Method;)V", (void*)&WB_MakeMethodNotCompilable}, 410 CC"(Ljava/lang/reflect/Method;)V", (void*)&WB_MakeMethodNotCompilable},
363 {CC"setDontInlineMethod", 411 {CC"testSetDontInlineMethod",
364 CC"(Ljava/lang/reflect/Method;Z)Z", (void*)&WB_SetDontInlineMethod}, 412 CC"(Ljava/lang/reflect/Method;Z)Z", (void*)&WB_TestSetDontInlineMethod},
365 {CC"getMethodCompilationLevel", 413 {CC"getMethodCompilationLevel",
366 CC"(Ljava/lang/reflect/Method;)I", (void*)&WB_GetMethodCompilationLevel}, 414 CC"(Ljava/lang/reflect/Method;)I", (void*)&WB_GetMethodCompilationLevel},
367 {CC"getCompileQueuesSize", 415 {CC"getCompileQueuesSize",
368 CC"()I", (void*)&WB_GetCompileQueuesSize}, 416 CC"()I", (void*)&WB_GetCompileQueuesSize},
417 {CC"testSetForceInlineMethod",
418 CC"(Ljava/lang/reflect/Method;Z)Z", (void*)&WB_TestSetForceInlineMethod},
419 {CC"enqueueMethodForCompilation",
420 CC"(Ljava/lang/reflect/Method;I)Z", (void*)&WB_EnqueueMethodForCompilation},
421 {CC"clearMethodState",
422 CC"(Ljava/lang/reflect/Method;)V", (void*)&WB_ClearMethodState},
369 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, 423 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
370 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, 424 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
371 }; 425 };
372 426
373 #undef CC 427 #undef CC