mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-10 12:45:46 +00:00
LogManager: remove per-container listeners
This commit is contained in:
parent
546fa628fb
commit
18da6dee8e
@ -8,7 +8,6 @@
|
|||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "Common/BitSet.h"
|
|
||||||
#include "Common/CommonPaths.h"
|
#include "Common/CommonPaths.h"
|
||||||
#include "Common/FileUtil.h"
|
#include "Common/FileUtil.h"
|
||||||
#include "Common/IniFile.h"
|
#include "Common/IniFile.h"
|
||||||
@ -58,19 +57,12 @@ public:
|
|||||||
|
|
||||||
std::string GetShortName() const { return m_short_name; }
|
std::string GetShortName() const { return m_short_name; }
|
||||||
std::string GetFullName() const { return m_full_name; }
|
std::string GetFullName() const { return m_full_name; }
|
||||||
void AddListener(LogListener::LISTENER id) { m_listener_ids[id] = 1; }
|
|
||||||
void RemoveListener(LogListener::LISTENER id) { m_listener_ids[id] = 0; }
|
|
||||||
bool IsEnabled() const { return m_enable; }
|
bool IsEnabled() const { return m_enable; }
|
||||||
void SetEnable(bool enable) { m_enable = enable; }
|
void SetEnable(bool enable) { m_enable = enable; }
|
||||||
bool HasListeners() const { return bool(m_listener_ids); }
|
|
||||||
typedef class BitSet32::Iterator iterator;
|
|
||||||
iterator begin() const { return m_listener_ids.begin(); }
|
|
||||||
iterator end() const { return m_listener_ids.end(); }
|
|
||||||
private:
|
private:
|
||||||
std::string m_full_name;
|
std::string m_full_name;
|
||||||
std::string m_short_name;
|
std::string m_short_name;
|
||||||
bool m_enable;
|
bool m_enable;
|
||||||
BitSet32 m_listener_ids;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line,
|
void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line,
|
||||||
@ -169,18 +161,15 @@ LogManager::LogManager()
|
|||||||
verbosity = MAX_LOGLEVEL;
|
verbosity = MAX_LOGLEVEL;
|
||||||
|
|
||||||
SetLogLevel(static_cast<LogTypes::LOG_LEVELS>(verbosity));
|
SetLogLevel(static_cast<LogTypes::LOG_LEVELS>(verbosity));
|
||||||
|
EnableListener(LogListener::FILE_LISTENER, write_file);
|
||||||
|
EnableListener(LogListener::CONSOLE_LISTENER, write_console);
|
||||||
|
EnableListener(LogListener::LOG_WINDOW_LISTENER, write_window);
|
||||||
|
|
||||||
for (LogContainer* container : m_log)
|
for (LogContainer* container : m_log)
|
||||||
{
|
{
|
||||||
bool enable;
|
bool enable;
|
||||||
logs->Get(container->GetShortName(), &enable, false);
|
logs->Get(container->GetShortName(), &enable, false);
|
||||||
container->SetEnable(enable);
|
container->SetEnable(enable);
|
||||||
if (enable && write_file)
|
|
||||||
container->AddListener(LogListener::FILE_LISTENER);
|
|
||||||
if (enable && write_console)
|
|
||||||
container->AddListener(LogListener::CONSOLE_LISTENER);
|
|
||||||
if (enable && write_window)
|
|
||||||
container->AddListener(LogListener::LOG_WINDOW_LISTENER);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_path_cutoff_point = DeterminePathCutOffPoint();
|
m_path_cutoff_point = DeterminePathCutOffPoint();
|
||||||
@ -208,7 +197,7 @@ void LogManager::LogWithFullPath(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE
|
|||||||
char temp[MAX_MSGLEN];
|
char temp[MAX_MSGLEN];
|
||||||
LogContainer* log = m_log[type];
|
LogContainer* log = m_log[type];
|
||||||
|
|
||||||
if (!log->IsEnabled() || level > GetLogLevel() || !log->HasListeners())
|
if (!log->IsEnabled() || level > GetLogLevel() || !static_cast<bool>(m_listener_ids))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CharArrayFromFormatV(temp, MAX_MSGLEN, format, args);
|
CharArrayFromFormatV(temp, MAX_MSGLEN, format, args);
|
||||||
@ -217,7 +206,7 @@ void LogManager::LogWithFullPath(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE
|
|||||||
"%s %s:%u %c[%s]: %s\n", Common::Timer::GetTimeFormatted().c_str(), file, line,
|
"%s %s:%u %c[%s]: %s\n", Common::Timer::GetTimeFormatted().c_str(), file, line,
|
||||||
LogTypes::LOG_LEVEL_TO_CHAR[(int)level], log->GetShortName().c_str(), temp);
|
LogTypes::LOG_LEVEL_TO_CHAR[(int)level], log->GetShortName().c_str(), temp);
|
||||||
|
|
||||||
for (auto listener_id : *log)
|
for (auto listener_id : m_listener_ids)
|
||||||
if (m_listeners[listener_id])
|
if (m_listeners[listener_id])
|
||||||
m_listeners[listener_id]->Log(level, msg.c_str());
|
m_listeners[listener_id]->Log(level, msg.c_str());
|
||||||
}
|
}
|
||||||
@ -257,14 +246,14 @@ void LogManager::RegisterListener(LogListener::LISTENER id, LogListener* listene
|
|||||||
m_listeners[id] = listener;
|
m_listeners[id] = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::AddListener(LogTypes::LOG_TYPE type, LogListener::LISTENER id)
|
void LogManager::EnableListener(LogListener::LISTENER id, bool enable)
|
||||||
{
|
{
|
||||||
m_log[type]->AddListener(id);
|
m_listener_ids[id] = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::RemoveListener(LogTypes::LOG_TYPE type, LogListener::LISTENER id)
|
bool LogManager::IsListenerEnabled(LogListener::LISTENER id) const
|
||||||
{
|
{
|
||||||
m_log[type]->RemoveListener(id);
|
return m_listener_ids[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Singleton. Ugh.
|
// Singleton. Ugh.
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "Common/BitSet.h"
|
||||||
#include "Common/Logging/Log.h"
|
#include "Common/Logging/Log.h"
|
||||||
#include "Common/NonCopyable.h"
|
#include "Common/NonCopyable.h"
|
||||||
|
|
||||||
@ -50,9 +51,10 @@ public:
|
|||||||
|
|
||||||
std::string GetShortName(LogTypes::LOG_TYPE type) const;
|
std::string GetShortName(LogTypes::LOG_TYPE type) const;
|
||||||
std::string GetFullName(LogTypes::LOG_TYPE type) const;
|
std::string GetFullName(LogTypes::LOG_TYPE type) const;
|
||||||
|
|
||||||
void RegisterListener(LogListener::LISTENER id, LogListener* listener);
|
void RegisterListener(LogListener::LISTENER id, LogListener* listener);
|
||||||
void AddListener(LogTypes::LOG_TYPE type, LogListener::LISTENER id);
|
void EnableListener(LogListener::LISTENER id, bool enable);
|
||||||
void RemoveListener(LogTypes::LOG_TYPE type, LogListener::LISTENER id);
|
bool IsListenerEnabled(LogListener::LISTENER id) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LogManager();
|
LogManager();
|
||||||
@ -61,5 +63,6 @@ private:
|
|||||||
LogTypes::LOG_LEVELS m_level;
|
LogTypes::LOG_LEVELS m_level;
|
||||||
LogContainer* m_log[LogTypes::NUMBER_OF_LOGS];
|
LogContainer* m_log[LogTypes::NUMBER_OF_LOGS];
|
||||||
std::array<LogListener*, LogListener::NUMBER_OF_LISTENERS> m_listeners{};
|
std::array<LogListener*, LogListener::NUMBER_OF_LISTENERS> m_listeners{};
|
||||||
|
BitSet32 m_listener_ids;
|
||||||
size_t m_path_cutoff_point = 0;
|
size_t m_path_cutoff_point = 0;
|
||||||
};
|
};
|
||||||
|
@ -163,47 +163,20 @@ void LogConfigWindow::OnVerbosityChange(wxCommandEvent& event)
|
|||||||
|
|
||||||
void LogConfigWindow::OnWriteFileChecked(wxCommandEvent& event)
|
void LogConfigWindow::OnWriteFileChecked(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
m_writeFile = event.IsChecked();
|
||||||
{
|
m_LogManager->EnableListener(LogListener::FILE_LISTENER, m_writeFile);
|
||||||
m_writeFile = event.IsChecked();
|
|
||||||
if (m_checks->IsChecked(i))
|
|
||||||
{
|
|
||||||
if (m_writeFile)
|
|
||||||
m_LogManager->AddListener((LogTypes::LOG_TYPE)i, LogListener::FILE_LISTENER);
|
|
||||||
else
|
|
||||||
m_LogManager->RemoveListener((LogTypes::LOG_TYPE)i, LogListener::FILE_LISTENER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogConfigWindow::OnWriteConsoleChecked(wxCommandEvent& event)
|
void LogConfigWindow::OnWriteConsoleChecked(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
m_writeConsole = event.IsChecked();
|
||||||
{
|
m_LogManager->EnableListener(LogListener::CONSOLE_LISTENER, m_writeConsole);
|
||||||
m_writeConsole = event.IsChecked();
|
|
||||||
if (m_checks->IsChecked(i))
|
|
||||||
{
|
|
||||||
if (m_writeConsole)
|
|
||||||
m_LogManager->AddListener((LogTypes::LOG_TYPE)i, LogListener::CONSOLE_LISTENER);
|
|
||||||
else
|
|
||||||
m_LogManager->RemoveListener((LogTypes::LOG_TYPE)i, LogListener::CONSOLE_LISTENER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogConfigWindow::OnWriteWindowChecked(wxCommandEvent& event)
|
void LogConfigWindow::OnWriteWindowChecked(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
m_writeWindow = event.IsChecked();
|
||||||
{
|
m_LogManager->EnableListener(LogListener::LOG_WINDOW_LISTENER, m_writeWindow);
|
||||||
m_writeWindow = event.IsChecked();
|
|
||||||
if (m_checks->IsChecked(i))
|
|
||||||
{
|
|
||||||
if (m_writeWindow)
|
|
||||||
m_LogManager->AddListener((LogTypes::LOG_TYPE)i, LogListener::LOG_WINDOW_LISTENER);
|
|
||||||
else
|
|
||||||
m_LogManager->RemoveListener((LogTypes::LOG_TYPE)i, LogListener::LOG_WINDOW_LISTENER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogConfigWindow::OnToggleAll(wxCommandEvent& WXUNUSED(event))
|
void LogConfigWindow::OnToggleAll(wxCommandEvent& WXUNUSED(event))
|
||||||
@ -217,26 +190,8 @@ void LogConfigWindow::OnToggleAll(wxCommandEvent& WXUNUSED(event))
|
|||||||
void LogConfigWindow::ToggleLog(int _logType, bool enable)
|
void LogConfigWindow::ToggleLog(int _logType, bool enable)
|
||||||
{
|
{
|
||||||
LogTypes::LOG_TYPE logType = (LogTypes::LOG_TYPE)_logType;
|
LogTypes::LOG_TYPE logType = (LogTypes::LOG_TYPE)_logType;
|
||||||
|
|
||||||
m_checks->Check(_logType, enable);
|
m_checks->Check(_logType, enable);
|
||||||
|
|
||||||
m_LogManager->SetEnable(logType, enable);
|
m_LogManager->SetEnable(logType, enable);
|
||||||
|
|
||||||
if (enable)
|
|
||||||
{
|
|
||||||
if (m_writeWindow)
|
|
||||||
m_LogManager->AddListener(logType, LogListener::LOG_WINDOW_LISTENER);
|
|
||||||
if (m_writeFile)
|
|
||||||
m_LogManager->AddListener(logType, LogListener::FILE_LISTENER);
|
|
||||||
if (m_writeConsole)
|
|
||||||
m_LogManager->AddListener(logType, LogListener::CONSOLE_LISTENER);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_LogManager->RemoveListener(logType, LogListener::LOG_WINDOW_LISTENER);
|
|
||||||
m_LogManager->RemoveListener(logType, LogListener::FILE_LISTENER);
|
|
||||||
m_LogManager->RemoveListener(logType, LogListener::CONSOLE_LISTENER);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogConfigWindow::OnLogCheck(wxCommandEvent& event)
|
void LogConfigWindow::OnLogCheck(wxCommandEvent& event)
|
||||||
|
@ -133,11 +133,7 @@ void CLogWindow::RemoveAllListeners()
|
|||||||
return;
|
return;
|
||||||
m_has_listeners = false;
|
m_has_listeners = false;
|
||||||
|
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
m_LogManager->EnableListener(LogListener::LOG_WINDOW_LISTENER, false);
|
||||||
{
|
|
||||||
m_LogManager->RemoveListener(static_cast<LogTypes::LOG_TYPE>(i),
|
|
||||||
LogListener::LOG_WINDOW_LISTENER);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLogWindow::SaveSettings()
|
void CLogWindow::SaveSettings()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user