Move Log implementation to cpp, remove expensive mutex include in hpp

fix/shrink_builds
ζeh Matt 3 years ago
parent 14bf9af056
commit e185d186bf
No known key found for this signature in database
GPG Key ID: 18CE582C71A225B0

@ -1,8 +1,36 @@
#include "debuglog.hpp"
#include <mutex>
namespace Debug
{
Level CurrentDebugLevel = Level::NoLevel;
}
std::mutex Log::sLock;
static std::mutex sLock;
Log::Log(Debug::Level level)
: mShouldLog(level <= Debug::CurrentDebugLevel)
{
// No need to hold the lock if there will be no logging anyway
if (!mShouldLog)
return;
// Locks a global lock while the object is alive
sLock.lock();
// If the app has no logging system enabled, log level is not specified.
// Show all messages without marker - we just use the plain cout in this case.
if (Debug::CurrentDebugLevel == Debug::NoLevel)
return;
std::cout << static_cast<unsigned char>(level);
}
Log::~Log()
{
if (!mShouldLog)
return;
std::cout << std::endl;
sLock.unlock();
}

@ -1,7 +1,6 @@
#ifndef DEBUG_LOG_H
#define DEBUG_LOG_H
#include <mutex>
#include <iostream>
namespace Debug
@ -23,27 +22,9 @@ namespace Debug
class Log
{
static std::mutex sLock;
std::unique_lock<std::mutex> mLock;
public:
explicit Log(Debug::Level level)
: mShouldLog(level <= Debug::CurrentDebugLevel)
{
// No need to hold the lock if there will be no logging anyway
if (!mShouldLog)
return;
// Locks a global lock while the object is alive
mLock = lock();
// If the app has no logging system enabled, log level is not specified.
// Show all messages without marker - we just use the plain cout in this case.
if (Debug::CurrentDebugLevel == Debug::NoLevel)
return;
std::cout << static_cast<unsigned char>(level);
}
explicit Log(Debug::Level level);
~Log();
// Perfect forwarding wrappers to give the chain of objects to cout
template<typename T>
@ -55,14 +36,6 @@ public:
return *this;
}
~Log()
{
if (mShouldLog)
std::cout << std::endl;
}
static std::unique_lock<std::mutex> lock() { return std::unique_lock<std::mutex>(sLock); }
private:
const bool mShouldLog;
};

Loading…
Cancel
Save