69 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, task, start)) \
70 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, task, stats)) \
71 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, task, time)) \
72 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, tlab))
73
74
75 // The empty prefix, used when there's no prefix defined.
76 template <LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag = LogTag::__NO_TAG>
77 struct LogPrefix : public AllStatic {
78 STATIC_ASSERT(GuardTag == LogTag::__NO_TAG);
79 static size_t prefix(char* buf, size_t len) {
80 return 0;
81 }
82 };
83
84 #define LOG_PREFIX(fn, ...) \
85 template <> struct LogPrefix<__VA_ARGS__> { \
86 static size_t prefix(char* buf, size_t len) { \
87 DEBUG_ONLY(buf[0] = '\0';) \
88 size_t ret = fn(buf, len); \
89 assert(ret == strlen(buf), "Length mismatch ret (" SIZE_FORMAT ") != buf length (" SIZE_FORMAT ")", ret, strlen(buf)); \
90 return ret; \
91 } \
92 };
93 LOG_PREFIX_LIST
94 #undef LOG_PREFIX
95
96 #endif // SHARE_VM_LOGGING_LOGPREFIX_HPP
|
69 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, task, start)) \
70 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, task, stats)) \
71 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, task, time)) \
72 LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, tlab))
73
74
75 // The empty prefix, used when there's no prefix defined.
76 template <LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag = LogTag::__NO_TAG>
77 struct LogPrefix : public AllStatic {
78 STATIC_ASSERT(GuardTag == LogTag::__NO_TAG);
79 static size_t prefix(char* buf, size_t len) {
80 return 0;
81 }
82 };
83
84 #define LOG_PREFIX(fn, ...) \
85 template <> struct LogPrefix<__VA_ARGS__> { \
86 static size_t prefix(char* buf, size_t len) { \
87 DEBUG_ONLY(buf[0] = '\0';) \
88 size_t ret = fn(buf, len); \
89 /* Either prefix did fit (strlen(buf) == ret && ret < len) */ \
90 /* or the prefix didn't fit in buffer (ret > len && strlen(buf) < len) */ \
91 assert(strlen(buf) < len, "Buffer overrun by prefix function."); \
92 assert(strlen(buf) == ret || ret >= len, "Prefix function should return length of prefix written," \
93 " or the intended length of prefix if the buffer was too small."); \
94 return ret; \
95 } \
96 };
97 LOG_PREFIX_LIST
98 #undef LOG_PREFIX
99
100 #endif // SHARE_VM_LOGGING_LOGPREFIX_HPP
|