< prev index next >

src/share/vm/gc/shared/gcTraceSend.cpp

Print this page
rev 9733 : [mq]: webrev.00
rev 9734 : [mq]: webrev.01

*** 416,449 **** e.commit(); } } class PhaseSender : public PhaseVisitor { public: template<typename T> ! void send_phase(PausePhase* pause) { T event(UNTIMED); if (event.should_commit()) { event.set_gcId(GCId::current()); ! event.set_name(pause->name()); ! event.set_starttime(pause->start()); ! event.set_endtime(pause->end()); event.commit(); } } ! void visit(GCPhase* pause) { ShouldNotReachHere(); } ! void visit(ConcurrentPhase* pause) { Unimplemented(); } ! void visit(PausePhase* pause) { ! assert(PhasesStack::PHASE_LEVELS == 5, "Need more event types"); ! ! switch (pause->level()) { ! case 0: send_phase<EventGCPhasePause>(pause); break; ! case 1: send_phase<EventGCPhasePauseLevel1>(pause); break; ! case 2: send_phase<EventGCPhasePauseLevel2>(pause); break; ! case 3: send_phase<EventGCPhasePauseLevel3>(pause); break; ! default: /* Ignore sending this phase */ break; } } }; void GCTracer::send_phase_events(TimePartitions* time_partitions) const { --- 416,465 ---- e.commit(); } } class PhaseSender : public PhaseVisitor { + void visit_pause(GCPhase* phase) { + assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase"); + + switch (phase->level()) { + case 0: send_phase<EventGCPhasePause>(phase); break; + case 1: send_phase<EventGCPhasePauseLevel1>(phase); break; + case 2: send_phase<EventGCPhasePauseLevel2>(phase); break; + case 3: send_phase<EventGCPhasePauseLevel3>(phase); break; + default: /* Ignore sending this phase */ break; + } + } + + void visit_concurrent(GCPhase* phase) { + assert(phase->level() < 1, "There is only one level for ConcurrentPhase"); + + switch (phase->level()) { + case 0: send_phase<EventGCPhaseConcurrent>(phase); break; + default: /* Ignore sending this phase */ break; + } + } + public: template<typename T> ! void send_phase(GCPhase* phase) { T event(UNTIMED); if (event.should_commit()) { event.set_gcId(GCId::current()); ! event.set_name(phase->name()); ! event.set_starttime(phase->start()); ! event.set_endtime(phase->end()); event.commit(); } } ! void visit(GCPhase* phase) { ! if (phase->type() == GCPhase::PausePhaseType) { ! visit_pause(phase); ! } else { ! assert(phase->type() == GCPhase::ConcurrentPhaseType, "Should be ConcurrentPhaseType"); ! visit_concurrent(phase); } } }; void GCTracer::send_phase_events(TimePartitions* time_partitions) const {
< prev index next >