diff --git a/desmume/src/GPU_osd.cpp b/desmume/src/GPU_osd.cpp index bb515c831..392553dbf 100644 --- a/desmume/src/GPU_osd.cpp +++ b/desmume/src/GPU_osd.cpp @@ -504,7 +504,7 @@ void DrawHUD() if (CommonSettings.hud.FpsDisplay) { - osd->addFixed(Hud.FpsDisplay.x, Hud.FpsDisplay.y, "Fps:%02d/%02d%s", Hud.fps, Hud.fps3d, driver->EMU_IsEmulationPaused() ? " (paused)" : ""); + osd->addFixed(Hud.FpsDisplay.x, Hud.FpsDisplay.y, "Fps:%02d/%02d (%02d%%)%s", Hud.fps, Hud.fps3d, Hud.arm9load, driver->EMU_IsEmulationPaused() ? " (paused)" : ""); } if (CommonSettings.hud.FrameCounterDisplay) diff --git a/desmume/src/GPU_osd.h b/desmume/src/GPU_osd.h index 872c2eb3f..722642ce4 100644 --- a/desmume/src/GPU_osd.h +++ b/desmume/src/GPU_osd.h @@ -56,6 +56,7 @@ public: { fps = 0; fps3d = 0; + arm9load = 0; clicked = false; } @@ -71,7 +72,7 @@ public: HudCoordinates &hud(int i) { return ((HudCoordinates*)this)[i]; } void reset(); - int fps, fps3d; + int fps, fps3d, arm9load; bool clicked; }; diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index b3c7a1c9f..4b80542d7 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -1946,6 +1946,12 @@ static void execHardware_hstart_vblankStart() //trigger vblank dmas triggerDma(EDMAMode_VBlank); + + //tracking for arm9 load average + nds.runCycleCollector[nds.idleFrameCounter] = 1120380-nds.idleCycles; + nds.idleFrameCounter++; + nds.idleFrameCounter &= 15; + nds.idleCycles = 0; } static void execHardware_hstart_vcount() @@ -2232,7 +2238,9 @@ static /*donotinline*/ std::pair armInnerLoop( } else { + s32 temp = arm9; arm9 = min(s32next, arm9 + kIrqWait); + nds.idleCycles += arm9-temp; } } if(doarm7 && (!doarm9 || arm7 <= timer)) diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 31114bfe3..9fc2fcd9f 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -1277,8 +1277,7 @@ static void StepRunLoop_User() for(int i=0;i<16;i++) load = load/8 + nds.runCycleCollector[(i+nds.idleFrameCounter)&15]*7/8; load = std::min(100,std::max(0,(int)(load*100/1120380))); - //sprintf(txt,"(%02d%%) %s", load, DESMUME_NAME_AND_VERSION); - SetWindowText(mainLoopData.hwnd, DESMUME_NAME_AND_VERSION); + Hud.arm9load = load; } }