Core Animation Pipeline

2022. 5. 24. 21:59iOS 프레임워크

WWDC 2014 - Advanced Graphics and Animations for iOS Apps

Commit Transaction

  • Layout 단계: 레이어 정렬 및 위치와 색상을 정의 (layoutSubviews를 호출)
  • Display: draw메서드들이 접근하는 단계. 개발자들은 직접 호출을 못하며 setNeedsDisplay를 사용하여 접근해야 한다.
  • Prepare: Core Animation이 context를 내보내려고 할 때 image decoding과 같은 작업을 진행한다.
  • Commit: Core Animation이 layer들을 패키징하여 Render Server로 전송한다.

 

Render Server

Commit Transaction에서 받은 패키지들을 다시 분석하고 렌더링 트리로 deserialization 한다.

drawing instruction을 생성하고 VSync Signal에 맞춰 화면을 랜더링 하는 OpenGL을 호출한다

 

VSync Signal: 한 프레임이 시작될 때 시작 지점을 나타내는 신호

GPU

VSync Signal에 맞춰 OpenGL을 사용해 랜더링을 시작한다.

랜더링이 끝난 이후 Buffer에게 값을 전달한다.

 

Display

GPU에서 처리된 값을 Buffer로부터 받아 화면에 띄워준다.

 

위 파이프라인 과정은 1초당 60번 이루어진다.

만약 백그라운드 스레드에서 view를 변경할 경우 여러 스레드에서 위 파이프라인을 통해 뷰를 업데이트할 것이고, 위 작업은 매우 무거운 작업이기에 성능에 직접적인 영향을 끼칠 수 있어 유의해야 한다.

 

그래서 UI 업데이트는 메인 스레드에서만 이루어져야 한다.

참고 : https://ios-dev-skyline-23.tistory.com/entry/UI작업이-main-thread에서-이뤄져야하는-이유

 

UI작업이 Main Thread에서 이뤄져야 하는 이유

iOS에서 개발을 진행하다 보면, UI 업데이트와 관련된 모든 작업은 main thread에서 작업을 해야 한다는 걸 많이 마주치게 될 것이다. 항상 이에 관한 정확한 이유를 모르고 넘겼지만 이번 기회에 이

ios-dev-skyline-23.tistory.com

 

'iOS 프레임워크' 카테고리의 다른 글

SwiftUI - 조심스러운 첫 걸음  (0) 2023.11.30
NSLock  (0) 2022.05.25
CADisplayLink  (2) 2022.05.23
UI작업이 Main Thread에서 이뤄져야 하는 이유  (0) 2022.05.20
CGRect, CGSize, CGPoint에 대하여  (0) 2022.04.28