Hitches란?

https://developer.apple.com/videos/play/tech-talks/10855/

APP과 유저의 interaction 사이에 scroll이나 animation이 두개 이상 프레임에서 같은 위치에 존재하는 것.

발생하는 이유: Render loop이 frame안에서 끝나지 못했을 경우 발생.

iphone → 16ms 마다 다른 화면을 보여준다.

VSYNC: 스크린의 화면이 변경되는 순간을 말함. 16ms 마다 VSYNC 발생

Render Loop 렌더링 과정

  1. App에서 user action 감지 - 첫번째 frame

    1. event mode - 사용자의 액션 발생 (timer, networking callback 도 포함.)
    2. commit mode - 사용자의 액션을 render 서버에 전달
  2. Render server에서 감지, UI가 여기서 변경 - 2번째 frame

    1. 다음 VSYNC에 commit 된 변경을 받아 render prepare phase에 들어감

      GPU에 그리기 위한 준비 과정

    2. render execute, 내가 보여줄 final image를 GPU에 그린다.

  3. 다음 frame에서 화면에 보여짐 - 3번째 frame

    GPU에 그린 화면을 사용자에게 보여주게 됨.

⇒ 즉, 유저의 반응이 화면에 보이기 까지는 2개의 frame이 필요, 이를 Double buffering이라고 말한다.

⇒ 1,2의 과정이 3개의 frame안에 일어나면 triple buffering (fallback mode)

각 render loop은 performance-sensitive / 다음 VSYNC라는 deadline이 존재

그리고 저 위의 3개의 파이프라인이 parallel하게 돈다.

hitches 종류