< 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 >