summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Logging/LogManager.cpp
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2015-12-03 13:32:07 +1300
committerScott Mansell <phiren@gmail.com>2015-12-03 13:32:07 +1300
commita759883ae5045d213837039983ac521e8252ee9e (patch)
treef60a34b7dc5560144ceb6dc461186bebd1dd34dd /Source/Core/Common/Logging/LogManager.cpp
parent6425ddcbe7b533224adf204a7f1c968a73a470a7 (diff)
parentf84577b90b2b9ca9685f8e0b17c20af1d8e52343 (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.cpp52
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);