iOS

[iOS] Rendering

빨간체리반지 2020. 12. 31. 09:34

* 렌더링 처리 과정

(렌더링; 사람이 이해할 수 있도록 2D/3D 로 형상화하는 것)

 

우선 iPhone/iPad 의 평균 주사율(refresh rate, FPS)은 60Hz 이다.

(요즘 신형으로 나오고 있는 아이패드 프로나 아이폰12 같은 기기는 120Hz 까지도 나온다고 한다..!)

 

주사율은 1초당 refresh 하는 횟수. 즉, 주사율이 높을수록 화면 갱신이 자주 일어나 더 스무스하게 화면을 이용할 수 있다.

그리고 각각의 refresh 마다 렌더링이 반복될 수 있다.

 

 

'프레임 버퍼' 라는 디스플레이의 비트맵 정보를 저장하는 메모리 공간이 있는데,

렌더링 된 결과가 이 공간에 저장되며, 이 공간에 저장된 값은 화면 디스플레이에 사용된다.

그렇다고 해서 1초에 60번씩 render 되는 것은 아니다.

(내용이 변경되지 않으면 re-render 하지 않음.)

 

즉 다시 정리하면,

frame buffer 를 1초에 60번씩 조회해 화면을 디스플레이 한다.

변경된 내용이 있는 경우 렌더링을 처리하고, 처리된 bitmap 은 frame buffer 에 저장된다.

라고 이해하면 된다.

 

 

 

그렇다면 렌더링은 어디에서 실행되는가?

Render Server 라는 별도의 프로세스가 존재한다.

OpenGL / Metal 을 사용해 GPU 로 처리가 된다.

 

CA(Core Animation) 은 변경 사항들을 하나의 transaction 으로 묶어,

내용을 인코딩한 후, render server에 commit 한다.

(Render Server 에 commit 된 transaction 은 GPU 를 통해 디스플레이 됨.)

 

 

 

사용자의 상호작용 처리, 시스템 이벤트 처리, DB/파일 접근, 기타 작업 들로 프레임드랍이 일어날 수 있고

아래의 4가지 전략으로 성능을 향상시킬 수 있다.

 

1. 컨텐츠 미리 준비하기

2. 프레임워크 사용하기

3. 다른 방식으로 접근하기

4. 그래픽 복잡도 낮추기

 

 

 

 

 

 

 

(참고 - Rendering performance of iOS apps)

https://red-cherry-ring.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

 

(참고 - CATransaction in Depth)

https://www.calayer.com/core-animation/2016/05/17/catransaction-in-depth.html