1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-03-27 12:40:25 +00:00

Limit log buffer size

This commit is contained in:
elsid 2024-06-15 13:34:13 +02:00
parent c83acac32c
commit 98a8dcbdbf
No known key found for this signature in database
GPG key ID: 4DE04C198CBA7625

View file

@ -1,6 +1,7 @@
#include "debugging.hpp" #include "debugging.hpp"
#include <chrono> #include <chrono>
#include <deque>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <memory> #include <memory>
@ -199,7 +200,7 @@ namespace Debug
Level mLevel; Level mLevel;
}; };
std::vector<Record> globalBuffer; std::deque<Record> globalBuffer;
Color getColor(Level level) Color getColor(Level level)
{ {
@ -284,18 +285,22 @@ namespace Debug
class Buffer class Buffer
{ {
public: public:
explicit Buffer(std::vector<Record>& buffer) explicit Buffer(std::size_t capacity, std::deque<Record>& buffer)
: mBuffer(buffer) : mCapacity(capacity)
, mBuffer(buffer)
{ {
} }
void write(const char* str, std::streamsize size, Level debugLevel) void write(const char* str, std::streamsize size, Level debugLevel)
{ {
while (mBuffer.size() >= mCapacity)
mBuffer.pop_front();
mBuffer.push_back(Record{ std::string(str, size), debugLevel }); mBuffer.push_back(Record{ std::string(str, size), debugLevel });
} }
private: private:
std::vector<Record>& mBuffer; std::size_t mCapacity;
std::deque<Record>& mBuffer;
}; };
template <class First, class Second> template <class First, class Second>
@ -417,8 +422,10 @@ namespace Debug
std::cout.rdbuf(&sb); std::cout.rdbuf(&sb);
std::cerr.rdbuf(&sb); std::cerr.rdbuf(&sb);
#else #else
bufferedOut.open(Tee(Buffer(globalBuffer), Coloured(*rawStdout))); constexpr std::size_t bufferCapacity = 1024;
bufferedErr.open(Tee(Buffer(globalBuffer), Coloured(*rawStderr)));
bufferedOut.open(Tee(Buffer(bufferCapacity, globalBuffer), Coloured(*rawStdout)));
bufferedErr.open(Tee(Buffer(bufferCapacity, globalBuffer), Coloured(*rawStderr)));
std::cout.rdbuf(&bufferedOut); std::cout.rdbuf(&bufferedOut);
std::cerr.rdbuf(&bufferedErr); std::cerr.rdbuf(&bufferedErr);