Log level/type: Use enum class instead of the awkward namespace trick.
Just a small cleanup I've wanted to do for a long time.
This commit is contained in:
parent
308e983a99
commit
1025bbcf89
19 changed files with 162 additions and 170 deletions
|
@ -358,7 +358,7 @@ void ConsoleListener::LogWriterThread()
|
||||||
|
|
||||||
for (char *Text = logLocal, *End = logLocal + logLocalSize; Text < End; )
|
for (char *Text = logLocal, *End = logLocal + logLocalSize; Text < End; )
|
||||||
{
|
{
|
||||||
LogTypes::LOG_LEVELS Level = LogTypes::LINFO;
|
LogLevel Level = LogLevel::LINFO;
|
||||||
|
|
||||||
char *next = (char *) memchr(Text + 1, '\033', End - Text);
|
char *next = (char *) memchr(Text + 1, '\033', End - Text);
|
||||||
size_t Len = next - Text;
|
size_t Len = next - Text;
|
||||||
|
@ -367,7 +367,7 @@ void ConsoleListener::LogWriterThread()
|
||||||
|
|
||||||
if (Text[0] == '\033' && Text + 1 < End)
|
if (Text[0] == '\033' && Text + 1 < End)
|
||||||
{
|
{
|
||||||
Level = (LogTypes::LOG_LEVELS) (Text[1] - '0');
|
Level = (LogLevel)(Text[1] - '0');
|
||||||
Len -= 2;
|
Len -= 2;
|
||||||
Text += 2;
|
Text += 2;
|
||||||
}
|
}
|
||||||
|
@ -384,7 +384,7 @@ void ConsoleListener::LogWriterThread()
|
||||||
delete [] logLocal;
|
delete [] logLocal;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConsoleListener::SendToThread(LogTypes::LOG_LEVELS Level, const char *Text)
|
void ConsoleListener::SendToThread(LogLevel Level, const char *Text)
|
||||||
{
|
{
|
||||||
// Oops, we're already quitting. Just do nothing.
|
// Oops, we're already quitting. Just do nothing.
|
||||||
if (logPendingWritePos == (u32) -1)
|
if (logPendingWritePos == (u32) -1)
|
||||||
|
@ -462,7 +462,7 @@ void ConsoleListener::SendToThread(LogTypes::LOG_LEVELS Level, const char *Text)
|
||||||
SetEvent(hTriggerEvent);
|
SetEvent(hTriggerEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConsoleListener::WriteToConsole(LogTypes::LOG_LEVELS Level, const char *Text, size_t Len)
|
void ConsoleListener::WriteToConsole(LogLevel Level, const char *Text, size_t Len)
|
||||||
{
|
{
|
||||||
_dbg_assert_msg_(IsOpen(), "Don't call this before opening the console.");
|
_dbg_assert_msg_(IsOpen(), "Don't call this before opening the console.");
|
||||||
|
|
||||||
|
@ -479,21 +479,20 @@ void ConsoleListener::WriteToConsole(LogTypes::LOG_LEVELS Level, const char *Tex
|
||||||
WORD Color;
|
WORD Color;
|
||||||
static wchar_t tempBuf[2048];
|
static wchar_t tempBuf[2048];
|
||||||
|
|
||||||
switch (Level)
|
switch (Level) {
|
||||||
{
|
case LogLevel::LNOTICE: // light green
|
||||||
case NOTICE_LEVEL: // light green
|
|
||||||
Color = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
Color = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
||||||
break;
|
break;
|
||||||
case ERROR_LEVEL: // light red
|
case LogLevel::LERROR: // light red
|
||||||
Color = FOREGROUND_RED | FOREGROUND_INTENSITY;
|
Color = FOREGROUND_RED | FOREGROUND_INTENSITY;
|
||||||
break;
|
break;
|
||||||
case WARNING_LEVEL: // light yellow
|
case LogLevel::LWARNING: // light yellow
|
||||||
Color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
Color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
||||||
break;
|
break;
|
||||||
case INFO_LEVEL: // cyan
|
case LogLevel::LINFO: // cyan
|
||||||
Color = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
Color = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
||||||
break;
|
break;
|
||||||
case DEBUG_LEVEL: // gray
|
case LogLevel::LDEBUG: // gray
|
||||||
Color = FOREGROUND_INTENSITY;
|
Color = FOREGROUND_INTENSITY;
|
||||||
break;
|
break;
|
||||||
default: // off-white
|
default: // off-white
|
||||||
|
@ -593,7 +592,7 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
|
||||||
COORD Coo = GetCoordinates(OldCursor, LBufWidth);
|
COORD Coo = GetCoordinates(OldCursor, LBufWidth);
|
||||||
SetConsoleCursorPosition(hConsole, Coo);
|
SetConsoleCursorPosition(hConsole, Coo);
|
||||||
|
|
||||||
// if (SLog.length() > 0) Log(LogTypes::LNOTICE, SLog.c_str());
|
// if (SLog.length() > 0) Log(LogLevel::LNOTICE, SLog.c_str());
|
||||||
|
|
||||||
// Resize the window too
|
// Resize the window too
|
||||||
if (Resize) MoveWindow(GetConsoleWindow(), Left,Top, (Width + 100),Height, true);
|
if (Resize) MoveWindow(GetConsoleWindow(), Left,Top, (Width + 100),Height, true);
|
||||||
|
@ -615,18 +614,16 @@ void ConsoleListener::Log(const LogMessage &msg) {
|
||||||
char ColorAttr[16] = "";
|
char ColorAttr[16] = "";
|
||||||
char ResetAttr[16] = "";
|
char ResetAttr[16] = "";
|
||||||
|
|
||||||
if (bUseColor)
|
if (bUseColor) {
|
||||||
{
|
|
||||||
strcpy(ResetAttr, "\033[0m");
|
strcpy(ResetAttr, "\033[0m");
|
||||||
switch (msg.level)
|
switch (msg.level) {
|
||||||
{
|
case LogLevel::LNOTICE: // light green
|
||||||
case NOTICE_LEVEL: // light green
|
|
||||||
strcpy(ColorAttr, "\033[92m");
|
strcpy(ColorAttr, "\033[92m");
|
||||||
break;
|
break;
|
||||||
case ERROR_LEVEL: // light red
|
case LogLevel::LERROR: // light red
|
||||||
strcpy(ColorAttr, "\033[91m");
|
strcpy(ColorAttr, "\033[91m");
|
||||||
break;
|
break;
|
||||||
case WARNING_LEVEL: // light yellow
|
case LogLevel::LWARNING: // light yellow
|
||||||
strcpy(ColorAttr, "\033[93m");
|
strcpy(ColorAttr, "\033[93m");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -656,5 +653,3 @@ void ConsoleListener::ClearScreen(bool Cursor)
|
||||||
if (Cursor) SetConsoleCursorPosition(hConsole, coordScreen);
|
if (Cursor) SetConsoleCursorPosition(hConsole, coordScreen);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,8 @@ private:
|
||||||
|
|
||||||
static unsigned int WINAPI RunThread(void *lpParam);
|
static unsigned int WINAPI RunThread(void *lpParam);
|
||||||
void LogWriterThread();
|
void LogWriterThread();
|
||||||
void SendToThread(LogTypes::LOG_LEVELS Level, const char *Text);
|
void SendToThread(LogLevel Level, const char *Text);
|
||||||
void WriteToConsole(LogTypes::LOG_LEVELS Level, const char *Text, size_t Len);
|
void WriteToConsole(LogLevel Level, const char *Text, size_t Len);
|
||||||
|
|
||||||
static int refCount;
|
static int refCount;
|
||||||
static HANDLE hThread;
|
static HANDLE hThread;
|
||||||
|
|
27
Common/Log.h
27
Common/Log.h
|
@ -26,9 +26,7 @@
|
||||||
#define DEBUG_LEVEL 5 // Detailed debugging - might make things slow.
|
#define DEBUG_LEVEL 5 // Detailed debugging - might make things slow.
|
||||||
#define VERBOSE_LEVEL 6 // Noisy debugging - sometimes needed but usually unimportant.
|
#define VERBOSE_LEVEL 6 // Noisy debugging - sometimes needed but usually unimportant.
|
||||||
|
|
||||||
namespace LogTypes {
|
enum class LogType {
|
||||||
|
|
||||||
enum LOG_TYPE {
|
|
||||||
SYSTEM = 0, // Catch-all for uncategorized things
|
SYSTEM = 0, // Catch-all for uncategorized things
|
||||||
BOOT,
|
BOOT,
|
||||||
COMMON,
|
COMMON,
|
||||||
|
@ -67,7 +65,7 @@ enum LOG_TYPE {
|
||||||
ACHIEVEMENTS = HLE, // TODO: Make a real category
|
ACHIEVEMENTS = HLE, // TODO: Make a real category
|
||||||
};
|
};
|
||||||
|
|
||||||
enum LOG_LEVELS : int {
|
enum class LogLevel : int {
|
||||||
LNOTICE = NOTICE_LEVEL,
|
LNOTICE = NOTICE_LEVEL,
|
||||||
LERROR = ERROR_LEVEL,
|
LERROR = ERROR_LEVEL,
|
||||||
LWARNING = WARNING_LEVEL,
|
LWARNING = WARNING_LEVEL,
|
||||||
|
@ -76,19 +74,18 @@ enum LOG_LEVELS : int {
|
||||||
LVERBOSE = VERBOSE_LEVEL,
|
LVERBOSE = VERBOSE_LEVEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
void GenericLog(LogLevel level, LogType type,
|
||||||
|
|
||||||
void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
|
|
||||||
const char *file, int line, const char *fmt, ...)
|
const char *file, int line, const char *fmt, ...)
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__attribute__((format(printf, 5, 6)))
|
__attribute__((format(printf, 5, 6)))
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
bool GenericLogEnabled(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type);
|
bool GenericLogEnabled(LogLevel level, LogType type);
|
||||||
|
|
||||||
// Exception for Windows - enable more log levels in release mode than on other platforms.
|
// Exception for Windows - enable more log levels in release mode than on other platforms.
|
||||||
#if defined(_DEBUG) || defined(_WIN32)
|
#if defined(_DEBUG) || defined(_WIN32)
|
||||||
|
|
||||||
|
// Needs to be an int (and not use the enum) because it's used by the preprocessor!
|
||||||
#define MAX_LOGLEVEL DEBUG_LEVEL
|
#define MAX_LOGLEVEL DEBUG_LEVEL
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -102,16 +99,16 @@ bool GenericLogEnabled(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type);
|
||||||
// Let the compiler optimize this out.
|
// Let the compiler optimize this out.
|
||||||
// TODO: Compute a dynamic max level as well that can be checked here.
|
// TODO: Compute a dynamic max level as well that can be checked here.
|
||||||
#define GENERIC_LOG(t, v, ...) { \
|
#define GENERIC_LOG(t, v, ...) { \
|
||||||
if (v <= MAX_LOGLEVEL) \
|
if ((int)v <= MAX_LOGLEVEL) \
|
||||||
GenericLog(v, t, __FILE__, __LINE__, __VA_ARGS__); \
|
GenericLog(v, t, __FILE__, __LINE__, __VA_ARGS__); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ERROR_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LERROR, __VA_ARGS__) } while (false)
|
#define ERROR_LOG(t,...) do { GENERIC_LOG(LogType::t, LogLevel::LERROR, __VA_ARGS__) } while (false)
|
||||||
#define WARN_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LWARNING, __VA_ARGS__) } while (false)
|
#define WARN_LOG(t,...) do { GENERIC_LOG(LogType::t, LogLevel::LWARNING, __VA_ARGS__) } while (false)
|
||||||
#define NOTICE_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LNOTICE, __VA_ARGS__) } while (false)
|
#define NOTICE_LOG(t,...) do { GENERIC_LOG(LogType::t, LogLevel::LNOTICE, __VA_ARGS__) } while (false)
|
||||||
#define INFO_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LINFO, __VA_ARGS__) } while (false)
|
#define INFO_LOG(t,...) do { GENERIC_LOG(LogType::t, LogLevel::LINFO, __VA_ARGS__) } while (false)
|
||||||
#define DEBUG_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LDEBUG, __VA_ARGS__) } while (false)
|
#define DEBUG_LOG(t,...) do { GENERIC_LOG(LogType::t, LogLevel::LDEBUG, __VA_ARGS__) } while (false)
|
||||||
#define VERBOSE_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LVERBOSE, __VA_ARGS__) } while (false)
|
#define VERBOSE_LOG(t,...) do { GENERIC_LOG(LogType::t, LogLevel::LVERBOSE, __VA_ARGS__) } while (false)
|
||||||
|
|
||||||
// Currently only actually shows a dialog box on Windows.
|
// Currently only actually shows a dialog box on Windows.
|
||||||
bool HandleAssert(const char *function, const char *file, int line, const char *expression, const char* format, ...)
|
bool HandleAssert(const char *function, const char *file, int line, const char *expression, const char* format, ...)
|
||||||
|
|
|
@ -47,7 +47,7 @@ static const char level_to_char[8] = "-NEWIDV";
|
||||||
#define LOG_MSC_OUTPUTDEBUG false
|
#define LOG_MSC_OUTPUTDEBUG false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char* fmt, ...) {
|
void GenericLog(LogLevel level, LogType type, const char *file, int line, const char* fmt, ...) {
|
||||||
if (g_bLogEnabledSetting && !(*g_bLogEnabledSetting))
|
if (g_bLogEnabledSetting && !(*g_bLogEnabledSetting))
|
||||||
return;
|
return;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
@ -69,7 +69,7 @@ void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GenericLogEnabled(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type) {
|
bool GenericLogEnabled(LogLevel level, LogType type) {
|
||||||
if (LogManager::GetInstance())
|
if (LogManager::GetInstance())
|
||||||
return (*g_bLogEnabledSetting) && LogManager::GetInstance()->IsEnabled(level, type);
|
return (*g_bLogEnabledSetting) && LogManager::GetInstance()->IsEnabled(level, type);
|
||||||
return false;
|
return false;
|
||||||
|
@ -78,55 +78,55 @@ bool GenericLogEnabled(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type) {
|
||||||
LogManager *LogManager::logManager_ = NULL;
|
LogManager *LogManager::logManager_ = NULL;
|
||||||
|
|
||||||
struct LogNameTableEntry {
|
struct LogNameTableEntry {
|
||||||
LogTypes::LOG_TYPE logType;
|
LogType logType;
|
||||||
const char *name;
|
const char *name;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const LogNameTableEntry logTable[] = {
|
static const LogNameTableEntry logTable[] = {
|
||||||
{LogTypes::SYSTEM, "SYSTEM"},
|
{LogType::SYSTEM, "SYSTEM"},
|
||||||
{LogTypes::BOOT, "BOOT"},
|
{LogType::BOOT, "BOOT"},
|
||||||
{LogTypes::COMMON, "COMMON"},
|
{LogType::COMMON, "COMMON"},
|
||||||
{LogTypes::CPU, "CPU"},
|
{LogType::CPU, "CPU"},
|
||||||
{LogTypes::FILESYS, "FILESYS"},
|
{LogType::FILESYS, "FILESYS"},
|
||||||
{LogTypes::G3D, "G3D"},
|
{LogType::G3D, "G3D"},
|
||||||
{LogTypes::HLE, "HLE"},
|
{LogType::HLE, "HLE"},
|
||||||
{LogTypes::JIT, "JIT"},
|
{LogType::JIT, "JIT"},
|
||||||
{LogTypes::LOADER, "LOADER"},
|
{LogType::LOADER, "LOADER"},
|
||||||
{LogTypes::ME, "ME"}, // Media Engine
|
{LogType::ME, "ME"}, // Media Engine
|
||||||
{LogTypes::MEMMAP, "MEMMAP"},
|
{LogType::MEMMAP, "MEMMAP"},
|
||||||
{LogTypes::SASMIX, "SASMIX"},
|
{LogType::SASMIX, "SASMIX"},
|
||||||
{LogTypes::SAVESTATE, "SAVESTATE"},
|
{LogType::SAVESTATE, "SAVESTATE"},
|
||||||
{LogTypes::FRAMEBUF, "FRAMEBUF"},
|
{LogType::FRAMEBUF, "FRAMEBUF"},
|
||||||
{LogTypes::AUDIO, "AUDIO"},
|
{LogType::AUDIO, "AUDIO"},
|
||||||
{LogTypes::IO, "IO"},
|
{LogType::IO, "IO"},
|
||||||
|
|
||||||
{LogTypes::SCEAUDIO, "SCEAUDIO"},
|
{LogType::SCEAUDIO, "SCEAUDIO"},
|
||||||
{LogTypes::SCECTRL, "SCECTRL"},
|
{LogType::SCECTRL, "SCECTRL"},
|
||||||
{LogTypes::SCEDISPLAY, "SCEDISP"},
|
{LogType::SCEDISPLAY, "SCEDISP"},
|
||||||
{LogTypes::SCEFONT, "SCEFONT"},
|
{LogType::SCEFONT, "SCEFONT"},
|
||||||
{LogTypes::SCEGE, "SCEGE"},
|
{LogType::SCEGE, "SCEGE"},
|
||||||
{LogTypes::SCEINTC, "SCEINTC"},
|
{LogType::SCEINTC, "SCEINTC"},
|
||||||
{LogTypes::SCEIO, "SCEIO"},
|
{LogType::SCEIO, "SCEIO"},
|
||||||
{LogTypes::SCEKERNEL, "SCEKERNEL"},
|
{LogType::SCEKERNEL, "SCEKERNEL"},
|
||||||
{LogTypes::SCEMODULE, "SCEMODULE"},
|
{LogType::SCEMODULE, "SCEMODULE"},
|
||||||
{LogTypes::SCENET, "SCENET"},
|
{LogType::SCENET, "SCENET"},
|
||||||
{LogTypes::SCERTC, "SCERTC"},
|
{LogType::SCERTC, "SCERTC"},
|
||||||
{LogTypes::SCESAS, "SCESAS"},
|
{LogType::SCESAS, "SCESAS"},
|
||||||
{LogTypes::SCEUTILITY, "SCEUTIL"},
|
{LogType::SCEUTILITY, "SCEUTIL"},
|
||||||
{LogTypes::SCEMISC, "SCEMISC"},
|
{LogType::SCEMISC, "SCEMISC"},
|
||||||
};
|
};
|
||||||
|
|
||||||
LogManager::LogManager(bool *enabledSetting) {
|
LogManager::LogManager(bool *enabledSetting) {
|
||||||
g_bLogEnabledSetting = enabledSetting;
|
g_bLogEnabledSetting = enabledSetting;
|
||||||
|
|
||||||
for (size_t i = 0; i < ARRAY_SIZE(logTable); i++) {
|
for (size_t i = 0; i < ARRAY_SIZE(logTable); i++) {
|
||||||
_assert_msg_(i == logTable[i].logType, "Bad logtable at %i", (int)i);
|
_assert_msg_((LogType)i == logTable[i].logType, "Bad logtable at %i", (int)i);
|
||||||
truncate_cpy(log_[logTable[i].logType].m_shortName, logTable[i].name);
|
truncate_cpy(log_[(size_t)logTable[i].logType].m_shortName, logTable[i].name);
|
||||||
log_[logTable[i].logType].enabled = true;
|
log_[(size_t)logTable[i].logType].enabled = true;
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG)
|
||||||
log_[logTable[i].logType].level = LogTypes::LDEBUG;
|
log_[(size_t)logTable[i].logType].level = LogLevel::LDEBUG;
|
||||||
#else
|
#else
|
||||||
log_[logTable[i].logType].level = LogTypes::LINFO;
|
log_[(size_t)logTable[i].logType].level = LogLevel::LINFO;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ LogManager::LogManager(bool *enabledSetting) {
|
||||||
}
|
}
|
||||||
|
|
||||||
LogManager::~LogManager() {
|
LogManager::~LogManager() {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
|
for (int i = 0; i < (int)LogType::NUMBER_OF_LOGS; ++i) {
|
||||||
#if !defined(MOBILE_DEVICE) || defined(_DEBUG)
|
#if !defined(MOBILE_DEVICE) || defined(_DEBUG)
|
||||||
RemoveListener(fileLog_);
|
RemoveListener(fileLog_);
|
||||||
RemoveListener(consoleLog_);
|
RemoveListener(consoleLog_);
|
||||||
|
@ -194,25 +194,25 @@ void LogManager::ChangeFileLog(const char *filename) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::SaveConfig(Section *section) {
|
void LogManager::SaveConfig(Section *section) {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) {
|
for (int i = 0; i < (int)LogType::NUMBER_OF_LOGS; i++) {
|
||||||
section->Set((std::string(log_[i].m_shortName) + "Enabled").c_str(), log_[i].enabled);
|
section->Set((std::string(log_[i].m_shortName) + "Enabled").c_str(), log_[i].enabled);
|
||||||
section->Set((std::string(log_[i].m_shortName) + "Level").c_str(), (int)log_[i].level);
|
section->Set((std::string(log_[i].m_shortName) + "Level").c_str(), (int)log_[i].level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::LoadConfig(const Section *section, bool debugDefaults) {
|
void LogManager::LoadConfig(const Section *section, bool debugDefaults) {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) {
|
for (int i = 0; i < (int)LogType::NUMBER_OF_LOGS; i++) {
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
int level = 0;
|
int level = 0;
|
||||||
section->Get((std::string(log_[i].m_shortName) + "Enabled").c_str(), &enabled, true);
|
section->Get((std::string(log_[i].m_shortName) + "Enabled").c_str(), &enabled, true);
|
||||||
section->Get((std::string(log_[i].m_shortName) + "Level").c_str(), &level, debugDefaults ? (int)LogTypes::LDEBUG : (int)LogTypes::LERROR);
|
section->Get((std::string(log_[i].m_shortName) + "Level").c_str(), &level, (int)(debugDefaults ? LogLevel::LDEBUG : LogLevel::LERROR));
|
||||||
log_[i].enabled = enabled;
|
log_[i].enabled = enabled;
|
||||||
log_[i].level = (LogTypes::LOG_LEVELS)level;
|
log_[i].level = (LogLevel)level;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char *format, va_list args) {
|
void LogManager::Log(LogLevel level, LogType type, const char *file, int line, const char *format, va_list args) {
|
||||||
const LogChannel &log = log_[type];
|
const LogChannel &log = log_[(size_t)type];
|
||||||
if (level > log.level || !log.enabled)
|
if (level > log.level || !log.enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -268,8 +268,8 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LogManager::IsEnabled(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type) {
|
bool LogManager::IsEnabled(LogLevel level, LogType type) {
|
||||||
LogChannel &log = log_[type];
|
LogChannel &log = log_[(size_t)type];
|
||||||
if (level > log.level || !log.enabled)
|
if (level > log.level || !log.enabled)
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -37,7 +37,7 @@ extern const char *hleCurrentThreadName;
|
||||||
struct LogMessage {
|
struct LogMessage {
|
||||||
char timestamp[16];
|
char timestamp[16];
|
||||||
char header[64]; // Filename/thread/etc. in front.
|
char header[64]; // Filename/thread/etc. in front.
|
||||||
LogTypes::LOG_LEVELS level;
|
LogLevel level;
|
||||||
const char *log;
|
const char *log;
|
||||||
std::string msg; // The actual log message.
|
std::string msg; // The actual log message.
|
||||||
};
|
};
|
||||||
|
@ -83,7 +83,7 @@ public:
|
||||||
|
|
||||||
int GetCount() const { return count_ < MAX_LOGS ? count_ : MAX_LOGS; }
|
int GetCount() const { return count_ < MAX_LOGS ? count_ : MAX_LOGS; }
|
||||||
const char *TextAt(int i) const { return messages_[(curMessage_ - i - 1) & (MAX_LOGS - 1)].msg.c_str(); }
|
const char *TextAt(int i) const { return messages_[(curMessage_ - i - 1) & (MAX_LOGS - 1)].msg.c_str(); }
|
||||||
LogTypes::LOG_LEVELS LevelAt(int i) const { return messages_[(curMessage_ - i - 1) & (MAX_LOGS - 1)].level; }
|
LogLevel LevelAt(int i) const { return messages_[(curMessage_ - i - 1) & (MAX_LOGS - 1)].level; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum { MAX_LOGS = 128 };
|
enum { MAX_LOGS = 128 };
|
||||||
|
@ -99,7 +99,7 @@ private:
|
||||||
|
|
||||||
struct LogChannel {
|
struct LogChannel {
|
||||||
char m_shortName[32]{};
|
char m_shortName[32]{};
|
||||||
LogTypes::LOG_LEVELS level;
|
LogLevel level;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ private:
|
||||||
LogManager(const LogManager &) = delete;
|
LogManager(const LogManager &) = delete;
|
||||||
void operator=(const LogManager &) = delete;
|
void operator=(const LogManager &) = delete;
|
||||||
|
|
||||||
LogChannel log_[LogTypes::NUMBER_OF_LOGS];
|
LogChannel log_[(size_t)LogType::NUMBER_OF_LOGS];
|
||||||
FileLogListener *fileLog_ = nullptr;
|
FileLogListener *fileLog_ = nullptr;
|
||||||
ConsoleListener *consoleLog_ = nullptr;
|
ConsoleListener *consoleLog_ = nullptr;
|
||||||
OutputDebugStringLogListener *debuggerLog_ = nullptr;
|
OutputDebugStringLogListener *debuggerLog_ = nullptr;
|
||||||
|
@ -128,33 +128,33 @@ public:
|
||||||
void AddListener(LogListener *listener);
|
void AddListener(LogListener *listener);
|
||||||
void RemoveListener(LogListener *listener);
|
void RemoveListener(LogListener *listener);
|
||||||
|
|
||||||
static u32 GetMaxLevel() { return MAX_LOGLEVEL; }
|
static u32 GetMaxLevel() { return (u32)MAX_LOGLEVEL; }
|
||||||
static int GetNumChannels() { return LogTypes::NUMBER_OF_LOGS; }
|
static int GetNumChannels() { return (int)LogType::NUMBER_OF_LOGS; }
|
||||||
|
|
||||||
void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
|
void Log(LogLevel level, LogType type,
|
||||||
const char *file, int line, const char *fmt, va_list args);
|
const char *file, int line, const char *fmt, va_list args);
|
||||||
bool IsEnabled(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type);
|
bool IsEnabled(LogLevel level, LogType type);
|
||||||
|
|
||||||
LogChannel *GetLogChannel(LogTypes::LOG_TYPE type) {
|
LogChannel *GetLogChannel(LogType type) {
|
||||||
return &log_[type];
|
return &log_[(size_t)type];
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level) {
|
void SetLogLevel(LogType type, LogLevel level) {
|
||||||
log_[type].level = level;
|
log_[(size_t)type].level = level;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetAllLogLevels(LogTypes::LOG_LEVELS level) {
|
void SetAllLogLevels(LogLevel level) {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
|
for (int i = 0; i < (int)LogType::NUMBER_OF_LOGS; ++i) {
|
||||||
log_[i].level = level;
|
log_[i].level = level;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetEnabled(LogTypes::LOG_TYPE type, bool enable) {
|
void SetEnabled(LogType type, bool enable) {
|
||||||
log_[type].enabled = enable;
|
log_[(size_t)type].enabled = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogTypes::LOG_LEVELS GetLogLevel(LogTypes::LOG_TYPE type) {
|
LogLevel GetLogLevel(LogType type) {
|
||||||
return log_[type].level;
|
return log_[(size_t)type].level;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsoleListener *GetConsoleListener() const {
|
ConsoleListener *GetConsoleListener() const {
|
||||||
|
|
|
@ -160,14 +160,14 @@ void HandleDebuggerRequest(const http::ServerRequest &request) {
|
||||||
ws->SetTextHandler([&](const std::string &t) {
|
ws->SetTextHandler([&](const std::string &t) {
|
||||||
JsonReader reader(t.c_str(), t.size());
|
JsonReader reader(t.c_str(), t.size());
|
||||||
if (!reader.ok()) {
|
if (!reader.ok()) {
|
||||||
ws->Send(DebuggerErrorEvent("Bad message: invalid JSON", LogTypes::LERROR));
|
ws->Send(DebuggerErrorEvent("Bad message: invalid JSON", LogLevel::LERROR));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const JsonGet root = reader.root();
|
const JsonGet root = reader.root();
|
||||||
const char *event = root ? root.getString("event", nullptr) : nullptr;
|
const char *event = root ? root.getString("event", nullptr) : nullptr;
|
||||||
if (!event) {
|
if (!event) {
|
||||||
ws->Send(DebuggerErrorEvent("Bad message: no event property", LogTypes::LERROR, root));
|
ws->Send(DebuggerErrorEvent("Bad message: no event property", LogLevel::LERROR, root));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ void HandleDebuggerRequest(const http::ServerRequest &request) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ws->SetBinaryHandler([&](const std::vector<uint8_t> &d) {
|
ws->SetBinaryHandler([&](const std::vector<uint8_t> &d) {
|
||||||
ws->Send(DebuggerErrorEvent("Bad message", LogTypes::LERROR));
|
ws->Send(DebuggerErrorEvent("Bad message", LogLevel::LERROR));
|
||||||
});
|
});
|
||||||
|
|
||||||
while (ws->Process(highActivity ? 1.0f / 1000.0f : 1.0f / 60.0f)) {
|
while (ws->Process(highActivity ? 1.0f / 1000.0f : 1.0f / 60.0f)) {
|
||||||
|
|
|
@ -95,7 +95,7 @@ struct DebuggerLogEvent {
|
||||||
j.writeString("timestamp", l.timestamp);
|
j.writeString("timestamp", l.timestamp);
|
||||||
j.writeString("header", l.header);
|
j.writeString("header", l.header);
|
||||||
j.writeString("message", l.msg);
|
j.writeString("message", l.msg);
|
||||||
j.writeInt("level", l.level);
|
j.writeInt("level", (int)l.level);
|
||||||
j.writeString("channel", l.log);
|
j.writeString("channel", l.log);
|
||||||
j.end();
|
j.end();
|
||||||
return j.str();
|
return j.str();
|
||||||
|
|
|
@ -42,7 +42,7 @@ struct WebSocketClientInfo {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DebuggerErrorEvent {
|
struct DebuggerErrorEvent {
|
||||||
DebuggerErrorEvent(const std::string m, LogTypes::LOG_LEVELS l, const JsonGet data = JsonValue(JSON_NULL))
|
DebuggerErrorEvent(const std::string m, LogLevel l, const JsonGet data = JsonValue(JSON_NULL))
|
||||||
: message(m), level(l) {
|
: message(m), level(l) {
|
||||||
// Need to format right away, before it's out of scope.
|
// Need to format right away, before it's out of scope.
|
||||||
if (data) {
|
if (data) {
|
||||||
|
@ -53,7 +53,7 @@ struct DebuggerErrorEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string message;
|
std::string message;
|
||||||
LogTypes::LOG_LEVELS level;
|
LogLevel level;
|
||||||
std::string ticketRaw;
|
std::string ticketRaw;
|
||||||
|
|
||||||
operator std::string() const {
|
operator std::string() const {
|
||||||
|
@ -61,7 +61,7 @@ struct DebuggerErrorEvent {
|
||||||
j.begin();
|
j.begin();
|
||||||
j.writeString("event", "error");
|
j.writeString("event", "error");
|
||||||
j.writeString("message", message);
|
j.writeString("message", message);
|
||||||
j.writeInt("level", level);
|
j.writeInt("level", (int)level);
|
||||||
if (!ticketRaw.empty()) {
|
if (!ticketRaw.empty()) {
|
||||||
j.writeRaw("ticket", ticketRaw);
|
j.writeRaw("ticket", ticketRaw);
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ struct DebuggerRequest {
|
||||||
WebSocketClientInfo *client;
|
WebSocketClientInfo *client;
|
||||||
|
|
||||||
void Fail(const std::string &message) {
|
void Fail(const std::string &message) {
|
||||||
ws->Send(DebuggerErrorEvent(message, LogTypes::LERROR, data));
|
ws->Send(DebuggerErrorEvent(message, LogLevel::LERROR, data));
|
||||||
responseSent_ = true;
|
responseSent_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -813,7 +813,7 @@ bool VirtualDiscFileSystem::RemoveFile(const std::string &filename)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VirtualDiscFileSystem::HandlerLogger(void *arg, HandlerHandle handle, LogTypes::LOG_LEVELS level, const char *msg) {
|
void VirtualDiscFileSystem::HandlerLogger(void *arg, HandlerHandle handle, LogLevel level, const char *msg) {
|
||||||
VirtualDiscFileSystem *sys = static_cast<VirtualDiscFileSystem *>(arg);
|
VirtualDiscFileSystem *sys = static_cast<VirtualDiscFileSystem *>(arg);
|
||||||
|
|
||||||
// TODO: Probably could do this smarter / use a lookup.
|
// TODO: Probably could do this smarter / use a lookup.
|
||||||
|
@ -826,9 +826,9 @@ void VirtualDiscFileSystem::HandlerLogger(void *arg, HandlerHandle handle, LogTy
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename != NULL) {
|
if (filename != NULL) {
|
||||||
GENERIC_LOG(LogTypes::FILESYS, level, "%s: %s", filename, msg);
|
GENERIC_LOG(LogType::FILESYS, level, "%s: %s", filename, msg);
|
||||||
} else {
|
} else {
|
||||||
GENERIC_LOG(LogTypes::FILESYS, level, "%s", msg);
|
GENERIC_LOG(LogType::FILESYS, level, "%s", msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,9 +64,9 @@ private:
|
||||||
typedef void *HandlerLibrary;
|
typedef void *HandlerLibrary;
|
||||||
typedef int HandlerHandle;
|
typedef int HandlerHandle;
|
||||||
typedef s64 HandlerOffset;
|
typedef s64 HandlerOffset;
|
||||||
typedef void (*HandlerLogFunc)(void *arg, HandlerHandle handle, LogTypes::LOG_LEVELS level, const char *msg);
|
typedef void (*HandlerLogFunc)(void *arg, HandlerHandle handle, LogLevel level, const char *msg);
|
||||||
|
|
||||||
static void HandlerLogger(void *arg, HandlerHandle handle, LogTypes::LOG_LEVELS level, const char *msg);
|
static void HandlerLogger(void *arg, HandlerHandle handle, LogLevel level, const char *msg);
|
||||||
|
|
||||||
// The primary purpose of handlers is to make it easier to work with large archives.
|
// The primary purpose of handlers is to make it easier to work with large archives.
|
||||||
// However, they have other uses as well, such as patching individual files.
|
// However, they have other uses as well, such as patching individual files.
|
||||||
|
|
|
@ -853,7 +853,7 @@ size_t hleFormatLogArgs(char *message, size_t sz, const char *argmask) {
|
||||||
return used;
|
return used;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hleDoLogInternal(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason) {
|
void hleDoLogInternal(LogType t, LogLevel level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason) {
|
||||||
char formatted_args[4096];
|
char formatted_args[4096];
|
||||||
const char *funcName = "?";
|
const char *funcName = "?";
|
||||||
u32 funcFlags = 0;
|
u32 funcFlags = 0;
|
||||||
|
|
|
@ -155,11 +155,11 @@ const HLEFunction *GetSyscallFuncPointer(MIPSOpcode op);
|
||||||
// For jit, takes arg: const HLEFunction *
|
// For jit, takes arg: const HLEFunction *
|
||||||
void *GetQuickSyscallFunc(MIPSOpcode op);
|
void *GetQuickSyscallFunc(MIPSOpcode op);
|
||||||
|
|
||||||
void hleDoLogInternal(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason);
|
void hleDoLogInternal(LogType t, LogLevel level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, T res, const char *file, int line, const char *reportTag, char retmask, const char *reason, ...) {
|
T hleDoLog(LogType t, LogLevel level, T res, const char *file, int line, const char *reportTag, char retmask, const char *reason, ...) {
|
||||||
if (level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) {
|
if ((int)level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,8 +186,8 @@ T hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, T res, const char *
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, T res, const char *file, int line, const char *reportTag, char retmask) {
|
T hleDoLog(LogType t, LogLevel level, T res, const char *file, int line, const char *reportTag, char retmask) {
|
||||||
if ((level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) && !reportTag) {
|
if (((int)level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) && !reportTag) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ T hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, T res, const char *
|
||||||
#define HLE_LOG_LVERBOSE LVERBOSE
|
#define HLE_LOG_LVERBOSE LVERBOSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define hleLogHelper(t, level, res, retmask, ...) hleDoLog(LogTypes::t, LogTypes::level, res, __FILE__, __LINE__, nullptr, retmask, ##__VA_ARGS__)
|
#define hleLogHelper(t, level, res, retmask, ...) hleDoLog(LogType::t, LogLevel::level, res, __FILE__, __LINE__, nullptr, retmask, ##__VA_ARGS__)
|
||||||
#define hleLogError(t, res, ...) hleLogHelper(t, LERROR, res, 'x', ##__VA_ARGS__)
|
#define hleLogError(t, res, ...) hleLogHelper(t, LERROR, res, 'x', ##__VA_ARGS__)
|
||||||
#define hleLogWarning(t, res, ...) hleLogHelper(t, LWARNING, res, 'x', ##__VA_ARGS__)
|
#define hleLogWarning(t, res, ...) hleLogHelper(t, LWARNING, res, 'x', ##__VA_ARGS__)
|
||||||
#define hleLogDebug(t, res, ...) hleLogHelper(t, HLE_LOG_LDEBUG, res, 'x', ##__VA_ARGS__)
|
#define hleLogDebug(t, res, ...) hleLogHelper(t, HLE_LOG_LDEBUG, res, 'x', ##__VA_ARGS__)
|
||||||
|
@ -228,7 +228,7 @@ T hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, T res, const char *
|
||||||
#define hleLogSuccessVerboseX(t, res, ...) hleLogHelper(t, HLE_LOG_LVERBOSE, res, 'x', ##__VA_ARGS__)
|
#define hleLogSuccessVerboseX(t, res, ...) hleLogHelper(t, HLE_LOG_LVERBOSE, res, 'x', ##__VA_ARGS__)
|
||||||
#define hleLogSuccessVerboseI(t, res, ...) hleLogHelper(t, HLE_LOG_LVERBOSE, res, 'i', ##__VA_ARGS__)
|
#define hleLogSuccessVerboseI(t, res, ...) hleLogHelper(t, HLE_LOG_LVERBOSE, res, 'i', ##__VA_ARGS__)
|
||||||
|
|
||||||
#define hleReportError(t, res, ...) hleDoLog(LogTypes::t, LogTypes::LERROR, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
#define hleReportError(t, res, ...) hleDoLog(LogType::t, LogLevel::LERROR, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
||||||
#define hleReportWarning(t, res, ...) hleDoLog(LogTypes::t, LogTypes::LWARNING, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
#define hleReportWarning(t, res, ...) hleDoLog(LogType::t, LogLevel::LWARNING, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
||||||
#define hleReportDebug(t, res, ...) hleDoLog(LogTypes::t, LogTypes::HLE_LOG_LDEBUG, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
#define hleReportDebug(t, res, ...) hleDoLog(LogType::t, LogLevel::HLE_LOG_LDEBUG, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
||||||
#define hleReportVerbose(t, res, ...) hleDoLog(LogTypes::t, LogTypes::HLE_LOG_LVERBOSE, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
#define hleReportVerbose(t, res, ...) hleDoLog(LogType::t, LogLevel::HLE_LOG_LVERBOSE, res, __FILE__, __LINE__, "", 'x', ##__VA_ARGS__)
|
||||||
|
|
|
@ -224,12 +224,12 @@ void LogScreen::UpdateLog() {
|
||||||
TextView *v = vert_->Add(new TextView(ring->TextAt(i), FLAG_DYNAMIC_ASCII, false));
|
TextView *v = vert_->Add(new TextView(ring->TextAt(i), FLAG_DYNAMIC_ASCII, false));
|
||||||
uint32_t color = 0xFFFFFF;
|
uint32_t color = 0xFFFFFF;
|
||||||
switch (ring->LevelAt(i)) {
|
switch (ring->LevelAt(i)) {
|
||||||
case LogTypes::LDEBUG: color = 0xE0E0E0; break;
|
case LogLevel::LDEBUG: color = 0xE0E0E0; break;
|
||||||
case LogTypes::LWARNING: color = 0x50FFFF; break;
|
case LogLevel::LWARNING: color = 0x50FFFF; break;
|
||||||
case LogTypes::LERROR: color = 0x5050FF; break;
|
case LogLevel::LERROR: color = 0x5050FF; break;
|
||||||
case LogTypes::LNOTICE: color = 0x30FF30; break;
|
case LogLevel::LNOTICE: color = 0x30FF30; break;
|
||||||
case LogTypes::LINFO: color = 0xFFFFFF; break;
|
case LogLevel::LINFO: color = 0xFFFFFF; break;
|
||||||
case LogTypes::LVERBOSE: color = 0xC0C0C0; break;
|
case LogLevel::LVERBOSE: color = 0xC0C0C0; break;
|
||||||
}
|
}
|
||||||
v->SetTextColor(0xFF000000 | color);
|
v->SetTextColor(0xFF000000 | color);
|
||||||
}
|
}
|
||||||
|
@ -308,7 +308,7 @@ void LogConfigScreen::CreateViews() {
|
||||||
GridLayout *grid = vert->Add(new GridLayoutList(gridsettings, new LayoutParams(FILL_PARENT, WRAP_CONTENT)));
|
GridLayout *grid = vert->Add(new GridLayoutList(gridsettings, new LayoutParams(FILL_PARENT, WRAP_CONTENT)));
|
||||||
|
|
||||||
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
||||||
LogTypes::LOG_TYPE type = (LogTypes::LOG_TYPE)i;
|
LogType type = (LogType)i;
|
||||||
LogChannel *chan = logMan->GetLogChannel(type);
|
LogChannel *chan = logMan->GetLogChannel(type);
|
||||||
LinearLayout *row = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(cellSize - 50, WRAP_CONTENT));
|
LinearLayout *row = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(cellSize - 50, WRAP_CONTENT));
|
||||||
row->SetSpacing(0);
|
row->SetSpacing(0);
|
||||||
|
@ -321,7 +321,7 @@ void LogConfigScreen::CreateViews() {
|
||||||
UI::EventReturn LogConfigScreen::OnToggleAll(UI::EventParams &e) {
|
UI::EventReturn LogConfigScreen::OnToggleAll(UI::EventParams &e) {
|
||||||
LogManager *logMan = LogManager::GetInstance();
|
LogManager *logMan = LogManager::GetInstance();
|
||||||
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
||||||
LogChannel *chan = logMan->GetLogChannel((LogTypes::LOG_TYPE)i);
|
LogChannel *chan = logMan->GetLogChannel((LogType)i);
|
||||||
chan->enabled = !chan->enabled;
|
chan->enabled = !chan->enabled;
|
||||||
}
|
}
|
||||||
return UI::EVENT_DONE;
|
return UI::EVENT_DONE;
|
||||||
|
@ -330,7 +330,7 @@ UI::EventReturn LogConfigScreen::OnToggleAll(UI::EventParams &e) {
|
||||||
UI::EventReturn LogConfigScreen::OnEnableAll(UI::EventParams &e) {
|
UI::EventReturn LogConfigScreen::OnEnableAll(UI::EventParams &e) {
|
||||||
LogManager *logMan = LogManager::GetInstance();
|
LogManager *logMan = LogManager::GetInstance();
|
||||||
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
||||||
LogChannel *chan = logMan->GetLogChannel((LogTypes::LOG_TYPE)i);
|
LogChannel *chan = logMan->GetLogChannel((LogType)i);
|
||||||
chan->enabled = true;
|
chan->enabled = true;
|
||||||
}
|
}
|
||||||
return UI::EVENT_DONE;
|
return UI::EVENT_DONE;
|
||||||
|
@ -339,7 +339,7 @@ UI::EventReturn LogConfigScreen::OnEnableAll(UI::EventParams &e) {
|
||||||
UI::EventReturn LogConfigScreen::OnDisableAll(UI::EventParams &e) {
|
UI::EventReturn LogConfigScreen::OnDisableAll(UI::EventParams &e) {
|
||||||
LogManager *logMan = LogManager::GetInstance();
|
LogManager *logMan = LogManager::GetInstance();
|
||||||
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
||||||
LogChannel *chan = logMan->GetLogChannel((LogTypes::LOG_TYPE)i);
|
LogChannel *chan = logMan->GetLogChannel((LogType)i);
|
||||||
chan->enabled = false;
|
chan->enabled = false;
|
||||||
}
|
}
|
||||||
return UI::EVENT_DONE;
|
return UI::EVENT_DONE;
|
||||||
|
@ -377,10 +377,10 @@ void LogLevelScreen::OnCompleted(DialogResult result) {
|
||||||
LogManager *logMan = LogManager::GetInstance();
|
LogManager *logMan = LogManager::GetInstance();
|
||||||
|
|
||||||
for (int i = 0; i < LogManager::GetNumChannels(); ++i) {
|
for (int i = 0; i < LogManager::GetNumChannels(); ++i) {
|
||||||
LogTypes::LOG_TYPE type = (LogTypes::LOG_TYPE)i;
|
LogType type = (LogType)i;
|
||||||
LogChannel *chan = logMan->GetLogChannel(type);
|
LogChannel *chan = logMan->GetLogChannel(type);
|
||||||
if (chan->enabled)
|
if (chan->enabled)
|
||||||
chan->level = (LogTypes::LOG_LEVELS)(selected + 1);
|
chan->level = (LogLevel)(selected + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -188,18 +188,18 @@ public:
|
||||||
void Log(const LogMessage &message) override {
|
void Log(const LogMessage &message) override {
|
||||||
// Log with simplified headers as Android already provides timestamp etc.
|
// Log with simplified headers as Android already provides timestamp etc.
|
||||||
switch (message.level) {
|
switch (message.level) {
|
||||||
case LogTypes::LVERBOSE:
|
case LogLevel::LVERBOSE:
|
||||||
case LogTypes::LDEBUG:
|
case LogLevel::LDEBUG:
|
||||||
case LogTypes::LINFO:
|
case LogLevel::LINFO:
|
||||||
printf("INFO [%s] %s", message.log, message.msg.c_str());
|
printf("INFO [%s] %s", message.log, message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LERROR:
|
case LogLevel::LERROR:
|
||||||
printf("ERR [%s] %s", message.log, message.msg.c_str());
|
printf("ERR [%s] %s", message.log, message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LWARNING:
|
case LogLevel::LWARNING:
|
||||||
printf("WARN [%s] %s", message.log, message.msg.c_str());
|
printf("WARN [%s] %s", message.log, message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LNOTICE:
|
case LogLevel::LNOTICE:
|
||||||
default:
|
default:
|
||||||
printf("NOTE [%s] !!! %s", message.log, message.msg.c_str());
|
printf("NOTE [%s] !!! %s", message.log, message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
|
@ -567,9 +567,9 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch
|
||||||
boot_filename.clear();
|
boot_filename.clear();
|
||||||
|
|
||||||
// Parse command line
|
// Parse command line
|
||||||
LogTypes::LOG_LEVELS logLevel = LogTypes::LINFO;
|
LogLevel logLevel = LogLevel::LINFO;
|
||||||
bool forceLogLevel = false;
|
bool forceLogLevel = false;
|
||||||
const auto setLogLevel = [&logLevel, &forceLogLevel](LogTypes::LOG_LEVELS level) {
|
const auto setLogLevel = [&logLevel, &forceLogLevel](LogLevel level) {
|
||||||
logLevel = level;
|
logLevel = level;
|
||||||
forceLogLevel = true;
|
forceLogLevel = true;
|
||||||
};
|
};
|
||||||
|
@ -587,12 +587,12 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch
|
||||||
case 'd':
|
case 'd':
|
||||||
// Enable debug logging
|
// Enable debug logging
|
||||||
// Note that you must also change the max log level in Log.h.
|
// Note that you must also change the max log level in Log.h.
|
||||||
setLogLevel(LogTypes::LDEBUG);
|
setLogLevel(LogLevel::LDEBUG);
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
// Enable verbose logging
|
// Enable verbose logging
|
||||||
// Note that you must also change the max log level in Log.h.
|
// Note that you must also change the max log level in Log.h.
|
||||||
setLogLevel(LogTypes::LVERBOSE);
|
setLogLevel(LogLevel::LVERBOSE);
|
||||||
break;
|
break;
|
||||||
case 'j':
|
case 'j':
|
||||||
g_Config.iCpuCore = (int)CPUCore::JIT;
|
g_Config.iCpuCore = (int)CPUCore::JIT;
|
||||||
|
@ -612,7 +612,7 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch
|
||||||
break;
|
break;
|
||||||
case '-':
|
case '-':
|
||||||
if (!strncmp(argv[i], "--loglevel=", strlen("--loglevel=")) && strlen(argv[i]) > strlen("--loglevel="))
|
if (!strncmp(argv[i], "--loglevel=", strlen("--loglevel=")) && strlen(argv[i]) > strlen("--loglevel="))
|
||||||
setLogLevel(static_cast<LogTypes::LOG_LEVELS>(std::atoi(argv[i] + strlen("--loglevel="))));
|
setLogLevel(static_cast<LogLevel>(std::atoi(argv[i] + strlen("--loglevel="))));
|
||||||
if (!strncmp(argv[i], "--log=", strlen("--log=")) && strlen(argv[i]) > strlen("--log="))
|
if (!strncmp(argv[i], "--log=", strlen("--log=")) && strlen(argv[i]) > strlen("--log="))
|
||||||
fileToLog = argv[i] + strlen("--log=");
|
fileToLog = argv[i] + strlen("--log=");
|
||||||
if (!strncmp(argv[i], "--state=", strlen("--state=")) && strlen(argv[i]) > strlen("--state="))
|
if (!strncmp(argv[i], "--state=", strlen("--state=")) && strlen(argv[i]) > strlen("--state="))
|
||||||
|
|
|
@ -127,7 +127,7 @@ PPSSPP_UWPMain::PPSSPP_UWPMain(App ^app, const std::shared_ptr<DX::DeviceResourc
|
||||||
g_Config.iGPUBackend = (int)GPUBackend::DIRECT3D11;
|
g_Config.iGPUBackend = (int)GPUBackend::DIRECT3D11;
|
||||||
|
|
||||||
if (debugLogLevel) {
|
if (debugLogLevel) {
|
||||||
LogManager::GetInstance()->SetAllLogLevels(LogTypes::LDEBUG);
|
LogManager::GetInstance()->SetAllLogLevels(LogLevel::LDEBUG);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set log file location
|
// Set log file location
|
||||||
|
|
|
@ -972,7 +972,7 @@ int WINAPI WinMain(HINSTANCE _hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLin
|
||||||
LogManager::GetInstance()->GetConsoleListener()->Init(showLog, 150, 120, "PPSSPP Debug Console");
|
LogManager::GetInstance()->GetConsoleListener()->Init(showLog, 150, 120, "PPSSPP Debug Console");
|
||||||
|
|
||||||
if (debugLogLevel) {
|
if (debugLogLevel) {
|
||||||
LogManager::GetInstance()->SetAllLogLevels(LogTypes::LDEBUG);
|
LogManager::GetInstance()->SetAllLogLevels(LogLevel::LDEBUG);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This still seems to improve performance noticeably.
|
// This still seems to improve performance noticeably.
|
||||||
|
|
|
@ -202,10 +202,10 @@ int utimensat(int fd, const char *path, const struct timespec times[2]) {
|
||||||
void AndroidLogger::Log(const LogMessage &message) {
|
void AndroidLogger::Log(const LogMessage &message) {
|
||||||
int mode;
|
int mode;
|
||||||
switch (message.level) {
|
switch (message.level) {
|
||||||
case LogTypes::LWARNING:
|
case LogLevel::LWARNING:
|
||||||
mode = ANDROID_LOG_WARN;
|
mode = ANDROID_LOG_WARN;
|
||||||
break;
|
break;
|
||||||
case LogTypes::LERROR:
|
case LogLevel::LERROR:
|
||||||
mode = ANDROID_LOG_ERROR;
|
mode = ANDROID_LOG_ERROR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -70,22 +70,22 @@ class PrintfLogger : public LogListener {
|
||||||
public:
|
public:
|
||||||
void Log(const LogMessage &message) override {
|
void Log(const LogMessage &message) override {
|
||||||
switch (message.level) {
|
switch (message.level) {
|
||||||
case LogTypes::LVERBOSE:
|
case LogLevel::LVERBOSE:
|
||||||
fprintf(stderr, "V %s", message.msg.c_str());
|
fprintf(stderr, "V %s", message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LDEBUG:
|
case LogLevel::LDEBUG:
|
||||||
fprintf(stderr, "D %s", message.msg.c_str());
|
fprintf(stderr, "D %s", message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LINFO:
|
case LogLevel::LINFO:
|
||||||
fprintf(stderr, "I %s", message.msg.c_str());
|
fprintf(stderr, "I %s", message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LERROR:
|
case LogLevel::LERROR:
|
||||||
fprintf(stderr, "E %s", message.msg.c_str());
|
fprintf(stderr, "E %s", message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LWARNING:
|
case LogLevel::LWARNING:
|
||||||
fprintf(stderr, "W %s", message.msg.c_str());
|
fprintf(stderr, "W %s", message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LNOTICE:
|
case LogLevel::LNOTICE:
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "N %s", message.msg.c_str());
|
fprintf(stderr, "N %s", message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
|
@ -428,10 +428,10 @@ int main(int argc, const char* argv[])
|
||||||
|
|
||||||
PrintfLogger *printfLogger = new PrintfLogger();
|
PrintfLogger *printfLogger = new PrintfLogger();
|
||||||
|
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) {
|
for (int i = 0; i < (int)LogType::NUMBER_OF_LOGS; i++) {
|
||||||
LogTypes::LOG_TYPE type = (LogTypes::LOG_TYPE)i;
|
LogType type = (LogType)i;
|
||||||
logman->SetEnabled(type, fullLog);
|
logman->SetEnabled(type, fullLog);
|
||||||
logman->SetLogLevel(type, LogTypes::LDEBUG);
|
logman->SetLogLevel(type, LogLevel::LDEBUG);
|
||||||
}
|
}
|
||||||
logman->AddListener(printfLogger);
|
logman->AddListener(printfLogger);
|
||||||
|
|
||||||
|
|
|
@ -239,22 +239,22 @@ class PrintfLogger : public LogListener
|
||||||
{
|
{
|
||||||
switch (message.level)
|
switch (message.level)
|
||||||
{
|
{
|
||||||
case LogTypes::LVERBOSE:
|
case LogLevel::LVERBOSE:
|
||||||
case LogTypes::LDEBUG:
|
case LogLevel::LDEBUG:
|
||||||
log_(RETRO_LOG_DEBUG, "[%s] %s",
|
log_(RETRO_LOG_DEBUG, "[%s] %s",
|
||||||
message.log, message.msg.c_str());
|
message.log, message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LogTypes::LERROR:
|
case LogLevel::LERROR:
|
||||||
log_(RETRO_LOG_ERROR, "[%s] %s",
|
log_(RETRO_LOG_ERROR, "[%s] %s",
|
||||||
message.log, message.msg.c_str());
|
message.log, message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LNOTICE:
|
case LogLevel::LNOTICE:
|
||||||
case LogTypes::LWARNING:
|
case LogLevel::LWARNING:
|
||||||
log_(RETRO_LOG_WARN, "[%s] %s",
|
log_(RETRO_LOG_WARN, "[%s] %s",
|
||||||
message.log, message.msg.c_str());
|
message.log, message.msg.c_str());
|
||||||
break;
|
break;
|
||||||
case LogTypes::LINFO:
|
case LogLevel::LINFO:
|
||||||
default:
|
default:
|
||||||
log_(RETRO_LOG_INFO, "[%s] %s",
|
log_(RETRO_LOG_INFO, "[%s] %s",
|
||||||
message.log, message.msg.c_str());
|
message.log, message.msg.c_str());
|
||||||
|
@ -1081,7 +1081,7 @@ void retro_init(void)
|
||||||
logman->RemoveListener(logman->GetDebuggerListener());
|
logman->RemoveListener(logman->GetDebuggerListener());
|
||||||
logman->ChangeFileLog(nullptr);
|
logman->ChangeFileLog(nullptr);
|
||||||
logman->AddListener(printfLogger);
|
logman->AddListener(printfLogger);
|
||||||
logman->SetAllLogLevels(LogTypes::LINFO);
|
logman->SetAllLogLevels(LogLevel::LINFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_Config.Load("", "");
|
g_Config.Load("", "");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue