@Override public final synchronized void setFrame( final int[] nextframe, final int[] bgcolors, boolean dotcrawl) { // todo: stop running video filters while paused! // also move video filters into a worker thread because they // don't really depend on emulation state at all. Yes this is going to // cause more lag but it will hopefully get back up to playable speed with NTSC filter frametimes[frametimeptr] = nes.getFrameTime(); ++frametimeptr; frametimeptr %= frametimes.length; if (frametimeptr == 0) { long averageframes = 0; for (long l : frametimes) { averageframes += l; } averageframes /= frametimes.length; fps = 1E9 / averageframes; this.setTitle( String.format( "HalfNES %s - %s, %2.2f fps" + ((frameskip > 0) ? " frameskip " + frameskip : ""), NES.VERSION, nes.getCurrentRomName(), fps)); } if (nes.framecount % (frameskip + 1) == 0) { frame = renderer.render(nextframe, bgcolors, dotcrawl); render(); } }