< prev index next >

src/hotspot/share/logging/logStream.hpp

Print this page
rev 58036 : [mq]: asynclog

*** 1,7 **** /* ! * Copyright (c) 2016, 2019, 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. --- 1,7 ---- /* ! * 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,37 **** #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" 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 --- 25,38 ---- #ifndef SHARE_LOGGING_LOGSTREAM_HPP #define SHARE_LOGGING_LOGSTREAM_HPP #include "logging/log.hpp" #include "logging/logHandle.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,99 **** ~LineBuffer(); bool is_empty() const { return _pos == 0; } const char* buffer() const { return _buf; } void append(const char* s, size_t len); void reset(); }; LineBuffer _current_line; LogTargetHandle _log_handle; // Prevent operator new for LogStream. static void* operator new (size_t); static void* operator new[] (size_t); 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()) {} // 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()) {} // 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) {} // Constructor to support creation from a log level and tagset. // // LogStreamBase(level, tageset); ! LogStream(LogLevelType level, LogTagSet* tagset) : _log_handle(level, tagset) {} void write(const char* s, size_t len); }; // Support creation of a LogStream without having to provide a LogTarget pointer. --- 51,117 ---- ~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()), _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()), _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), _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), _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 >