< prev index next >
src/share/vm/gc/g1/concurrentMark.cpp
Print this page
rev 9733 : [mq]: webrev.00
rev 9734 : [mq]: webrev.01
*** 434,444 ****
_has_overflown(false),
_concurrent(false),
_has_aborted(false),
_restart_for_overflow(false),
_concurrent_marking_in_progress(false),
! _concurrent_marking_from_roots(false),
// _verbose_level set below
_init_times(),
_remark_times(), _remark_mark_times(), _remark_weak_ref_times(),
--- 434,444 ----
_has_overflown(false),
_concurrent(false),
_has_aborted(false),
_restart_for_overflow(false),
_concurrent_marking_in_progress(false),
! _concurrent_phase_started(false),
// _verbose_level set below
_init_times(),
_remark_times(), _remark_mark_times(), _remark_weak_ref_times(),
*** 1002,1019 ****
// mainly used for sanity checking.
root_regions()->scan_finished();
}
}
! void ConcurrentMark::register_mark_from_roots_phase_start() {
! _concurrent_marking_from_roots = true;
! _g1h->gc_timer_cm()->register_gc_concurrent_start("Concurrent Mark");
}
! void ConcurrentMark::register_mark_from_roots_phase_end() {
! _concurrent_marking_from_roots = false;
! if (!has_aborted()) {
_g1h->gc_timer_cm()->register_gc_concurrent_end();
}
}
void ConcurrentMark::markFromRoots() {
--- 1002,1020 ----
// mainly used for sanity checking.
root_regions()->scan_finished();
}
}
! void ConcurrentMark::register_concurrent_phase_start(const char* title) {
! assert(!_concurrent_phase_started, "Sanity");
! _concurrent_phase_started = true;
! _g1h->gc_timer_cm()->register_gc_concurrent_start(title);
}
! void ConcurrentMark::register_concurrent_phase_end() {
! if (_concurrent_phase_started) {
! _concurrent_phase_started = false;
_g1h->gc_timer_cm()->register_gc_concurrent_end();
}
}
void ConcurrentMark::markFromRoots() {
*** 1022,1033 ****
// "inconsistent argument?");
// However that wouldn't be right, because it's possible that
// a safepoint is indeed in progress as a younger generation
// stop-the-world GC happens even as we mark in this generation.
- register_mark_from_roots_phase_start();
-
_restart_for_overflow = false;
// _g1h has _n_par_threads
_parallel_marking_threads = calc_parallel_marking_threads();
assert(parallel_marking_threads() <= max_parallel_marking_threads(),
--- 1023,1032 ----
*** 1041,1052 ****
CMConcurrentMarkingTask markingTask(this, cmThread());
_parallel_workers->set_active_workers(active_workers);
_parallel_workers->run_task(&markingTask);
- register_mark_from_roots_phase_end();
-
print_stats();
}
void ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) {
// world is stopped at this checkpoint
--- 1040,1049 ----
*** 2625,2634 ****
--- 2622,2635 ----
satb_mq_set.set_active_all_threads(
false, /* new active value */
satb_mq_set.is_active() /* expected_active */);
_g1h->trace_heap_after_concurrent_cycle();
+
+ // Close any open concurrent phase timing
+ register_concurrent_phase_end();
+
_g1h->register_concurrent_cycle_end();
}
static void print_ms_time_info(const char* prefix, const char* name,
NumberSeq& ns) {
< prev index next >