< prev index next >
src/hotspot/share/logging/logStream.hpp
Print this page
rev 58036 : [mq]: asynclog
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -25,13 +25,14 @@
#ifndef SHARE_LOGGING_LOGSTREAM_HPP
#define SHARE_LOGGING_LOGSTREAM_HPP
#include "logging/log.hpp"
#include "logging/logHandle.hpp"
-#include "memory/resourceArea.hpp"
#include "utilities/ostream.hpp"
+template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
+class AsyncLogTargetImpl;
class LogStream : public outputStream {
friend class LogStreamTest_TestLineBufferAllocation_test_vm_Test; // see test/native/logging/test_logStream.cpp
friend class LogStreamTest_TestLineBufferAllocationCap_test_vm_Test; // see test/native/logging/test_logStream.cpp
@@ -50,50 +51,67 @@
~LineBuffer();
bool is_empty() const { return _pos == 0; }
const char* buffer() const { return _buf; }
void append(const char* s, size_t len);
void reset();
+ size_t size() const { return _pos; }
};
LineBuffer _current_line;
LogTargetHandle _log_handle;
+ bool _async_log;
+ LogMessageBuffer* _async_buffer;
+
// Prevent operator new for LogStream.
static void* operator new (size_t);
static void* operator new[] (size_t);
+ void create_async_buffer();
+
public:
// Constructor to support creation from a LogTarget instance.
//
// LogTarget(Debug, gc) log;
// LogStreamBase(log) stream;
template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
LogStream(const LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) :
- _log_handle(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {}
+ _log_handle(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()), _async_log(false) {}
// Constructor to support creation from typed (likely NULL) pointer. Mostly used by the logging framework.
//
// LogStreamBase stream(log.debug());
// or
// LogStreamBase stream((LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>*)NULL);
template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
LogStream(const LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>* type_carrier) :
- _log_handle(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {}
+ _log_handle(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()), _async_log(false) {}
// Destructor writes any unfinished output left in the line buffer.
~LogStream();
// Constructor to support creation from a LogTargetHandle.
//
// LogTarget(Debug, gc) log;
// LogTargetHandle(log) handle;
// LogStreamBase stream(handle);
- LogStream(LogTargetHandle handle) : _log_handle(handle) {}
+ LogStream(LogTargetHandle handle) : _log_handle(handle), _async_log(false) {}
// Constructor to support creation from a log level and tagset.
//
// LogStreamBase(level, tageset);
- LogStream(LogLevelType level, LogTagSet* tagset) : _log_handle(level, tagset) {}
+ LogStream(LogLevelType level, LogTagSet* tagset) : _log_handle(level, tagset), _async_log(false) {}
+
+ template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
+ LogStream(const AsyncLogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) :
+ _log_handle(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()), _async_log(true), _async_buffer(NULL) {}
+
+ template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
+ LogStream(const AsyncLogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>* type_carrier) :
+ _log_handle(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()), _async_log(true), _async_buffer(NULL) {}
+
+ LogStream(AsyncLogTargetHandle h) :
+ _log_handle(h.level(), h.tagset()), _async_log(true), _async_buffer(NULL) {}
void write(const char* s, size_t len);
};
// Support creation of a LogStream without having to provide a LogTarget pointer.
< prev index next >