Mercurial > hg > truffle
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 |