code: @Override
      public void start(Screen screen, Frame frame)
      {
          Check.notNull(screen);
          Check.notNull(frame);
  
          final Config config = screen.getConfig();
          final Resolution output = config.getOutput();
          final boolean sync = config.isWindowed() && output.getRate() > 0;
          if (maxFrameTimeNano < 0)
          {
              notifyRateChanged(output.getRate());
          }
  
          isRunning = true;
          while (isRunning)
          {
              if (screen.isReady())
              {
                  final long lastTime = System.nanoTime();
  
                  frame.update(Constant.EXTRP);
                  screen.preUpdate();
                  frame.render();
                  screen.update();
  
                  while (sync && System.nanoTime() - lastTime < maxFrameTimeNano)
                  {
                      Thread.yield();
                  }
  
                  frame.computeFrameRate(lastTime, Math.max(lastTime + 1L, System.nanoTime()));
              }
              else
              {
                  frame.check();
                  UtilSequence.pause(Constant.DECADE);
              }
          }
      }
docs: /*
  Loop