docs: @Override
      public void doFrame(long timestampNanoseconds) {
          long frameIntervalNanoseconds = timestampNanoseconds - lastTimestampNanoseconds;
  
          // To detect a dropped frame, we need to know the interval between two frame callbacks.
          // If this is the first, wait for the second.
          if (lastTimestampNanoseconds != NEVER) {
              // With no dropped frames, frame intervals will roughly equal the hardware interval.
              // 2x the hardware interval means we definitely dropped one frame.
              // So our measuring stick is 1.5x.
              double droppedFrameIntervalSeconds = hardwareFrameIntervalSeconds * 1.5;
  
              double frameIntervalSeconds = frameIntervalNanoseconds / 1_000_000_000.0;
  
              if (droppedFrameIntervalSeconds < frameIntervalSeconds) {
                  playTickSound();
  
                  if (areHapticsEnabled) {
                      playTickHaptics();
                  }
              }
          }
  
          lastTimestampNanoseconds = timestampNanoseconds;
          Choreographer.getInstance().postFrameCallback(this);
      }