docs: final boolean onDrawFrame(float frameTime) {
          /*
          if (mCurrentTime < mStartTime)
          {
              mCurrentTime += frameTime;
              return true;
          }*/
          final int previousCycleCount = (int) (mElapsedTime / mDuration);
  
          mElapsedTime += (frameTime*animationSpeed);
  
          final int currentCycleCount = (int) (mElapsedTime / mDuration);
          final float cycleTime = (mElapsedTime % mDuration)+animationOffset;
  
          final boolean cycled = previousCycleCount != currentCycleCount;
          boolean stillRunning = cycled != true;
  
          if (cycled && mRepeatMode != GVRRepeatMode.ONCE) {
              // End of a cycle - see if we should continue
              mIterations += 1;
              if (mRepeatCount == 0) {
                  stillRunning = false; // last pass
              } else if (mRepeatCount > 0) {
                  stillRunning = --mRepeatCount > 0;
              } else {
                  onRepeat(frameTime, currentCycleCount);
                  // Negative repeat count - call mOnRepeat, if we can
                  if (mOnRepeat != null) {
                      stillRunning = mOnRepeat.iteration(this, mIterations);
                  } else {
                      stillRunning = true; // repeat indefinitely
                  }
              }
          }
  
          if (stillRunning) {
              final boolean countDown = mRepeatMode == GVRRepeatMode.PINGPONG
                      && (mIterations & 1) == 1;
  
              float elapsedRatio = //
              countDown != true ? interpolate(cycleTime, mDuration)
                      : interpolate(mDuration - cycleTime, mDuration);
  
  
              animate(mTarget, elapsedRatio);
          } else {
              float endRatio = mRepeatMode == GVRRepeatMode.ONCE ? 1f : 0f;
  
              endRatio = interpolate(mDuration, mDuration);
  
              animate(mTarget, endRatio);
  
              onFinish();
              if (mOnFinish != null) {
                  mOnFinish.finished(this);
              }
              
              isFinished = true;
          }
  
          return stillRunning;
      }