hotspot/src/share/vm/gc/shared/gcTraceTime.inline.hpp
changeset 37242 91e5f98fff6f
parent 37200 e601cf49b2d8
child 37255 100d4a515df0
equal deleted inserted replaced
37241:b9961c99c356 37242:91e5f98fff6f
    43   STATIC_ASSERT(T4 == LogTag::__NO_TAG); // Need to leave at least the last tag for the "start" tag in log_start()
    43   STATIC_ASSERT(T4 == LogTag::__NO_TAG); // Need to leave at least the last tag for the "start" tag in log_start()
    44 
    44 
    45   // Get log with start tag appended (replace first occurrence of NO_TAG)
    45   // Get log with start tag appended (replace first occurrence of NO_TAG)
    46   const LogTagType start_tag = PREFIX_LOG_TAG(start);
    46   const LogTagType start_tag = PREFIX_LOG_TAG(start);
    47   const LogTagType no_tag = PREFIX_LOG_TAG(_NO_TAG);
    47   const LogTagType no_tag = PREFIX_LOG_TAG(_NO_TAG);
    48   Log<T0,
    48   LogImpl<T0,
    49       T1 == no_tag ? start_tag : T1,
    49           T1 == no_tag ? start_tag : T1,
    50       T1 != no_tag && T2 == no_tag ? start_tag : T2,
    50           T1 != no_tag && T2 == no_tag ? start_tag : T2,
    51       T2 != no_tag && T3 == no_tag ? start_tag : T3,
    51           T2 != no_tag && T3 == no_tag ? start_tag : T3,
    52       T3 != no_tag && T4 == no_tag ? start_tag : T4
    52           T3 != no_tag && T4 == no_tag ? start_tag : T4
    53     > log;
    53     > log;
    54 
    54 
    55   if (log.is_level(Level)) {
    55   if (log.is_level(Level)) {
    56     FormatBuffer<> start_msg("%s", _title);
    56     FormatBuffer<> start_msg("%s", _title);
    57     if (_gc_cause != GCCause::_no_gc) {
    57     if (_gc_cause != GCCause::_no_gc) {
    71   FormatBuffer<> stop_msg("%s", _title);
    71   FormatBuffer<> stop_msg("%s", _title);
    72   if (_gc_cause != GCCause::_no_gc) {
    72   if (_gc_cause != GCCause::_no_gc) {
    73     stop_msg.append(" (%s)", GCCause::to_string(_gc_cause));
    73     stop_msg.append(" (%s)", GCCause::to_string(_gc_cause));
    74   }
    74   }
    75   if (_heap_usage_before == SIZE_MAX) {
    75   if (_heap_usage_before == SIZE_MAX) {
    76     Log<T0, T1, T2, T3, T4>::template write<Level>("%s " LOG_STOP_TIME_FORMAT,
    76     LogImpl<T0, T1, T2, T3, T4>::template write<Level>("%s " LOG_STOP_TIME_FORMAT,
    77         stop_msg.buffer(), start_time_in_secs, stop_time_in_secs, duration_in_ms);
    77         stop_msg.buffer(), start_time_in_secs, stop_time_in_secs, duration_in_ms);
    78   } else {
    78   } else {
    79     CollectedHeap* heap = Universe::heap();
    79     CollectedHeap* heap = Universe::heap();
    80     size_t used_before_m = _heap_usage_before / M;
    80     size_t used_before_m = _heap_usage_before / M;
    81     size_t used_m = heap->used() / M;
    81     size_t used_m = heap->used() / M;
    82     size_t capacity_m = heap->capacity() / M;
    82     size_t capacity_m = heap->capacity() / M;
    83     Log<T0, T1, T2, T3, T4>::template write<Level>("%s " LOG_STOP_HEAP_FORMAT " " LOG_STOP_TIME_FORMAT,
    83     LogImpl<T0, T1, T2, T3, T4>::template write<Level>("%s " LOG_STOP_HEAP_FORMAT " " LOG_STOP_TIME_FORMAT,
    84         stop_msg.buffer(), used_before_m, used_m, capacity_m, start_time_in_secs, stop_time_in_secs, duration_in_ms);
    84         stop_msg.buffer(), used_before_m, used_m, capacity_m, start_time_in_secs, stop_time_in_secs, duration_in_ms);
    85   }
    85   }
    86 }
    86 }
    87 
    87 
    88 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
    88 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
    92   }
    92   }
    93 }
    93 }
    94 
    94 
    95 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
    95 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
    96 GCTraceTimeImpl<Level, T0, T1, T2, T3, T4, GuardTag>::GCTraceTimeImpl(const char* title, GCTimer* timer, GCCause::Cause gc_cause, bool log_heap_usage) :
    96 GCTraceTimeImpl<Level, T0, T1, T2, T3, T4, GuardTag>::GCTraceTimeImpl(const char* title, GCTimer* timer, GCCause::Cause gc_cause, bool log_heap_usage) :
    97   _enabled(Log<T0, T1, T2, T3, T4, GuardTag>::is_level(Level)),
    97   _enabled(LogImpl<T0, T1, T2, T3, T4, GuardTag>::is_level(Level)),
    98   _start_ticks(),
    98   _start_ticks(),
    99   _heap_usage_before(SIZE_MAX),
    99   _heap_usage_before(SIZE_MAX),
   100   _title(title),
   100   _title(title),
   101   _gc_cause(gc_cause),
   101   _gc_cause(gc_cause),
   102   _timer(timer) {
   102   _timer(timer) {
   125   }
   125   }
   126 }
   126 }
   127 
   127 
   128 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
   128 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
   129 GCTraceConcTimeImpl<Level, T0, T1, T2, T3, T4, GuardTag>::GCTraceConcTimeImpl(const char* title) :
   129 GCTraceConcTimeImpl<Level, T0, T1, T2, T3, T4, GuardTag>::GCTraceConcTimeImpl(const char* title) :
   130   _enabled(Log<T0, T1, T2, T3, T4, GuardTag>::is_level(Level)), _start_time(os::elapsed_counter()), _title(title) {
   130   _enabled(LogImpl<T0, T1, T2, T3, T4, GuardTag>::is_level(Level)), _start_time(os::elapsed_counter()), _title(title) {
   131   if (_enabled) {
   131   if (_enabled) {
   132     Log<T0, T1, T2, T3, T4>::template write<Level>("%s (%.3fs)", _title, TimeHelper::counter_to_seconds(_start_time));
   132     LogImpl<T0, T1, T2, T3, T4>::template write<Level>("%s (%.3fs)", _title, TimeHelper::counter_to_seconds(_start_time));
   133   }
   133   }
   134 }
   134 }
   135 
   135 
   136 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
   136 template <LogLevelType Level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag >
   137 GCTraceConcTimeImpl<Level, T0, T1, T2, T3, T4, GuardTag>::~GCTraceConcTimeImpl() {
   137 GCTraceConcTimeImpl<Level, T0, T1, T2, T3, T4, GuardTag>::~GCTraceConcTimeImpl() {
   138   if (_enabled) {
   138   if (_enabled) {
   139     jlong stop_time = os::elapsed_counter();
   139     jlong stop_time = os::elapsed_counter();
   140     Log<T0, T1, T2, T3, T4>::template write<Level>("%s " LOG_STOP_TIME_FORMAT,
   140     LogImpl<T0, T1, T2, T3, T4>::template write<Level>("%s " LOG_STOP_TIME_FORMAT,
   141                                                    _title,
   141                                                    _title,
   142                                                    TimeHelper::counter_to_seconds(_start_time),
   142                                                    TimeHelper::counter_to_seconds(_start_time),
   143                                                    TimeHelper::counter_to_seconds(stop_time),
   143                                                    TimeHelper::counter_to_seconds(stop_time),
   144                                                    TimeHelper::counter_to_millis(stop_time - _start_time));
   144                                                    TimeHelper::counter_to_millis(stop_time - _start_time));
   145   }
   145   }