From 5328e213a64dd8b86db8e9fe2774468694923caa Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 2 Nov 2013 13:33:27 -0700 Subject: [PATCH] Clear the jit cache when toggling debug stats. This way we can bypass that check normally, for speed. --- UI/EmuScreen.cpp | 6 ++++++ UI/GameSettingsScreen.cpp | 11 ++++++++++- UI/GameSettingsScreen.h | 1 + UI/MainScreen.cpp | 16 ++-------------- UI/MiscScreens.cpp | 12 +++++++++++- Windows/WndMainWindow.cpp | 1 + 6 files changed, 31 insertions(+), 16 deletions(-) diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 30ef7aa48c..ca2a883ab5 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -41,6 +41,7 @@ #include "Core/HLE/sceCtrl.h" #include "Core/HLE/sceDisplay.h" #include "Core/Debugger/SymbolMap.h" +#include "Core/MIPS/JitCommon/JitCommon.h" #include "UI/OnScreenDisplay.h" #include "UI/ui_atlas.h" @@ -187,6 +188,11 @@ void EmuScreen::sendMessage(const char *message, const char *value) { else if (!strcmp(message, "gpu dump next frame")) { if (gpu) gpu->DumpNextFrame(); } + if (!strcmp(message, "clear jit")) { + if (MIPSComp::jit) { + MIPSComp::jit->ClearCache(); + } + } } //tiltInputCurve implements a smooth deadzone as described here: diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 547e3c091d..aa66480149 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -37,6 +37,7 @@ #include "Core/Host.h" #include "Core/System.h" #include "Core/Reporting.h" +#include "Core/MIPS/JitCommon/JitCommon.h" #include "android/jni/TestRunner.h" #include "GPU/GPUInterface.h" #include "Common/KeyMap.h" @@ -58,6 +59,7 @@ void GameSettingsScreen::CreateViews() { GameInfo *info = g_gameInfoCache.GetInfo(gamePath_, true); cap60FPS_ = g_Config.iForceMaxEmulatedFPS == 60; + showDebugStats_ = g_Config.bShowDebugStats; iAlternateSpeedPercent_ = 3; for (int i = 0; i < 8; i++) { @@ -181,7 +183,7 @@ void GameSettingsScreen::CreateViews() { #endif }; graphicsSettings->Add(new PopupMultiChoice(&g_Config.iShowFPSCounter, gs->T("Show FPS Counter"), fpsChoices, 0, ARRAY_SIZE(fpsChoices), gs, screenManager())); - graphicsSettings->Add(new CheckBox(&g_Config.bShowDebugStats, gs->T("Show Debug Statistics"))); + graphicsSettings->Add(new CheckBox(&showDebugStats_, gs->T("Show Debug Statistics"))); // Developer tools are not accessible ingame, so it goes here. graphicsSettings->Add(new ItemHeader(gs->T("Debugging"))); @@ -375,6 +377,13 @@ void GameSettingsScreen::update(InputState &input) { UIScreen::update(input); g_Config.iForceMaxEmulatedFPS = cap60FPS_ ? 60 : 0; g_Config.iFpsLimit = alternateSpeedTable[iAlternateSpeedPercent_]; + if (g_Config.bShowDebugStats != showDebugStats_) { + // This affects the jit. + if (MIPSComp::jit) { + MIPSComp::jit->ClearCache(); + } + g_Config.bShowDebugStats = showDebugStats_; + } } void GameSettingsScreen::sendMessage(const char *message, const char *value) { diff --git a/UI/GameSettingsScreen.h b/UI/GameSettingsScreen.h index 2333d545eb..ae989e71bf 100644 --- a/UI/GameSettingsScreen.h +++ b/UI/GameSettingsScreen.h @@ -74,6 +74,7 @@ private: bool cap60FPS_; int iAlternateSpeedPercent_; bool enableReports_; + bool showDebugStats_; }; /* diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp index eb9e026b94..603422c557 100644 --- a/UI/MainScreen.cpp +++ b/UI/MainScreen.cpp @@ -843,22 +843,10 @@ UI::EventReturn GamePauseScreen::OnCwCheat(UI::EventParams &e) { return UI::EVENT_DONE; } -UI::EventReturn GamePauseScreen::OnLanguageChange(UI::EventParams &e) { - RecreateViews(); - if (host) { - host->UpdateUI(); - } - - return UI::EVENT_DONE; -} - void GamePauseScreen::sendMessage(const char *message, const char *value) { // Since the language message isn't allowed to be in native, we have to have add this // to every screen which directly inherits from UIScreen(which are few right now, luckily). - I18NCategory *de = GetI18NCategory("Developer"); - if (!strcmp(message, "language screen")) { - auto langScreen = new NewLanguageScreen(de->T("Language")); - langScreen->OnChoice.Handle(this, &GamePauseScreen::OnLanguageChange); - screenManager()->push(langScreen); + if (!strcmp(message, "language")) { + screenManager()->RecreateAllViews(); } } diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp index 8ead6c2ff8..b17c6479dd 100644 --- a/UI/MiscScreens.cpp +++ b/UI/MiscScreens.cpp @@ -32,6 +32,7 @@ #include "UI/MainScreen.h" #include "Core/Config.h" #include "Core/System.h" +#include "Core/MIPS/JitCommon/JitCommon.h" #include "Core/HLE/sceUtility.h" #include "Common/CPUDetect.h" @@ -48,7 +49,6 @@ #include "gfx_es2/gl_state.h" #include "util/random/rng.h" -#include "Core/HLE/sceUtility.h" #include "UI/ui_atlas.h" static const int symbols[4] = { @@ -94,12 +94,21 @@ void DrawBackground(float alpha) { } } +void HandleCommonMessages(const char *message, const char *value, ScreenManager *manager) { + if (!strcmp(message, "clear jit")) { + if (MIPSComp::jit) { + MIPSComp::jit->ClearCache(); + } + } +} + void UIScreenWithBackground::DrawBackground(UIContext &dc) { ::DrawBackground(1.0f); dc.Flush(); } void UIScreenWithBackground::sendMessage(const char *message, const char *value) { + HandleCommonMessages(message, value, screenManager()); I18NCategory *de = GetI18NCategory("Developer"); if (!strcmp(message, "language screen")) { auto langScreen = new NewLanguageScreen(de->T("Language")); @@ -132,6 +141,7 @@ void UIDialogScreenWithBackground::DrawBackground(UIContext &dc) { } void UIDialogScreenWithBackground::sendMessage(const char *message, const char *value) { + HandleCommonMessages(message, value, screenManager()); I18NCategory *de = GetI18NCategory("Developer"); if (!strcmp(message, "language screen")) { auto langScreen = new NewLanguageScreen(de->T("Language")); diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 826f89e2ca..b5184c81b9 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -1255,6 +1255,7 @@ namespace MainWindow case ID_DEBUG_SHOWDEBUGSTATISTICS: g_Config.bShowDebugStats = !g_Config.bShowDebugStats; + NativeMessageReceived("clear jit", ""); break; case ID_OPTIONS_HARDWARETRANSFORM: