70 _gc_par_phases[MergeRS]->link_thread_work_items(_merge_rs_merged_sparse, MergeRSMergedSparse); |
70 _gc_par_phases[MergeRS]->link_thread_work_items(_merge_rs_merged_sparse, MergeRSMergedSparse); |
71 _merge_rs_merged_fine = new WorkerDataArray<size_t>(max_gc_threads, "Merged Fine:"); |
71 _merge_rs_merged_fine = new WorkerDataArray<size_t>(max_gc_threads, "Merged Fine:"); |
72 _gc_par_phases[MergeRS]->link_thread_work_items(_merge_rs_merged_fine, MergeRSMergedFine); |
72 _gc_par_phases[MergeRS]->link_thread_work_items(_merge_rs_merged_fine, MergeRSMergedFine); |
73 _merge_rs_merged_coarse = new WorkerDataArray<size_t>(max_gc_threads, "Merged Coarse:"); |
73 _merge_rs_merged_coarse = new WorkerDataArray<size_t>(max_gc_threads, "Merged Coarse:"); |
74 _gc_par_phases[MergeRS]->link_thread_work_items(_merge_rs_merged_coarse, MergeRSMergedCoarse); |
74 _gc_par_phases[MergeRS]->link_thread_work_items(_merge_rs_merged_coarse, MergeRSMergedCoarse); |
|
75 _merge_rs_dirty_cards = new WorkerDataArray<size_t>(max_gc_threads, "Dirty Cards:"); |
|
76 _gc_par_phases[MergeRS]->link_thread_work_items(_merge_rs_dirty_cards, MergeRSDirtyCards); |
75 |
77 |
76 _gc_par_phases[OptMergeRS] = new WorkerDataArray<double>(max_gc_threads, "Optional Remembered Sets (ms):"); |
78 _gc_par_phases[OptMergeRS] = new WorkerDataArray<double>(max_gc_threads, "Optional Remembered Sets (ms):"); |
77 _opt_merge_rs_merged_sparse = new WorkerDataArray<size_t>(max_gc_threads, "Merged Sparse:"); |
79 _opt_merge_rs_merged_sparse = new WorkerDataArray<size_t>(max_gc_threads, "Merged Sparse:"); |
78 _gc_par_phases[OptMergeRS]->link_thread_work_items(_opt_merge_rs_merged_sparse, MergeRSMergedSparse); |
80 _gc_par_phases[OptMergeRS]->link_thread_work_items(_opt_merge_rs_merged_sparse, MergeRSMergedSparse); |
79 _opt_merge_rs_merged_fine = new WorkerDataArray<size_t>(max_gc_threads, "Merged Fine:"); |
81 _opt_merge_rs_merged_fine = new WorkerDataArray<size_t>(max_gc_threads, "Merged Fine:"); |
80 _gc_par_phases[OptMergeRS]->link_thread_work_items(_opt_merge_rs_merged_fine, MergeRSMergedFine); |
82 _gc_par_phases[OptMergeRS]->link_thread_work_items(_opt_merge_rs_merged_fine, MergeRSMergedFine); |
81 _opt_merge_rs_merged_coarse = new WorkerDataArray<size_t>(max_gc_threads, "Merged Coarse:"); |
83 _opt_merge_rs_merged_coarse = new WorkerDataArray<size_t>(max_gc_threads, "Merged Coarse:"); |
82 _gc_par_phases[OptMergeRS]->link_thread_work_items(_opt_merge_rs_merged_coarse, MergeRSMergedCoarse); |
84 _gc_par_phases[OptMergeRS]->link_thread_work_items(_opt_merge_rs_merged_coarse, MergeRSMergedCoarse); |
|
85 _opt_merge_rs_dirty_cards = new WorkerDataArray<size_t>(max_gc_threads, "Dirty Cards:"); |
|
86 _gc_par_phases[OptMergeRS]->link_thread_work_items(_opt_merge_rs_dirty_cards, MergeRSDirtyCards); |
83 |
87 |
84 _gc_par_phases[MergeLB] = new WorkerDataArray<double>(max_gc_threads, "Log Buffers (ms):"); |
88 _gc_par_phases[MergeLB] = new WorkerDataArray<double>(max_gc_threads, "Log Buffers (ms):"); |
85 if (G1HotCardCache::default_use_cache()) { |
89 if (G1HotCardCache::default_use_cache()) { |
86 _gc_par_phases[MergeHCC] = new WorkerDataArray<double>(max_gc_threads, "Hot Card Cache (ms):"); |
90 _gc_par_phases[MergeHCC] = new WorkerDataArray<double>(max_gc_threads, "Hot Card Cache (ms):"); |
87 _merge_hcc_dirty_cards = new WorkerDataArray<size_t>(max_gc_threads, "Dirty Cards:"); |
91 _merge_hcc_dirty_cards = new WorkerDataArray<size_t>(max_gc_threads, "Dirty Cards:"); |
302 return _gc_par_phases[phase]->get_thread_work_item(worker_id, index); |
306 return _gc_par_phases[phase]->get_thread_work_item(worker_id, index); |
303 } |
307 } |
304 |
308 |
305 // return the average time for a phase in milliseconds |
309 // return the average time for a phase in milliseconds |
306 double G1GCPhaseTimes::average_time_ms(GCParPhases phase) { |
310 double G1GCPhaseTimes::average_time_ms(GCParPhases phase) { |
|
311 if (_gc_par_phases[phase] == NULL) { |
|
312 return 0.0; |
|
313 } |
307 return _gc_par_phases[phase]->average() * 1000.0; |
314 return _gc_par_phases[phase]->average() * 1000.0; |
308 } |
315 } |
309 |
316 |
310 size_t G1GCPhaseTimes::sum_thread_work_items(GCParPhases phase, uint index) { |
317 size_t G1GCPhaseTimes::sum_thread_work_items(GCParPhases phase, uint index) { |
|
318 if (_gc_par_phases[phase] == NULL) { |
|
319 return 0; |
|
320 } |
311 assert(_gc_par_phases[phase]->thread_work_items(index) != NULL, "No sub count"); |
321 assert(_gc_par_phases[phase]->thread_work_items(index) != NULL, "No sub count"); |
312 return _gc_par_phases[phase]->thread_work_items(index)->sum(); |
322 return _gc_par_phases[phase]->thread_work_items(index)->sum(); |
313 } |
323 } |
314 |
324 |
315 template <class T> |
325 template <class T> |