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