---
title: "Core Animation Pipeline"
description: "Core Animation의 화면 렌더링 과정. Commit Transaction, Layout, Display, Render Server와 GPU 단계를 따라갑니다."
canonical: https://blog.skyline23.com/28
language: ko
published: 2022-05-24T21:59:31+09:00
modified: 2022-05-25T10:39:12+09:00
---

# Core Animation Pipeline

![](/blog-covers/render-pipeline-1536.webp)

![WWDC 2014 - Advanced Graphics and Animations for iOS Apps](/blog-assets/18ab47dd378130e5642a3117.webp)

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 업데이트는 메인 스레드에서만 이루어져야 한다.

참고 : [UI작업이 Main Thread에서 이뤄져야 하는 이유](/blog/25)
