diff --git a/Common/LogManager.cpp b/Common/LogManager.cpp index b1321eba86..489f1fe411 100644 --- a/Common/LogManager.cpp +++ b/Common/LogManager.cpp @@ -56,38 +56,37 @@ LogManager *LogManager::logManager_ = NULL; struct LogNameTableEntry { LogTypes::LOG_TYPE logType; const char *name; - const char *longName; }; static const LogNameTableEntry logTable[] = { - {LogTypes::MASTER_LOG, "*", "Master Log"}, + {LogTypes::MASTER_LOG, "*"}, - {LogTypes::SCEAUDIO ,"AUDIO", "sceAudio"}, - {LogTypes::SCECTRL ,"CTRL", "sceCtrl"}, - {LogTypes::SCEDISPLAY ,"DISP", "sceDisplay"}, - {LogTypes::SCEFONT ,"FONT", "sceFont"}, - {LogTypes::SCEGE ,"SCEGE", "sceGe"}, - {LogTypes::SCEINTC ,"INTC", "sceKernelInterrupt"}, - {LogTypes::SCEIO ,"IO", "sceIo"}, - {LogTypes::SCEKERNEL ,"KERNEL", "sceKernel*"}, - {LogTypes::SCEMODULE ,"MODULE", "sceKernelModule"}, - {LogTypes::SCENET ,"NET", "sceNet*"}, - {LogTypes::SCERTC ,"SCERTC", "sceRtc"}, - {LogTypes::SCESAS ,"SCESAS", "sceSas"}, - {LogTypes::SCEUTILITY ,"UTIL", "sceUtility"}, + {LogTypes::SCEAUDIO ,"SCEAUDIO"}, + {LogTypes::SCECTRL ,"SCECTRL"}, + {LogTypes::SCEDISPLAY ,"SCEDISP"}, + {LogTypes::SCEFONT ,"SCEFONT"}, + {LogTypes::SCEGE ,"SCESCEGE"}, + {LogTypes::SCEINTC ,"SCEINTC"}, + {LogTypes::SCEIO ,"SCEIO"}, + {LogTypes::SCEKERNEL ,"SCEKERNEL"}, + {LogTypes::SCEMODULE ,"SCEMODULE"}, + {LogTypes::SCENET ,"SCENET"}, + {LogTypes::SCERTC ,"SCERTC"}, + {LogTypes::SCESAS ,"SCESAS"}, + {LogTypes::SCEUTILITY ,"SCEUTIL"}, - {LogTypes::BOOT ,"BOOT", "Boot"}, - {LogTypes::COMMON ,"COMMON", "Common"}, - {LogTypes::CPU ,"CPU", "CPU"}, - {LogTypes::FILESYS ,"FileSys", "File System"}, - {LogTypes::G3D ,"G3D", "3D Graphics"}, - {LogTypes::HLE ,"HLE", "HLE"}, - {LogTypes::JIT ,"JIT", "JIT compiler"}, - {LogTypes::LOADER ,"LOAD", "Loader"}, - {LogTypes::ME ,"ME", "Media Engine"}, - {LogTypes::MEMMAP ,"MM", "Memory Map"}, - {LogTypes::TIME ,"TIME", "CoreTiming"}, - {LogTypes::SASMIX ,"SASMIX", "Sound Mixer (Sas)"}, + {LogTypes::BOOT ,"BOOT"}, + {LogTypes::COMMON ,"COMMON"}, + {LogTypes::CPU ,"CPU"}, + {LogTypes::FILESYS ,"FILESYS"}, + {LogTypes::G3D ,"G3D"}, + {LogTypes::HLE ,"HLE"}, + {LogTypes::JIT ,"JIT"}, + {LogTypes::LOADER ,"LOAD"}, + {LogTypes::ME ,"ME"}, + {LogTypes::MEMMAP ,"MM"}, + {LogTypes::TIME ,"TIME"}, + {LogTypes::SASMIX ,"SASMIX"}, }; LogManager::LogManager() { @@ -95,7 +94,7 @@ LogManager::LogManager() { if (i != logTable[i].logType) { FLOG("Bad logtable at %i", (int)i); } - log_[logTable[i].logType] = new LogChannel(logTable[i].name, logTable[i].longName); + log_[logTable[i].logType] = new LogChannel(logTable[i].name); } // Remove file logging on small devices @@ -168,12 +167,12 @@ void LogManager::SaveConfig(IniFile::Section *section) { } } -void LogManager::LoadConfig(IniFile::Section *section) { +void LogManager::LoadConfig(IniFile::Section *section, bool debugDefaults) { for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) { - bool enabled; - int level; + bool enabled = false; + int level = 0; section->Get((std::string(log_[i]->GetShortName()) + "Enabled").c_str(), &enabled, true); - section->Get((std::string(log_[i]->GetShortName()) + "Level").c_str(), &level, 0); + section->Get((std::string(log_[i]->GetShortName()) + "Level").c_str(), &level, debugDefaults ? (int)LogTypes::LDEBUG : (int)LogTypes::LERROR); log_[i]->SetEnable(enabled); log_[i]->SetLevel((LogTypes::LOG_LEVELS)level); } @@ -250,9 +249,8 @@ void LogManager::Shutdown() { logManager_ = NULL; } -LogChannel::LogChannel(const char* shortName, const char* fullName, bool enable) - : enable_(enable), m_hasListeners(false) { - strncpy(m_fullName, fullName, 128); +LogChannel::LogChannel(const char* shortName) + : enable_(false), m_hasListeners(false) { strncpy(m_shortName, shortName, 32); #if defined(_DEBUG) level_ = LogTypes::LDEBUG; diff --git a/Common/LogManager.h b/Common/LogManager.h index 9278404081..3e1878604f 100644 --- a/Common/LogManager.h +++ b/Common/LogManager.h @@ -87,10 +87,9 @@ private: class LogChannel { public: - LogChannel(const char* shortName, const char* fullName, bool enable = false); + LogChannel(const char* shortName); const char* GetShortName() const { return m_shortName; } - const char* GetFullName() const { return m_fullName; } void AddListener(LogListener* listener); void RemoveListener(LogListener* listener); @@ -110,7 +109,6 @@ public: bool enable_; private: - char m_fullName[128]; char m_shortName[32]; std::mutex m_listeners_lock; std::set m_listeners; @@ -197,5 +195,5 @@ public: void ChangeFileLog(const char *filename); void SaveConfig(IniFile::Section *section); - void LoadConfig(IniFile::Section *section); + void LoadConfig(IniFile::Section *section, bool debugDefaults); }; diff --git a/Core/Config.cpp b/Core/Config.cpp index 3086299df4..721913f897 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -34,6 +34,7 @@ #include "Common/KeyMap.h" #include "Common/FileUtil.h" #include "Common/StringUtils.h" +#include "Common/LogManager.h" #include "Core/Config.h" #include "Core/Loaders.h" #include "GPU/Common/FramebufferCommon.h" @@ -46,6 +47,13 @@ Config g_Config; bool jitForcedOff; +#ifdef _DEBUG +static const char *logSectionName = "LogDebug"; +#else +static const char *logSectionName = "Log"; +#endif + + #ifdef IOS extern bool iosCanUseJit; #endif @@ -844,6 +852,14 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) { if (!File::Exists(currentDirectory)) currentDirectory = ""; + IniFile::Section *log = iniFile.GetOrCreateSection(logSectionName); + + bool debugDefaults = false; +#ifdef _DEBUG + debugDefaults = true; +#endif + LogManager::GetInstance()->LoadConfig(log, debugDefaults); + IniFile::Section *recent = iniFile.GetOrCreateSection("Recent"); recent->Get("MaxRecent", &iMaxRecent, 30); @@ -950,8 +966,7 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) { //so this is all the way down here to overwrite the controller settings //sadly it won't benefit from all the "version conversion" going on up-above //but these configs shouldn't contain older versions anyhow - if (bGameSpecific) - { + if (bGameSpecific) { loadGameConfig(gameId_); } @@ -1020,6 +1035,9 @@ void Config::Save() { IniFile::Section *control = iniFile.GetOrCreateSection("Control"); control->Delete("DPadRadius"); + IniFile::Section *log = iniFile.GetOrCreateSection(logSectionName); + LogManager::GetInstance()->SaveConfig(log); + if (!iniFile.Save(iniFilename_.c_str())) { ERROR_LOG(LOADER, "Error saving config - can't write ini %s", iniFilename_.c_str()); return; diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp index d98e4b4646..819e391870 100644 --- a/UI/DevScreens.cpp +++ b/UI/DevScreens.cpp @@ -243,7 +243,7 @@ void LogConfigScreen::CreateViews() { LinearLayout *row = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(cellSize - 50, WRAP_CONTENT)); row->SetSpacing(0); row->Add(new CheckBox(&chan->enable_, "", "", new LinearLayoutParams(50, WRAP_CONTENT))); - row->Add(new PopupMultiChoice(&chan->level_, chan->GetFullName(), logLevelList, 1, 6, 0, screenManager(), new LinearLayoutParams(1.0))); + row->Add(new PopupMultiChoice(&chan->level_, chan->GetShortName(), logLevelList, 1, 6, 0, screenManager(), new LinearLayoutParams(1.0))); grid->Add(row); } } diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index bc05f9cd73..a683ea6d6d 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -360,9 +360,8 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch } #ifndef _WIN32 - logger = new AndroidLogger(); - LogManager::Init(); + logger = new AndroidLogger(); g_Config.AddSearchPath(user_data_path); g_Config.AddSearchPath(g_Config.memStickDirectory + "PSP/SYSTEM/"); @@ -461,7 +460,10 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch g_Config.currentDirectory = "./"; #endif } +#endif + // Hard reset the logs. TODO: Get rid of this and read from config. +#ifndef _WIN32 for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) { LogTypes::LOG_TYPE type = (LogTypes::LOG_TYPE)i; logman->SetEnable(type, true); diff --git a/Windows/main.cpp b/Windows/main.cpp index 43dbc5e648..801e3f5997 100644 --- a/Windows/main.cpp +++ b/Windows/main.cpp @@ -287,7 +287,6 @@ std::vector GetWideCmdLine() { wargv = CommandLineToArgvW(GetCommandLineW(), &wargc); std::vector wideArgs(wargv, wargv + wargc); - return wideArgs; } @@ -353,6 +352,8 @@ int WINAPI WinMain(HINSTANCE _hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLin } } + LogManager::Init(); + // On Win32 it makes more sense to initialize the system directories here // because the next place it was called was in the EmuThread, and it's too late by then. InitSysDirectories(); @@ -429,7 +430,6 @@ int WINAPI WinMain(HINSTANCE _hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLin g_Config.bFullScreen = true; } - LogManager::Init(); // Consider at least the following cases before changing this code: // - By default in Release, the console should be hidden by default even if logging is enabled. // - By default in Debug, the console should be shown by default.