void GSFrame::OnUpdateTitle( wxTimerEvent& evt ) { #ifdef __linux__ // Important Linux note: When the title is set in fullscreen the window is redrawn. Unfortunately // an intermediate white screen appears too which leads to a very annoying flickering. if (IsFullScreen()) return; #endif AppConfig::UiTemplateOptions& templates = g_Conf->Templates; double fps = wxGetApp().FpsManager.GetFramerate(); // The "not PAL" case covers both Region_NTSC and Region_NTSC_PROGRESSIVE float per = gsRegionMode == Region_PAL ? (fps * 100) / EmuConfig.GS.FrameratePAL.ToFloat() : (fps * 100) / EmuConfig.GS.FramerateNTSC.ToFloat(); char gsDest[128]; gsDest[0] = 0; // No need to set whole array to NULL. GSgetTitleInfo2( gsDest, sizeof(gsDest) ); wxString limiterStr = templates.LimiterUnlimited; if( g_Conf->EmuOptions.GS.FrameLimitEnable ) { switch( g_LimiterMode ) { case Limit_Nominal: limiterStr = templates.LimiterNormal; break; case Limit_Turbo: limiterStr = templates.LimiterTurbo; break; case Limit_Slomo: limiterStr = templates.LimiterSlowmo; break; } } FastFormatUnicode cpuUsage; if (m_CpuUsage.IsImplemented()) { m_CpuUsage.UpdateStats(); cpuUsage.Write(L"EE: %3d%%", m_CpuUsage.GetEEcorePct()); cpuUsage.Write(L" | GS: %3d%%", m_CpuUsage.GetGsPct()); if (THREAD_VU1) cpuUsage.Write(L" | VU: %3d%%", m_CpuUsage.GetVUPct()); pxNonReleaseCode(cpuUsage.Write(L" | UI: %3d%%", m_CpuUsage.GetGuiPct())); } const u64& smode2 = *(u64*)PS2GS_BASE(GS_SMODE2); wxString omodef = (smode2 & 2) ? templates.OutputFrame : templates.OutputField; wxString omodei = (smode2 & 1) ? templates.OutputInterlaced : templates.OutputProgressive; wxString title = templates.TitleTemplate; title.Replace(L"${slot}", pxsFmt(L"%d", States_GetCurrentSlot())); title.Replace(L"${limiter}", limiterStr); title.Replace(L"${speed}", pxsFmt(L"%3d%%", lround(per))); title.Replace(L"${vfps}", pxsFmt(L"%.02f", fps)); title.Replace(L"${cpuusage}", cpuUsage); title.Replace(L"${omodef}", omodef); title.Replace(L"${omodei}", omodei); title.Replace(L"${gsdx}", fromUTF8(gsDest)); if (CoreThread.IsPaused()) title = templates.Paused + title; SetTitle(title); }
void GSFrame::OnUpdateTitle( wxTimerEvent& evt ) { #ifdef __linux__ // Important Linux note: When the title is set in fullscreen the window is redrawn. Unfortunately // an intermediate white screen appears too which leads to a very annoying flickering. if (IsFullScreen()) return; #endif double fps = wxGetApp().FpsManager.GetFramerate(); char gsDest[128]; GSgetTitleInfo2( gsDest, sizeof(gsDest) ); const wxChar* limiterStr = L"None"; if( g_Conf->EmuOptions.GS.FrameLimitEnable ) { switch( g_LimiterMode ) { case Limit_Nominal: limiterStr = L"Normal"; break; case Limit_Turbo: limiterStr = L"Turbo"; break; case Limit_Slomo: limiterStr = L"Slomo"; break; } } FastFormatUnicode cpuUsage; if (m_CpuUsage.IsImplemented()) { m_CpuUsage.UpdateStats(); if (THREAD_VU1) { // Display VU thread's usage cpuUsage.Write(L" | EE: %3d%% | GS: %3d%% | VU: %3d%% | UI: %3d%%", m_CpuUsage.GetEEcorePct(), m_CpuUsage.GetGsPct(), m_CpuUsage.GetVUPct(), m_CpuUsage.GetGuiPct()); } else { cpuUsage.Write(L" | EE: %3d%% | GS: %3d%% | UI: %3d%%", m_CpuUsage.GetEEcorePct(), m_CpuUsage.GetGsPct(), m_CpuUsage.GetGuiPct()); } } const u64& smode2 = *(u64*)PS2GS_BASE(GS_SMODE2); SetTitle( pxsFmt( L"%s | %ls (%ls) | Limiter: %ls | fps: %6.02f%ls | State %d", WX_STR(fromUTF8(gsDest)), (smode2 & 1) ? L"Interlaced" : L"Progressive", (smode2 & 2) ? L"frame" : L"field", limiterStr, fps, cpuUsage.c_str(), States_GetCurrentSlot() ) ); //States_GetCurrentSlot() }
void GSFrame::OnUpdateTitle( wxTimerEvent& evt ) { #ifdef __linux__ // Important Linux note: When the title is set in fullscreen the window is redrawn. Unfortunately // an intermediate white screen appears too which leads to a very annoying flickering. if (IsFullScreen()) return; #endif AppConfig::UiTemplateOptions& templates = g_Conf->Templates; double fps = wxGetApp().FpsManager.GetFramerate(); // The "not PAL" case covers both Region_NTSC and Region_NTSC_PROGRESSIVE float per = gsRegionMode == Region_PAL ? (fps * 100) / EmuConfig.GS.FrameratePAL.ToFloat() : (fps * 100) / EmuConfig.GS.FramerateNTSC.ToFloat(); char gsDest[128]; gsDest[0] = 0; // No need to set whole array to NULL. GSgetTitleInfo2( gsDest, sizeof(gsDest) ); const wxChar* limiterStr = templates.LimiterUnlimited; if( g_Conf->EmuOptions.GS.FrameLimitEnable ) { switch( g_LimiterMode ) { case Limit_Nominal: limiterStr = templates.LimiterNormal; break; case Limit_Turbo: limiterStr = templates.LimiterTurbo; break; case Limit_Slomo: limiterStr = templates.LimiterSlowmo; break; } } FastFormatUnicode cpuUsage; if (m_CpuUsage.IsImplemented()) { m_CpuUsage.UpdateStats(); cpuUsage.Write(L"EE: %3d%%", m_CpuUsage.GetEEcorePct()); cpuUsage.Write(L" | GS: %3d%%", m_CpuUsage.GetGsPct()); if (THREAD_VU1) cpuUsage.Write(L" | VU: %3d%%", m_CpuUsage.GetVUPct()); pxNonReleaseCode(cpuUsage.Write(L" | UI: %3d%%", m_CpuUsage.GetEEcorePct());) }
void GSFrame::OnUpdateTitle( wxTimerEvent& evt ) { double fps = wxGetApp().FpsManager.GetFramerate(); FastFormatUnicode cpuUsage; if (m_CpuUsage.IsImplemented()) { m_CpuUsage.UpdateStats(); if (!IsFullScreen()) { cpuUsage.Write(L"EE: %3d%%", m_CpuUsage.GetEEcorePct()); cpuUsage.Write(L" | GS: %3d%%", m_CpuUsage.GetGsPct()); if (THREAD_VU1) cpuUsage.Write(L" | VU: %3d%%", m_CpuUsage.GetVUPct()); pxNonReleaseCode(cpuUsage.Write(L" | UI: %3d%%", m_CpuUsage.GetGuiPct())); } if (THREAD_VU1) OSDmonitor(Color_StrongGreen, "VU:", std::to_string(m_CpuUsage.GetVUPct()).c_str()); OSDmonitor(Color_StrongGreen, "EE:", std::to_string(m_CpuUsage.GetEEcorePct()).c_str()); OSDmonitor(Color_StrongGreen, "GS:", std::to_string(m_CpuUsage.GetGsPct()).c_str()); pxNonReleaseCode(OSDmonitor(Color_StrongGreen, "UI:", std::to_string(m_CpuUsage.GetGuiPct()).c_str())); } std::ostringstream out; out << std::fixed << std::setprecision(2) << fps; OSDmonitor(Color_StrongGreen, "FPS:", out.str()); // Important Linux note: When the title is set in fullscreen the window is redrawn. Unfortunately // an intermediate white screen appears too which leads to a very annoying flickering. if (IsFullScreen()) return; AppConfig::UiTemplateOptions& templates = g_Conf->Templates; float percentage = (fps * 100) / GetVerticalFrequency().ToFloat(); char gsDest[128]; gsDest[0] = 0; // No need to set whole array to NULL. GSgetTitleInfo2( gsDest, sizeof(gsDest) ); wxString limiterStr = templates.LimiterUnlimited; if( g_Conf->EmuOptions.GS.FrameLimitEnable ) { switch( g_LimiterMode ) { case Limit_Nominal: limiterStr = templates.LimiterNormal; break; case Limit_Turbo: limiterStr = templates.LimiterTurbo; break; case Limit_Slomo: limiterStr = templates.LimiterSlowmo; break; } } const u64& smode2 = *(u64*)PS2GS_BASE(GS_SMODE2); wxString omodef = (smode2 & 2) ? templates.OutputFrame : templates.OutputField; wxString omodei = (smode2 & 1) ? templates.OutputInterlaced : templates.OutputProgressive; wxString title = templates.TitleTemplate; title.Replace(L"${slot}", pxsFmt(L"%d", States_GetCurrentSlot())); title.Replace(L"${limiter}", limiterStr); title.Replace(L"${speed}", pxsFmt(L"%3d%%", lround(percentage))); title.Replace(L"${vfps}", pxsFmt(L"%.02f", fps)); title.Replace(L"${cpuusage}", cpuUsage); title.Replace(L"${omodef}", omodef); title.Replace(L"${omodei}", omodei); title.Replace(L"${gsdx}", fromUTF8(gsDest)); if (CoreThread.IsPaused()) title = templates.Paused + title; SetTitle(title); }
void GSFrame::OnUpdateTitle( wxTimerEvent& evt ) { // Update the title only after the completion of at least a single Vsync, it's pointless to display the fps // when there are have been no frames rendered and SMODE2 register seems to fresh start with 0 on all the bitfields which // leads to the value of INT bit as 0 initially and the games are mentioned as progressive which is a bit misleading, // to prevent such issues, let's update the title after the actual frame rendering starts. if (g_FrameCount == 0) return; double fps = wxGetApp().FpsManager.GetFramerate(); FastFormatUnicode cpuUsage; if (m_CpuUsage.IsImplemented()) { m_CpuUsage.UpdateStats(); if (!IsFullScreen()) { cpuUsage.Write(L"EE: %3d%%", m_CpuUsage.GetEEcorePct()); cpuUsage.Write(L" | GS: %3d%%", m_CpuUsage.GetGsPct()); if (THREAD_VU1) cpuUsage.Write(L" | VU: %3d%%", m_CpuUsage.GetVUPct()); pxNonReleaseCode(cpuUsage.Write(L" | UI: %3d%%", m_CpuUsage.GetGuiPct())); } if (THREAD_VU1) OSDmonitor(Color_StrongGreen, "VU:", std::to_string(m_CpuUsage.GetVUPct()).c_str()); OSDmonitor(Color_StrongGreen, "EE:", std::to_string(m_CpuUsage.GetEEcorePct()).c_str()); OSDmonitor(Color_StrongGreen, "GS:", std::to_string(m_CpuUsage.GetGsPct()).c_str()); pxNonReleaseCode(OSDmonitor(Color_StrongGreen, "UI:", std::to_string(m_CpuUsage.GetGuiPct()).c_str())); } std::ostringstream out; out << std::fixed << std::setprecision(2) << fps; OSDmonitor(Color_StrongGreen, "FPS:", out.str()); #ifdef __linux__ // Important Linux note: When the title is set in fullscreen the window is redrawn. Unfortunately // an intermediate white screen appears too which leads to a very annoying flickering. if (IsFullScreen()) return; #endif AppConfig::UiTemplateOptions& templates = g_Conf->Templates; float percentage = (fps * 100) / GetVerticalFrequency().ToFloat(); char gsDest[128]; gsDest[0] = 0; // No need to set whole array to NULL. GSgetTitleInfo2( gsDest, sizeof(gsDest) ); wxString limiterStr = templates.LimiterUnlimited; if( g_Conf->EmuOptions.GS.FrameLimitEnable ) { switch( g_LimiterMode ) { case Limit_Nominal: limiterStr = templates.LimiterNormal; break; case Limit_Turbo: limiterStr = templates.LimiterTurbo; break; case Limit_Slomo: limiterStr = templates.LimiterSlowmo; break; } } const u64& smode2 = *(u64*)PS2GS_BASE(GS_SMODE2); wxString omodef = (smode2 & 2) ? templates.OutputFrame : templates.OutputField; wxString omodei = (smode2 & 1) ? templates.OutputInterlaced : templates.OutputProgressive; wxString title = templates.TitleTemplate; title.Replace(L"${slot}", pxsFmt(L"%d", States_GetCurrentSlot())); title.Replace(L"${limiter}", limiterStr); title.Replace(L"${speed}", pxsFmt(L"%3d%%", lround(percentage))); title.Replace(L"${vfps}", pxsFmt(L"%.02f", fps)); title.Replace(L"${cpuusage}", cpuUsage); title.Replace(L"${omodef}", omodef); title.Replace(L"${omodei}", omodei); title.Replace(L"${gsdx}", fromUTF8(gsDest)); title.Replace(L"${videomode}", ReportVideoMode()); if (CoreThread.IsPaused()) title = templates.Paused + title; SetTitle(title); }