diff --git a/src/base/logger.cpp b/src/base/logger.cpp index 46d980686..c27ef1784 100644 --- a/src/base/logger.cpp +++ b/src/base/logger.cpp @@ -28,20 +28,31 @@ #include "logger.h" +#include + #include -#include "base/utils/string.h" + +namespace +{ + template + QVector loadFromBuffer(const boost::circular_buffer_space_optimized &src, const int offset = 0) + { + QVector ret; + ret.reserve(src.size() - offset); + std::copy((src.begin() + offset), src.end(), std::back_inserter(ret)); + return ret; + } +} Logger *Logger::m_instance = nullptr; Logger::Logger() - : m_lock(QReadWriteLock::Recursive) - , m_msgCounter(0) - , m_peerCounter(0) + : m_messages(MAX_LOG_MESSAGES) + , m_peers(MAX_LOG_MESSAGES) + , m_lock(QReadWriteLock::Recursive) { } -Logger::~Logger() {} - Logger *Logger::instance() { return m_instance; @@ -68,9 +79,6 @@ void Logger::addMessage(const QString &message, const Log::MsgType &type) const Log::Msg temp = {m_msgCounter++, QDateTime::currentMSecsSinceEpoch(), type, message.toHtmlEscaped()}; m_messages.push_back(temp); - if (m_messages.size() >= MAX_LOG_MESSAGES) - m_messages.pop_front(); - emit newLogMessage(temp); } @@ -81,9 +89,6 @@ void Logger::addPeer(const QString &ip, const bool blocked, const QString &reaso const Log::Peer temp = {m_peerCounter++, QDateTime::currentMSecsSinceEpoch(), ip.toHtmlEscaped(), blocked, reason.toHtmlEscaped()}; m_peers.push_back(temp); - if (m_peers.size() >= MAX_LOG_MESSAGES) - m_peers.pop_front(); - emit newLogPeer(temp); } @@ -95,12 +100,12 @@ QVector Logger::getMessages(const int lastKnownId) const const int size = m_messages.size(); if ((lastKnownId == -1) || (diff >= size)) - return m_messages; + return loadFromBuffer(m_messages); if (diff <= 0) return {}; - return m_messages.mid(size - diff); + return loadFromBuffer(m_messages, (size - diff)); } QVector Logger::getPeers(const int lastKnownId) const @@ -111,12 +116,12 @@ QVector Logger::getPeers(const int lastKnownId) const const int size = m_peers.size(); if ((lastKnownId == -1) || (diff >= size)) - return m_peers; + return loadFromBuffer(m_peers); if (diff <= 0) return {}; - return m_peers.mid(size - diff); + return loadFromBuffer(m_peers, (size - diff)); } void LogMsg(const QString &message, const Log::MsgType &type) diff --git a/src/base/logger.h b/src/base/logger.h index f6be24b4f..0bd6aa441 100644 --- a/src/base/logger.h +++ b/src/base/logger.h @@ -29,6 +29,8 @@ #ifndef LOGGER_H #define LOGGER_H +#include + #include #include #include @@ -89,14 +91,14 @@ signals: private: Logger(); - ~Logger(); + ~Logger() = default; static Logger *m_instance; - QVector m_messages; - QVector m_peers; + boost::circular_buffer_space_optimized m_messages; + boost::circular_buffer_space_optimized m_peers; mutable QReadWriteLock m_lock; - int m_msgCounter; - int m_peerCounter; + int m_msgCounter = 0; + int m_peerCounter = 0; }; // Helper function