63 HS_DTRACE_PROBE_DECL8(hotspot, method__compile__begin, |
63 HS_DTRACE_PROBE_DECL8(hotspot, method__compile__begin, |
64 char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t); |
64 char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t); |
65 HS_DTRACE_PROBE_DECL9(hotspot, method__compile__end, |
65 HS_DTRACE_PROBE_DECL9(hotspot, method__compile__end, |
66 char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t, bool); |
66 char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t, bool); |
67 |
67 |
68 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(compiler, method, comp_name) \ |
68 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name) \ |
69 { \ |
69 { \ |
70 Symbol* klass_name = (method)->klass_name(); \ |
70 Symbol* klass_name = (method)->klass_name(); \ |
71 Symbol* name = (method)->name(); \ |
71 Symbol* name = (method)->name(); \ |
72 Symbol* signature = (method)->signature(); \ |
72 Symbol* signature = (method)->signature(); \ |
73 HS_DTRACE_PROBE8(hotspot, method__compile__begin, \ |
73 HS_DTRACE_PROBE8(hotspot, method__compile__begin, \ |
75 klass_name->bytes(), klass_name->utf8_length(), \ |
75 klass_name->bytes(), klass_name->utf8_length(), \ |
76 name->bytes(), name->utf8_length(), \ |
76 name->bytes(), name->utf8_length(), \ |
77 signature->bytes(), signature->utf8_length()); \ |
77 signature->bytes(), signature->utf8_length()); \ |
78 } |
78 } |
79 |
79 |
80 #define DTRACE_METHOD_COMPILE_END_PROBE(compiler, method, \ |
80 #define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success) \ |
81 comp_name, success) \ |
|
82 { \ |
81 { \ |
83 Symbol* klass_name = (method)->klass_name(); \ |
82 Symbol* klass_name = (method)->klass_name(); \ |
84 Symbol* name = (method)->name(); \ |
83 Symbol* name = (method)->name(); \ |
85 Symbol* signature = (method)->signature(); \ |
84 Symbol* signature = (method)->signature(); \ |
86 HS_DTRACE_PROBE9(hotspot, method__compile__end, \ |
85 HS_DTRACE_PROBE9(hotspot, method__compile__end, \ |
90 signature->bytes(), signature->utf8_length(), (success)); \ |
89 signature->bytes(), signature->utf8_length(), (success)); \ |
91 } |
90 } |
92 |
91 |
93 #else /* USDT2 */ |
92 #else /* USDT2 */ |
94 |
93 |
95 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(compiler, method, comp_name) \ |
94 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name) \ |
96 { \ |
95 { \ |
97 Symbol* klass_name = (method)->klass_name(); \ |
96 Symbol* klass_name = (method)->klass_name(); \ |
98 Symbol* name = (method)->name(); \ |
97 Symbol* name = (method)->name(); \ |
99 Symbol* signature = (method)->signature(); \ |
98 Symbol* signature = (method)->signature(); \ |
100 HOTSPOT_METHOD_COMPILE_BEGIN( \ |
99 HOTSPOT_METHOD_COMPILE_BEGIN( \ |
102 (char *) klass_name->bytes(), klass_name->utf8_length(), \ |
101 (char *) klass_name->bytes(), klass_name->utf8_length(), \ |
103 (char *) name->bytes(), name->utf8_length(), \ |
102 (char *) name->bytes(), name->utf8_length(), \ |
104 (char *) signature->bytes(), signature->utf8_length()); \ |
103 (char *) signature->bytes(), signature->utf8_length()); \ |
105 } |
104 } |
106 |
105 |
107 #define DTRACE_METHOD_COMPILE_END_PROBE(compiler, method, \ |
106 #define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success) \ |
108 comp_name, success) \ |
|
109 { \ |
107 { \ |
110 Symbol* klass_name = (method)->klass_name(); \ |
108 Symbol* klass_name = (method)->klass_name(); \ |
111 Symbol* name = (method)->name(); \ |
109 Symbol* name = (method)->name(); \ |
112 Symbol* signature = (method)->signature(); \ |
110 Symbol* signature = (method)->signature(); \ |
113 HOTSPOT_METHOD_COMPILE_END( \ |
111 HOTSPOT_METHOD_COMPILE_END( \ |
118 } |
116 } |
119 #endif /* USDT2 */ |
117 #endif /* USDT2 */ |
120 |
118 |
121 #else // ndef DTRACE_ENABLED |
119 #else // ndef DTRACE_ENABLED |
122 |
120 |
123 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(compiler, method, comp_name) |
121 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name) |
124 #define DTRACE_METHOD_COMPILE_END_PROBE(compiler, method, comp_name, success) |
122 #define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success) |
125 |
123 |
126 #endif // ndef DTRACE_ENABLED |
124 #endif // ndef DTRACE_ENABLED |
127 |
125 |
128 bool CompileBroker::_initialized = false; |
126 bool CompileBroker::_initialized = false; |
129 volatile bool CompileBroker::_should_block = false; |
127 volatile bool CompileBroker::_should_block = false; |
1764 assert(!method->is_native(), "no longer compile natives"); |
1762 assert(!method->is_native(), "no longer compile natives"); |
1765 |
1763 |
1766 // Save information about this method in case of failure. |
1764 // Save information about this method in case of failure. |
1767 set_last_compile(thread, method, is_osr, task_level); |
1765 set_last_compile(thread, method, is_osr, task_level); |
1768 |
1766 |
1769 DTRACE_METHOD_COMPILE_BEGIN_PROBE(compiler(task_level), method, |
1767 DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, compiler_name(task_level)); |
1770 compiler_name(task_level)); |
|
1771 } |
1768 } |
1772 |
1769 |
1773 // Allocate a new set of JNI handles. |
1770 // Allocate a new set of JNI handles. |
1774 push_jni_handle_block(); |
1771 push_jni_handle_block(); |
1775 Method* target_handle = task->method(); |
1772 Method* target_handle = task->method(); |
1847 } |
1844 } |
1848 pop_jni_handle_block(); |
1845 pop_jni_handle_block(); |
1849 |
1846 |
1850 methodHandle method(thread, task->method()); |
1847 methodHandle method(thread, task->method()); |
1851 |
1848 |
1852 DTRACE_METHOD_COMPILE_END_PROBE(compiler(task_level), method, |
1849 DTRACE_METHOD_COMPILE_END_PROBE(method, compiler_name(task_level), task->is_success()); |
1853 compiler_name(task_level), task->is_success()); |
|
1854 |
1850 |
1855 collect_statistics(thread, time, task); |
1851 collect_statistics(thread, time, task); |
1856 |
1852 |
1857 if (PrintCompilation && PrintCompilation2) { |
1853 if (PrintCompilation && PrintCompilation2) { |
1858 tty->print("%7d ", (int) tty->time_stamp().milliseconds()); // print timestamp |
1854 tty->print("%7d ", (int) tty->time_stamp().milliseconds()); // print timestamp |