From 7ed94d86141890ff541e6a4bd0da4b28e75a6f84 Mon Sep 17 00:00:00 2001 From: Fire Cube Date: Sat, 22 Feb 2025 20:27:21 +0100 Subject: [PATCH] add option to split log --- src/common/config.cpp | 11 +++++ src/common/config.h | 3 +- src/common/logging/backend.cpp | 3 +- src/emulator.cpp | 55 ++++++++++++----------- src/qt_gui/settings_dialog.cpp | 5 ++- src/qt_gui/settings_dialog.ui | 81 +++++++++++++++++++--------------- 6 files changed, 93 insertions(+), 65 deletions(-) diff --git a/src/common/config.cpp b/src/common/config.cpp index 32c5e670b..2f1df41ba 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -69,6 +69,7 @@ static bool vkHostMarkers = false; static bool vkGuestMarkers = false; static bool rdocEnable = false; static bool isFpsColor = true; +static bool isSplitLogEnabled = false; static s16 cursorState = HideCursorState::Idle; static int cursorHideTimeout = 5; // 5 seconds (default) static bool useUnifiedInputConfig = true; @@ -451,6 +452,10 @@ void setLogFilter(const std::string& type) { logFilter = type; } +void setSplitLogEnabled(bool enabled) { + isSplitLogEnabled = enabled; +} + void setUserName(const std::string& type) { userName = type; } @@ -656,6 +661,10 @@ u32 GetLanguage() { return m_language; } +bool getSplitLogEnabled() { + return isSplitLogEnabled; +} + int getBackgroundImageOpacity() { return backgroundImageOpacity; } @@ -761,6 +770,7 @@ void load(const std::filesystem::path& path) { const toml::value& debug = data.at("Debug"); isDebugDump = toml::find_or(debug, "DebugDump", false); + isSplitLogEnabled = toml::find_or(debug, "isSplitLogEnabled", false); isShaderDebug = toml::find_or(debug, "CollectShader", false); isFpsColor = toml::find_or(debug, "FPSColor", true); } @@ -887,6 +897,7 @@ void save(const std::filesystem::path& path) { data["Vulkan"]["rdocEnable"] = rdocEnable; data["Debug"]["DebugDump"] = isDebugDump; data["Debug"]["CollectShader"] = isShaderDebug; + data["Debug"]["isSplitLogEnabled"] = isSplitLogEnabled; data["Debug"]["FPSColor"] = isFpsColor; data["Keys"]["TrophyKey"] = trophyKey; diff --git a/src/common/config.h b/src/common/config.h index 7b9bc789b..9fa26490d 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -111,7 +111,8 @@ void setIsMotionControlsEnabled(bool use); void setLogType(const std::string& type); void setLogFilter(const std::string& type); - +void setSplitLogEnabled(bool enabled); +bool getSplitLogEnabled(); void setVkValidation(bool enable); void setVkSyncValidation(bool enable); void setRdocEnabled(bool enable); diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index 7802977f5..88259212f 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp @@ -139,7 +139,8 @@ public: std::filesystem::create_directory(log_dir); Filter filter; filter.ParseFilterString(Config::getLogFilter()); - instance = std::unique_ptr(new Impl(log_dir / LOG_FILE, filter), + const auto& log_file_path = log_file.empty() ? LOG_FILE : log_file; + instance = std::unique_ptr(new Impl(log_dir / log_file_path, filter), Deleter); initialization_in_progress_suppress_logging = false; } diff --git a/src/emulator.cpp b/src/emulator.cpp index cd981add2..a768b902c 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -50,29 +50,6 @@ Emulator::Emulator() { SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS); #endif - // Start logger. - Common::Log::Initialize(); - Common::Log::Start(); - LOG_INFO(Loader, "Starting shadps4 emulator v{} ", Common::VERSION); - LOG_INFO(Loader, "Revision {}", Common::g_scm_rev); - LOG_INFO(Loader, "Branch {}", Common::g_scm_branch); - LOG_INFO(Loader, "Description {}", Common::g_scm_desc); - LOG_INFO(Loader, "Remote {}", Common::g_scm_remote_url); - - LOG_INFO(Config, "General LogType: {}", Config::getLogType()); - LOG_INFO(Config, "General isNeo: {}", Config::isNeoModeConsole()); - LOG_INFO(Config, "GPU isNullGpu: {}", Config::nullGpu()); - LOG_INFO(Config, "GPU shouldDumpShaders: {}", Config::dumpShaders()); - LOG_INFO(Config, "GPU vblankDivider: {}", Config::vblankDiv()); - LOG_INFO(Config, "Vulkan gpuId: {}", Config::getGpuId()); - LOG_INFO(Config, "Vulkan vkValidation: {}", Config::vkValidationEnabled()); - LOG_INFO(Config, "Vulkan vkValidationSync: {}", Config::vkValidationSyncEnabled()); - LOG_INFO(Config, "Vulkan vkValidationGpu: {}", Config::vkValidationGpuEnabled()); - LOG_INFO(Config, "Vulkan crashDiagnostics: {}", Config::getVkCrashDiagnosticEnabled()); - LOG_INFO(Config, "Vulkan hostMarkers: {}", Config::getVkHostMarkersEnabled()); - LOG_INFO(Config, "Vulkan guestMarkers: {}", Config::getVkGuestMarkersEnabled()); - LOG_INFO(Config, "Vulkan rdocEnable: {}", Config::isRdocEnabled()); - // Create stdin/stdout/stderr Common::Singleton::Instance()->CreateStdHandles(); @@ -90,9 +67,7 @@ Emulator::Emulator() { const auto user_dir = Common::FS::GetUserPath(Common::FS::PathType::UserDir); QString filePath = QString::fromStdString((user_dir / "play_time.txt").string()); QFile file(filePath); - if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { - LOG_INFO(Loader, "Error opening or creating play_time.txt"); - } + ASSERT_MSG(file.open(QIODevice::ReadWrite | QIODevice::Text), "Error opening or creating play_time.txt"); #endif } @@ -138,6 +113,34 @@ void Emulator::Run(const std::filesystem::path& file, const std::vectorGetString("CONTENT_ID"); ASSERT_MSG(content_id.has_value(), "Failed to get CONTENT_ID"); id = std::string(*content_id, 7, 9); + + if (Config::getSplitLogEnabled()) { + Common::Log::Initialize(id + ".log"); + } + else { + Common::Log::Initialize(); + } + Common::Log::Start(); + LOG_INFO(Loader, "Starting shadps4 emulator v{} ", Common::VERSION); + LOG_INFO(Loader, "Revision {}", Common::g_scm_rev); + LOG_INFO(Loader, "Branch {}", Common::g_scm_branch); + LOG_INFO(Loader, "Description {}", Common::g_scm_desc); + LOG_INFO(Loader, "Remote {}", Common::g_scm_remote_url); + + LOG_INFO(Config, "General LogType: {}", Config::getLogType()); + LOG_INFO(Config, "General isNeo: {}", Config::isNeoModeConsole()); + LOG_INFO(Config, "GPU isNullGpu: {}", Config::nullGpu()); + LOG_INFO(Config, "GPU shouldDumpShaders: {}", Config::dumpShaders()); + LOG_INFO(Config, "GPU vblankDivider: {}", Config::vblankDiv()); + LOG_INFO(Config, "Vulkan gpuId: {}", Config::getGpuId()); + LOG_INFO(Config, "Vulkan vkValidation: {}", Config::vkValidationEnabled()); + LOG_INFO(Config, "Vulkan vkValidationSync: {}", Config::vkValidationSyncEnabled()); + LOG_INFO(Config, "Vulkan vkValidationGpu: {}", Config::vkValidationGpuEnabled()); + LOG_INFO(Config, "Vulkan crashDiagnostics: {}", Config::getVkCrashDiagnosticEnabled()); + LOG_INFO(Config, "Vulkan hostMarkers: {}", Config::getVkHostMarkersEnabled()); + LOG_INFO(Config, "Vulkan guestMarkers: {}", Config::getVkGuestMarkersEnabled()); + LOG_INFO(Config, "Vulkan rdocEnable: {}", Config::isRdocEnabled()); + Libraries::NpTrophy::game_serial = id; const auto trophyDir = Common::FS::GetUserPath(Common::FS::PathType::MetaDataDir) / id / "TrophyFiles"; diff --git a/src/qt_gui/settings_dialog.cpp b/src/qt_gui/settings_dialog.cpp index bebb16c9a..5e26c2b47 100644 --- a/src/qt_gui/settings_dialog.cpp +++ b/src/qt_gui/settings_dialog.cpp @@ -404,6 +404,7 @@ void SettingsDialog::LoadValuesFromConfig() { QString::fromStdString(toml::find_or(data, "Keys", "TrophyKey", ""))); ui->trophyKeyLineEdit->setEchoMode(QLineEdit::Password); ui->debugDump->setChecked(toml::find_or(data, "Debug", "DebugDump", false)); + ui->splitLogCheckbox->setChecked(toml::find_or(data, "Debug", "isSplitLogEnabled", false)); ui->vkValidationCheckBox->setChecked(toml::find_or(data, "Vulkan", "validation", false)); ui->vkSyncValidationCheckBox->setChecked( toml::find_or(data, "Vulkan", "validation_sync", false)); @@ -626,7 +627,8 @@ void SettingsDialog::updateNoteTextEdit(const QString& elementName) { text = tr("Copy GPU Buffers:\\nGets around race conditions involving GPU submits.\\nMay or may not help with PM4 type 0 crashes."); } else if (elementName == "collectShaderCheckBox") { text = tr("Collect Shaders:\\nYou need this enabled to edit shaders with the debug menu (Ctrl + F10)."); - } + } else if (elementName == "splitLogCheckbox") { + text = tr("Split Log File:\\nSplits the log file into multiple files, one for each game.");} // clang-format on ui->descriptionText->setText(text.replace("\\n", "\n")); } @@ -678,6 +680,7 @@ void SettingsDialog::UpdateSettings() { Config::setLoadGameSizeEnabled(ui->gameSizeCheckBox->isChecked()); Config::setShowSplash(ui->showSplashCheckBox->isChecked()); Config::setDebugDump(ui->debugDump->isChecked()); + Config::setSplitLogEnabled(ui->splitLogCheckbox->isChecked()); Config::setVkValidation(ui->vkValidationCheckBox->isChecked()); Config::setVkSyncValidation(ui->vkSyncValidationCheckBox->isChecked()); Config::setRdocEnabled(ui->rdocCheckBox->isChecked()); diff --git a/src/qt_gui/settings_dialog.ui b/src/qt_gui/settings_dialog.ui index 53bae664f..82b259417 100644 --- a/src/qt_gui/settings_dialog.ui +++ b/src/qt_gui/settings_dialog.ui @@ -1,6 +1,4 @@ - SettingsDialog @@ -59,7 +57,7 @@ - 0 + 6 @@ -1877,39 +1875,50 @@ - - - Enable Crash Diagnostics - - - - - - - Collect Shaders - - - - - - - Copy GPU Buffers - - - - - - - Host Debug Markers - - - - - - - Guest Debug Markers - - + + + + + Collect Shaders + + + + + + + Copy GPU Buffers + + + + + + + Enable Crash Diagnostics + + + + + + + Host Debug Markers + + + + + + + Guest Debug Markers + + + + + + + Split Log To Seperate Files For Games + + + +