* 렌더링 처리 과정
(렌더링; 사람이 이해할 수 있도록 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
'iOS' 카테고리의 다른 글
[iOS] Git 명령어 (0) | 2023.11.28 |
---|---|
[iOS] 공부 링크 (ing...) (0) | 2022.02.07 |
[iOS] Swift 기본 문법 (YouTube - yagom) (0) | 2020.10.26 |
[iOS] Nine-Patch, 둥근모서리 이미지 소스 사용하기 (0) | 2020.10.20 |
[iOS] Warning 없는 Clean Code 만들기 (SwiftLint, Pods file) (0) | 2020.10.07 |