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