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