diff options
| author | Scott Mansell <phiren@gmail.com> | 2015-12-03 13:32:07 +1300 |
|---|---|---|
| committer | Scott Mansell <phiren@gmail.com> | 2015-12-03 13:32:07 +1300 |
| commit | a759883ae5045d213837039983ac521e8252ee9e (patch) | |
| tree | f60a34b7dc5560144ceb6dc461186bebd1dd34dd /Source/Core/Common/Logging/LogManager.cpp | |
| parent | 6425ddcbe7b533224adf204a7f1c968a73a470a7 (diff) | |
| parent | f84577b90b2b9ca9685f8e0b17c20af1d8e52343 (diff) | |
Merge pull request #3126 from phire/remove-logging-lock
Refactor logging code to get rid of a mutex.
Diffstat (limited to 'Source/Core/Common/Logging/LogManager.cpp')
| -rw-r--r-- | Source/Core/Common/Logging/LogManager.cpp | 52 |
1 files changed, 10 insertions, 42 deletions
diff --git a/Source/Core/Common/Logging/LogManager.cpp b/Source/Core/Common/Logging/LogManager.cpp index 5d5e4db771..06efc8419c 100644 --- a/Source/Core/Common/Logging/LogManager.cpp +++ b/Source/Core/Common/Logging/LogManager.cpp @@ -9,9 +9,6 @@ #include <set> #include <string> -#ifdef ANDROID -#include <android/log.h> -#endif #include "Common/FileUtil.h" #include "Common/IniFile.h" #include "Common/StringUtil.h" @@ -83,8 +80,8 @@ LogManager::LogManager() m_Log[LogTypes::WII_IPC_WC24] = new LogContainer("WII_IPC_WC24", "WII IPC WC24"); m_Log[LogTypes::WII_IPC_WIIMOTE] = new LogContainer("WII_IPC_WIIMOTE", "WII IPC WIIMOTE"); - m_fileLog = new FileLogListener(File::GetUserPath(F_MAINLOG_IDX)); - m_consoleLog = new ConsoleListener(); + RegisterListener(LogListener::FILE_LISTENER, new FileLogListener(File::GetUserPath(F_MAINLOG_IDX))); + RegisterListener(LogListener::CONSOLE_LISTENER, new ConsoleListener()); IniFile ini; ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX)); @@ -101,25 +98,20 @@ LogManager::LogManager() logs->Get(container->GetShortName(), &enable, false); container->SetEnable(enable); if (enable && write_file) - container->AddListener(m_fileLog); + container->AddListener(LogListener::FILE_LISTENER); if (enable && write_console) - container->AddListener(m_consoleLog); + container->AddListener(LogListener::CONSOLE_LISTENER); } } LogManager::~LogManager() { - for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) - { - m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_fileLog); - m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_consoleLog); - } - for (LogContainer* container : m_Log) delete container; - delete m_fileLog; - delete m_consoleLog; + // The log window listener pointer is owned by the GUI code. + delete m_listeners[LogListener::CONSOLE_LISTENER]; + delete m_listeners[LogListener::FILE_LISTENER]; } void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, @@ -138,10 +130,9 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, file, line, LogTypes::LOG_LEVEL_TO_CHAR[(int)level], log->GetShortName().c_str(), temp); -#ifdef ANDROID - __android_log_write(ANDROID_LOG_INFO, "Dolphinemu", msg.c_str()); -#endif - log->Trigger(level, msg.c_str()); + + for (auto listener_id : *log) + m_listeners[listener_id]->Log(level, msg.c_str()); } void LogManager::Init() @@ -163,29 +154,6 @@ LogContainer::LogContainer(const std::string& shortName, const std::string& full { } -// LogContainer -void LogContainer::AddListener(LogListener *listener) -{ - std::lock_guard<std::mutex> lk(m_listeners_lock); - m_listeners.insert(listener); -} - -void LogContainer::RemoveListener(LogListener *listener) -{ - std::lock_guard<std::mutex> lk(m_listeners_lock); - m_listeners.erase(listener); -} - -void LogContainer::Trigger(LogTypes::LOG_LEVELS level, const char *msg) -{ - std::lock_guard<std::mutex> lk(m_listeners_lock); - - for (LogListener* listener : m_listeners) - { - listener->Log(level, msg); - } -} - FileLogListener::FileLogListener(const std::string& filename) { OpenFStream(m_logfile, filename, std::ios::app); |
