229 public:
230 CompileTaskWrapper(CompileTask* task);
231 ~CompileTaskWrapper();
232 };
233
234
235 // Compilation
236 //
237 // The broker for all compilation requests.
238 class CompileBroker: AllStatic {
239 friend class Threads;
240 friend class CompileTaskWrapper;
241
242 public:
243 enum {
244 name_buffer_length = 100
245 };
246
247 // Compile type Information for print_last_compile() and CompilerCounters
248 enum { no_compile, normal_compile, osr_compile, native_compile };
249
250 private:
251 static bool _initialized;
252 static volatile bool _should_block;
253
254 // This flag can be used to stop compilation or turn it back on
255 static volatile jint _should_compile_new_jobs;
256
257 // The installed compiler(s)
258 static AbstractCompiler* _compilers[2];
259
260 // These counters are used for assigning id's to each compilation
261 static uint _compilation_id;
262 static uint _osr_compilation_id;
263 static uint _native_compilation_id;
264
265 static int _last_compile_type;
266 static int _last_compile_level;
267 static char _last_method_compiled[name_buffer_length];
268
269 static CompileQueue* _c2_method_queue;
270 static CompileQueue* _c1_method_queue;
271 static CompileTask* _task_free_list;
272
273 static GrowableArray<CompilerThread*>* _compiler_threads;
274
275 // performance counters
276 static PerfCounter* _perf_total_compilation;
277 static PerfCounter* _perf_native_compilation;
278 static PerfCounter* _perf_osr_compilation;
279 static PerfCounter* _perf_standard_compilation;
280
281 static PerfCounter* _perf_total_bailout_count;
282 static PerfCounter* _perf_total_invalidated_count;
283 static PerfCounter* _perf_total_compile_count;
302 static elapsedTimer _t_total_compilation;
303 static elapsedTimer _t_osr_compilation;
304 static elapsedTimer _t_standard_compilation;
305
306 static int _total_compile_count;
307 static int _total_bailout_count;
308 static int _total_invalidated_count;
309 static int _total_native_compile_count;
310 static int _total_osr_compile_count;
311 static int _total_standard_compile_count;
312 static int _sum_osr_bytes_compiled;
313 static int _sum_standard_bytes_compiled;
314 static int _sum_nmethod_size;
315 static int _sum_nmethod_code_size;
316 static long _peak_compilation_time;
317
318 static CompilerThread* make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, AbstractCompiler* comp, TRAPS);
319 static void init_compiler_threads(int c1_compiler_count, int c2_compiler_count);
320 static bool compilation_is_complete (methodHandle method, int osr_bci, int comp_level);
321 static bool compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level);
322 static uint assign_compile_id (methodHandle method, int osr_bci);
323 static bool is_compile_blocking (methodHandle method, int osr_bci);
324 static void preload_classes (methodHandle method, TRAPS);
325
326 static CompileTask* create_compile_task(CompileQueue* queue,
327 int compile_id,
328 methodHandle method,
329 int osr_bci,
330 int comp_level,
331 methodHandle hot_method,
332 int hot_count,
333 const char* comment,
334 bool blocking);
335 static CompileTask* allocate_task();
336 static void free_task(CompileTask* task);
337 static void wait_for_completion(CompileTask* task);
338
339 static void invoke_compiler_on_method(CompileTask* task);
340 static void set_last_compile(CompilerThread *thread, methodHandle method, bool is_osr, int comp_level);
341 static void push_jni_handle_block();
342 static void pop_jni_handle_block();
|
229 public:
230 CompileTaskWrapper(CompileTask* task);
231 ~CompileTaskWrapper();
232 };
233
234
235 // Compilation
236 //
237 // The broker for all compilation requests.
238 class CompileBroker: AllStatic {
239 friend class Threads;
240 friend class CompileTaskWrapper;
241
242 public:
243 enum {
244 name_buffer_length = 100
245 };
246
247 // Compile type Information for print_last_compile() and CompilerCounters
248 enum { no_compile, normal_compile, osr_compile, native_compile };
249 static int assign_compile_id (methodHandle method, int osr_bci);
250
251
252 private:
253 static bool _initialized;
254 static volatile bool _should_block;
255
256 // This flag can be used to stop compilation or turn it back on
257 static volatile jint _should_compile_new_jobs;
258
259 // The installed compiler(s)
260 static AbstractCompiler* _compilers[2];
261
262 // These counters are used for assigning id's to each compilation
263 static volatile jint _compilation_id;
264 static volatile jint _osr_compilation_id;
265
266 static int _last_compile_type;
267 static int _last_compile_level;
268 static char _last_method_compiled[name_buffer_length];
269
270 static CompileQueue* _c2_method_queue;
271 static CompileQueue* _c1_method_queue;
272 static CompileTask* _task_free_list;
273
274 static GrowableArray<CompilerThread*>* _compiler_threads;
275
276 // performance counters
277 static PerfCounter* _perf_total_compilation;
278 static PerfCounter* _perf_native_compilation;
279 static PerfCounter* _perf_osr_compilation;
280 static PerfCounter* _perf_standard_compilation;
281
282 static PerfCounter* _perf_total_bailout_count;
283 static PerfCounter* _perf_total_invalidated_count;
284 static PerfCounter* _perf_total_compile_count;
303 static elapsedTimer _t_total_compilation;
304 static elapsedTimer _t_osr_compilation;
305 static elapsedTimer _t_standard_compilation;
306
307 static int _total_compile_count;
308 static int _total_bailout_count;
309 static int _total_invalidated_count;
310 static int _total_native_compile_count;
311 static int _total_osr_compile_count;
312 static int _total_standard_compile_count;
313 static int _sum_osr_bytes_compiled;
314 static int _sum_standard_bytes_compiled;
315 static int _sum_nmethod_size;
316 static int _sum_nmethod_code_size;
317 static long _peak_compilation_time;
318
319 static CompilerThread* make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, AbstractCompiler* comp, TRAPS);
320 static void init_compiler_threads(int c1_compiler_count, int c2_compiler_count);
321 static bool compilation_is_complete (methodHandle method, int osr_bci, int comp_level);
322 static bool compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level);
323 static bool is_compile_blocking (methodHandle method, int osr_bci);
324 static void preload_classes (methodHandle method, TRAPS);
325
326 static CompileTask* create_compile_task(CompileQueue* queue,
327 int compile_id,
328 methodHandle method,
329 int osr_bci,
330 int comp_level,
331 methodHandle hot_method,
332 int hot_count,
333 const char* comment,
334 bool blocking);
335 static CompileTask* allocate_task();
336 static void free_task(CompileTask* task);
337 static void wait_for_completion(CompileTask* task);
338
339 static void invoke_compiler_on_method(CompileTask* task);
340 static void set_last_compile(CompilerThread *thread, methodHandle method, bool is_osr, int comp_level);
341 static void push_jni_handle_block();
342 static void pop_jni_handle_block();
|