< prev index next >

src/hotspot/share/utilities/events.hpp

Print this page
rev 52913 : 8204551: Event descriptions are truncated in logs
Reviewed-by: coleenp, andrew

*** 133,169 **** print(out, e.data); } }; // A simple wrapper class for fixed size text messages. ! class StringLogMessage : public FormatBuffer<256> { }; // A simple ring buffer of fixed size text messages. ! class StringEventLog : public EventLogBase<StringLogMessage> { public: ! StringEventLog(const char* name, int count = LogEventsBufferEntries) : EventLogBase<StringLogMessage>(name, count) {} void logv(Thread* thread, const char* format, va_list ap) ATTRIBUTE_PRINTF(3, 0) { ! if (!should_log()) return; ! double timestamp = fetch_timestamp(); ! MutexLockerEx ml(&_mutex, Mutex::_no_safepoint_check_flag); ! int index = compute_log_index(); ! _records[index].thread = thread; ! _records[index].timestamp = timestamp; ! _records[index].data.printv(format, ap); } void log(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(3, 4) { va_list ap; va_start(ap, format); ! logv(thread, format, ap); va_end(ap); } }; class Events : AllStatic { friend class EventLog; --- 133,175 ---- print(out, e.data); } }; // A simple wrapper class for fixed size text messages. ! template <size_t bufsz> ! class FormatStringLogMessage : public FormatBuffer<bufsz> { }; + typedef FormatStringLogMessage<256> StringLogMessage; + typedef FormatStringLogMessage<512> ExtendedStringLogMessage; // A simple ring buffer of fixed size text messages. ! template <size_t bufsz> ! class FormatStringEventLog : public EventLogBase< FormatStringLogMessage<bufsz> > { public: ! FormatStringEventLog(const char* name, int count = LogEventsBufferEntries) : EventLogBase< FormatStringLogMessage<bufsz> >(name, count) {} void logv(Thread* thread, const char* format, va_list ap) ATTRIBUTE_PRINTF(3, 0) { ! if (!this->should_log()) return; ! double timestamp = this->fetch_timestamp(); ! MutexLockerEx ml(&this->_mutex, Mutex::_no_safepoint_check_flag); ! int index = this->compute_log_index(); ! this->_records[index].thread = thread; ! this->_records[index].timestamp = timestamp; ! this->_records[index].data.printv(format, ap); } void log(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(3, 4) { va_list ap; va_start(ap, format); ! this->logv(thread, format, ap); va_end(ap); } }; + typedef FormatStringEventLog<256> StringEventLog; + typedef FormatStringEventLog<512> ExtendedStringEventLog; class Events : AllStatic { friend class EventLog;
*** 174,184 **** // A log for generic messages that aren't well categorized. static StringEventLog* _messages; // A log for internal exception related messages, like internal // throws and implicit exceptions. ! static StringEventLog* _exceptions; // Deoptization related messages static StringEventLog* _deopt_messages; // Redefinition related messages --- 180,190 ---- // A log for generic messages that aren't well categorized. static StringEventLog* _messages; // A log for internal exception related messages, like internal // throws and implicit exceptions. ! static ExtendedStringEventLog* _exceptions; // Deoptization related messages static StringEventLog* _deopt_messages; // Redefinition related messages
*** 282,291 **** --- 288,304 ---- inline void EventLogBase<StringLogMessage>::print(outputStream* out, StringLogMessage& lm) { out->print_raw(lm); out->cr(); } + // Implement a printing routine for the ExtendedStringLogMessage + template <> + inline void EventLogBase<ExtendedStringLogMessage>::print(outputStream* out, ExtendedStringLogMessage& lm) { + out->print_raw(lm); + out->cr(); + } + // Place markers for the beginning and end up of a set of events. // These end up in the default log. class EventMark : public StackObj { StringLogMessage _buffer;
< prev index next >