< prev index next >
src/hotspot/share/logging/logMessageBuffer.hpp
Print this page
rev 58036 : [mq]: asynclog
@@ -26,20 +26,22 @@
#include "logging/logDecorations.hpp"
#include "logging/logLevel.hpp"
#include "memory/allocation.hpp"
-class LogMessageBuffer : public StackObj {
- friend class LogMessageTest;
+class LogMessageBuffer : public CHeapObj<mtLogging> {
+ friend class LogMessageTest_nwrite_test_vm_Test;
+
protected:
struct LogLine {
LogLevelType level;
size_t message_offset;
};
static const size_t InitialLineCapacity = 10;
static const size_t InitialMessageBufferCapacity = 1024;
+ Arena* _arena;
size_t _message_buffer_size;
size_t _message_buffer_capacity;
char* _message_buffer;
size_t _line_count;
@@ -49,20 +51,22 @@
bool _allocated;
LogLevelType _least_detailed_level;
size_t (*_prefix_fn)(char*, size_t);
void initialize_buffers();
+ template<typename T>
+ void grow(T*& buffer, size_t& capacity, size_t minimum_length = 0);
private:
- // Forbid copy assignment and copy constructor.
- void operator=(const LogMessageBuffer& ref) {}
- LogMessageBuffer(const LogMessageBuffer& ref) {}
+ NONCOPYABLE(LogMessageBuffer);
public:
- LogMessageBuffer();
+ LogMessageBuffer(Arena* arena = NULL);
~LogMessageBuffer();
+ static size_t initial_buffer_size();
+
class Iterator {
private:
const LogMessageBuffer& _message;
size_t _current_line_index;
LogLevelType _level;
@@ -95,10 +99,14 @@
}
};
void reset();
+ Arena* arena() const {
+ return _arena;
+ }
+
LogLevelType least_detailed_level() const {
return _least_detailed_level;
}
Iterator iterator(LogLevelType level, LogDecorations& decorations) const {
@@ -113,10 +121,12 @@
// Setting this to NULL will disable prefixing.
void set_prefix(size_t (*prefix_fn)(char*, size_t)) {
_prefix_fn = prefix_fn;
}
+ void write_n(LogLevelType level, const char * s, size_t written);
+
ATTRIBUTE_PRINTF(3, 4)
void write(LogLevelType level, const char* fmt, ...);
ATTRIBUTE_PRINTF(3, 0)
virtual void vwrite(LogLevelType level, const char* fmt, va_list args);
< prev index next >