< prev index next >
src/share/vm/gc/g1/concurrentMarkThread.cpp
Print this page
rev 9734 : [mq]: webrev.01
*** 88,97 ****
--- 88,111 ----
G1MMUTracker *mmu_tracker = g1_policy->mmu_tracker();
jlong sleep_time_ms = mmu_tracker->when_ms(now, prediction_ms);
os::sleep(this, sleep_time_ms, false);
}
}
+
+ class GCConcPhaseTimer : StackObj {
+ ConcurrentMark* _cm;
+
+ public:
+ GCConcPhaseTimer(ConcurrentMark* cm, const char* title) : _cm(cm) {
+ _cm->register_concurrent_phase_start(title);
+ }
+
+ ~GCConcPhaseTimer() {
+ _cm->register_concurrent_phase_end();
+ }
+ };
+
void ConcurrentMarkThread::run() {
initialize_in_thread();
wait_for_universe_init();
run_service();
*** 125,134 ****
--- 139,149 ----
// subsequent GC could block us from joining the STS and proceed
// without the root regions have been scanned which would be a
// correctness issue.
if (!cm()->has_aborted()) {
+ GCConcPhaseTimer(_cm, "Concurrent Root Region Scanning");
_cm->scanRootRegions();
}
// It would be nice to use the GCTraceConcTime class here but
// the "end" logging is inside the loop and not at the end of
*** 138,147 ****
--- 153,163 ----
int iter = 0;
do {
iter++;
if (!cm()->has_aborted()) {
+ GCConcPhaseTimer(_cm, "Concurrent Mark");
_cm->markFromRoots();
}
double mark_end_time = os::elapsedVTime();
jlong mark_end = os::elapsed_counter();
*** 192,201 ****
--- 208,218 ----
// case they are needed by the pause. If a Full GC takes
// place, it would wait for us to process the regions
// reclaimed by cleanup.
GCTraceConcTime(Info, gc) tt("Concurrent Cleanup");
+ GCConcPhaseTimer(_cm, "Concurrent Cleanup");
// Now do the concurrent cleanup operation.
_cm->completeCleanup();
// Notify anyone who's waiting that there are no more free
*** 248,257 ****
--- 265,275 ----
// We now want to allow clearing of the marking bitmap to be
// suspended by a collection pause.
// We may have aborted just before the remark. Do not bother clearing the
// bitmap then, as it has been done during mark abort.
if (!cm()->has_aborted()) {
+ GCConcPhaseTimer(_cm, "Concurrent Bitmap Clearing");
_cm->clearNextBitmap();
} else {
assert(!G1VerifyBitmaps || _cm->nextMarkBitmapIsClear(), "Next mark bitmap must be clear");
}
}
< prev index next >