diff --git a/Common/Log/LogManager.h b/Common/Log/LogManager.h index 32e9a4e5ef..21ea872da8 100644 --- a/Common/Log/LogManager.h +++ b/Common/Log/LogManager.h @@ -56,9 +56,8 @@ ENUM_CLASS_BITOPS(LogOutput); class RingbufferLog { public: void Log(const LogMessage &msg); - 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(); } + std::string_view TextAt(int i) const { return messages_[(curMessage_ - i - 1) & (MAX_LOGS - 1)].msg; } LogLevel LevelAt(int i) const { return messages_[(curMessage_ - i - 1) & (MAX_LOGS - 1)].level; } void Clear() { @@ -67,7 +66,7 @@ public: } private: - enum { MAX_LOGS = 128 }; + enum { MAX_LOGS = 256 }; LogMessage messages_[MAX_LOGS]; int curMessage_ = 0; int count_ = 0; diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp index d87c467341..d212e87d56 100644 --- a/UI/DevScreens.cpp +++ b/UI/DevScreens.cpp @@ -122,14 +122,23 @@ void DevMenuScreen::CreatePopupContents(UI::ViewGroup *parent) { ScrollView *scroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT, 1.0f)); LinearLayout *items = new LinearLayout(ORIENT_VERTICAL); -#if !defined(MOBILE_DEVICE) - items->Add(new Choice(dev->T("Log View")))->OnClick.Handle(this, &DevMenuScreen::OnLogView); -#endif - items->Add(new Choice(dev->T("Logging Channels")))->OnClick.Handle(this, &DevMenuScreen::OnLogConfig); + items->Add(new Choice(dev->T("Log View")))->OnClick.Add([this](UI::EventParams & e) { + UpdateUIState(UISTATE_PAUSEMENU); + screenManager()->push(new LogViewScreen()); + return UI::EVENT_DONE; + }); + + items->Add(new Choice(dev->T("Logging Channels")))->OnClick.Add([this](UI::EventParams & e) { + UpdateUIState(UISTATE_PAUSEMENU); + screenManager()->push(new LogConfigScreen()); + return UI::EVENT_DONE; + }); + items->Add(new Choice(dev->T("Debugger")))->OnClick.Add([](UI::EventParams &e) { g_Config.bShowImDebugger = !g_Config.bShowImDebugger; return UI::EVENT_DONE; }); + items->Add(new Choice(sy->T("Developer Tools")))->OnClick.Handle(this, &DevMenuScreen::OnDeveloperTools); // Debug overlay @@ -187,18 +196,6 @@ UI::EventReturn DevMenuScreen::OnResetLimitedLogging(UI::EventParams &e) { return UI::EVENT_DONE; } -UI::EventReturn DevMenuScreen::OnLogView(UI::EventParams &e) { - UpdateUIState(UISTATE_PAUSEMENU); - screenManager()->push(new LogScreen()); - return UI::EVENT_DONE; -} - -UI::EventReturn DevMenuScreen::OnLogConfig(UI::EventParams &e) { - UpdateUIState(UISTATE_PAUSEMENU); - screenManager()->push(new LogConfigScreen()); - return UI::EVENT_DONE; -} - UI::EventReturn DevMenuScreen::OnDeveloperTools(UI::EventParams &e) { UpdateUIState(UISTATE_PAUSEMENU); screenManager()->push(new DeveloperToolsScreen(gamePath_)); @@ -235,14 +232,16 @@ void GPIGPOScreen::CreatePopupContents(UI::ViewGroup *parent) { } } -void LogScreen::UpdateLog() { +void LogViewScreen::UpdateLog() { using namespace UI; const RingbufferLog *ring = g_logManager.GetRingbuffer(); if (!ring) return; vert_->Clear(); + + // TODO: Direct rendering without TextViews. for (int i = ring->GetCount() - 1; i >= 0; i--) { - TextView *v = vert_->Add(new TextView(ring->TextAt(i), FLAG_DYNAMIC_ASCII, false)); + TextView *v = vert_->Add(new TextView(StripSpaces(ring->TextAt(i)), FLAG_DYNAMIC_ASCII, true)); uint32_t color = 0xFFFFFF; switch (ring->LevelAt(i)) { case LogLevel::LDEBUG: color = 0xE0E0E0; break; @@ -257,7 +256,7 @@ void LogScreen::UpdateLog() { toBottom_ = true; } -void LogScreen::update() { +void LogViewScreen::update() { UIDialogScreenWithBackground::update(); if (toBottom_) { toBottom_ = false; @@ -265,7 +264,7 @@ void LogScreen::update() { } } -void LogScreen::CreateViews() { +void LogViewScreen::CreateViews() { using namespace UI; auto di = GetI18NCategory(I18NCat::DIALOG); @@ -275,9 +274,6 @@ void LogScreen::CreateViews() { scroll_ = outer->Add(new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(1.0))); LinearLayout *bottom = outer->Add(new LinearLayout(ORIENT_HORIZONTAL, new LayoutParams(FILL_PARENT, WRAP_CONTENT))); bottom->Add(new Button(di->T("Back")))->OnClick.Handle(this, &UIScreen::OnBack); - cmdLine_ = bottom->Add(new TextEdit("", "Command", "Command Line", new LinearLayoutParams(1.0))); - cmdLine_->OnEnter.Handle(this, &LogScreen::OnSubmit); - bottom->Add(new Button(di->T("Submit")))->OnClick.Handle(this, &LogScreen::OnSubmit); vert_ = scroll_->Add(new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT))); vert_->SetSpacing(0); @@ -285,19 +281,6 @@ void LogScreen::CreateViews() { UpdateLog(); } -UI::EventReturn LogScreen::OnSubmit(UI::EventParams &e) { - std::string cmd = cmdLine_->GetText(); - - // TODO: Can add all sorts of fun stuff here that we can't be bothered writing proper UI for, like various memdumps etc. - - NOTICE_LOG(Log::System, "Submitted: %s", cmd.c_str()); - - UpdateLog(); - cmdLine_->SetText(""); - cmdLine_->SetFocus(); - return UI::EVENT_DONE; -} - void LogConfigScreen::CreateViews() { using namespace UI; diff --git a/UI/DevScreens.h b/UI/DevScreens.h index 32e4eba242..00ab672ff5 100644 --- a/UI/DevScreens.h +++ b/UI/DevScreens.h @@ -38,8 +38,6 @@ public: void dialogFinished(const Screen *dialog, DialogResult result) override; protected: - UI::EventReturn OnLogView(UI::EventParams &e); - UI::EventReturn OnLogConfig(UI::EventParams &e); UI::EventReturn OnJitCompare(UI::EventParams &e); UI::EventReturn OnShaderView(UI::EventParams &e); UI::EventReturn OnDeveloperTools(UI::EventParams &e); @@ -76,7 +74,7 @@ private: UI::EventReturn OnLogLevelChange(UI::EventParams &e); }; -class LogScreen : public UIDialogScreenWithBackground { +class LogViewScreen : public UIDialogScreenWithBackground { public: void CreateViews() override; void update() override; @@ -85,9 +83,7 @@ public: private: void UpdateLog(); - UI::EventReturn OnSubmit(UI::EventParams &e); - UI::TextEdit *cmdLine_ = nullptr; UI::LinearLayout *vert_ = nullptr; UI::ScrollView *scroll_ = nullptr; bool toBottom_ = false; diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index f61d4fb270..e1cf4c0696 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -25,6 +25,7 @@ using namespace std::placeholders; #include "Common/GPU/OpenGL/GLFeatures.h" #include "Common/File/FileUtil.h" #include "Common/File/VFS/VFS.h" +#include "Common/Log/LogManager.h" #include "Common/UI/Root.h" #include "Common/UI/UI.h" #include "Common/UI/Context.h" @@ -455,6 +456,8 @@ EmuScreen::~EmuScreen() { SetExtraAssertInfo(nullptr); SetAssertCancelCallback(nullptr, nullptr); + g_logManager.EnableOutput(LogOutput::RingBuffer); + #ifndef MOBILE_DEVICE if (g_Config.bDumpFrames && startDumping) {