이 가이드에서는 Systrace 보고서를 살펴보고 해석하는 방법을 설명합니다. Perfetto 보고서를 해석하려면 트레이스 프로세서 문서를 참고하세요.
일반적인 보고서의 요소
Systrace는 일련의 섹션이 포함된 출력 HTML 파일을 생성합니다. 보고서에는 각 프로세스의 스레드가 나열됩니다. 지정된 스레드가 UI 프레임을 렌더링하는 경우 타임라인에 따라 렌더링된 프레임도 보고서에 표시됩니다. 보고서를 왼쪽에서 오른쪽으로 이동하면 시간이 정방향으로 흐릅니다.
이 보고서에는 위쪽에서 아래쪽으로 다음과 같은 섹션이 포함되어 있습니다.
사용자 상호작용
첫 번째 섹션에는 기기의 화면을 탭하는 것과 같은 앱 또는 게임 내 특정 사용자 상호작용을 나타내는 막대가 포함되어 있습니다. 이러한 상호작용은 유용한 시간 마커 역할을 합니다.
CPU 활동
다음 섹션에는 각 CPU 내의 스레드 활동을 나타내는 막대가 표시됩니다. 막대는 앱 또는 게임을 포함한 모든 앱의 CPU 활동을 보여줍니다.
CPU 활동 섹션을 확장하여 각 CPU의 클록 주파수를 볼 수 있습니다. 그림 1은 축소된 CPU 활동 섹션의 예를 보여주며 그림 2는 클록 주파수를 표시하는 확장 버전을 보여줍니다.
시스템 이벤트
이 섹션의 히스토그램은 텍스처 수 및 특정 객체의 총 크기와 같은 시스템 수준의 특정 이벤트를 보여줍니다.
SurfaceView 라벨이 있는 히스토그램을 자세히 살펴봐야 합니다. 표시되는 수는 디스플레이 파이프라인으로 전달되어 기기 화면에 나타날 때까지 대기 중인 구성된 프레임 버퍼 수를 나타냅니다. 대부분의 기기는 이중 또는 삼중 버퍼링되기 때문에 이 수는 대개 0, 1 또는 2입니다.
VSync 이벤트 및 UI 스레드 스왑 작업을 포함한 Surface Flinger 프로세스를 설명하는 다른 히스토그램이 그림 3에 나와 있습니다.
프레임 표시
흔히 보고서에서 가장 크게 보이는 이 섹션에서는 여러 색상으로 된 선을 보여주며, 선 다음으로는 막대 스택이 나옵니다. 이러한 모양은 생성된 특정 스레드의 상태 및 프레임 스택을 나타냅니다. 스택의 각 수준은 beginSection()
호출을 나타내거나 앱 또는 게임에 정의한 맞춤 트레이스 이벤트의 시작을 나타냅니다.
각 막대 스택 위의 여러 색상으로 된 선은 시간 경과에 따른 특정 스레드의 상태 집합을 나타냅니다. 선의 각 세그먼트에는 다음 색상 중 하나가 포함될 수 있습니다.
- 녹색: 실행 중
- 스레드가 프로세스와 관련된 작업을 완료하고 있거나 중단에 응답하고 있습니다.
- 파란색: 실행 가능
- 스레드를 실행할 수 있지만 현재 예약되지 않았습니다.
- 흰색: 절전 모드 중
- 스레드가 뮤텍스 잠금에서 차단되어 스레드에 실행할 작업이 없습니다.
- 주황색: 중단 불가능 절전 모드
- 스레드가 I/O에서 차단되었거나 디스크 작업이 완료되기를 기다리고 있습니다.
- 보라색: 중단 가능 절전 모드
- 스레드가 다른 커널 작업(일반적으로 메모리 관리)에서 차단되었습니다.
단축키
다음 표에는 Systrace 보고서를 보는 동안 사용할 수 있는 단축키가 나열되어 있습니다.
키 | 설명 | |
---|---|---|
W | 트레이스 타임라인을 확대합니다. | |
A | 트레이스 타임라인에서 왼쪽으로 화면 이동합니다. | |
S | 트레이스 타임라인을 축소합니다. | |
D | 트레이스 타임라인에서 오른쪽으로 화면 이동합니다. | |
E | 트레이스 타임라인을 현재 마우스 위치의 중앙에 놓습니다. | |
M | 현재 선택사항을 프레이밍합니다. | |
1 | 현재 활성화된 선택 모델을 '선택' 모드로 변경합니다. 마우스 선택기 툴바에 표시되는 첫 번째 버튼에 해당합니다(오른쪽 이미지 참고). |
|
2 | 현재 활성화된 선택 모델을 '화면 이동' 모드로 변경합니다. 마우스 선택기 툴바에 표시되는 두 번째 버튼에 해당합니다(오른쪽 이미지 참고). |
|
3 | 현재 활성화된 선택 모델을 '확대/축소' 모드로 변경합니다. 마우스 선택기 툴바에 표시되는 세 번째 버튼에 해당합니다(오른쪽 이미지 참고). |
|
4 | 현재 활성화된 선택 모델을 '타이밍' 모드로 변경합니다. 마우스 선택기 툴바에 표시되는 네 번째 버튼에 해당합니다(오른쪽 이미지 참고). |
|
G | 현재 선택된 작업이 시작될 때 그리드를 표시합니다. | |
Shift + G | 현재 선택된 작업이 종료될 때 그리드를 표시합니다. | |
왼쪽 화살표 | 현재 선택된 타임라인에서 이전 이벤트를 선택합니다. | |
오른쪽 화살표 | 현재 선택된 타임라인에서 다음 이벤트를 선택합니다. |
성능 문제 조사
Systrace 보고서와 상호작용할 때 기록 시간 동안 기기 CPU 사용량을 검사할 수 있습니다. HTML 보고서를 탐색하는 데 도움이 필요한 경우 단축키 섹션을 참고하거나 보고서의 오른쪽 상단에서 ? 버튼을 클릭하세요.
다음 섹션에서는 성능 문제를 찾아 수정하기 위해 보고서의 정보를 검사하는 방법을 설명합니다.
성능 문제 확인
Systrace 보고서를 탐색할 때 다음 중 하나 이상을 실행하여 성능 문제를 보다 쉽게 확인할 수 있습니다.
- 시간 간격 주위에 직사각형을 그려서 관심 있는 시간 간격을 선택합니다.
- 눈금자 도구를 사용하여 문제 영역을 표시하거나 강조표시합니다.
- View Options > Highlight VSync를 클릭하여 각 디스플레이 새로고침 작업을 표시합니다.
UI 프레임 및 알림 검사
그림 4에 표시된 것과 같이 Systrace 보고서에는 UI 프레임을 렌더링하는 각 프로세스가 나열되고 각각의 렌더링된 프레임이 타임라인에 따라 표시됩니다. 초당 60개의 안정적인 프레임을 유지하는 데 필요한 16.6밀리초 내에 렌더링되는 프레임은 녹색 프레임 원으로 표시됩니다. 렌더링하는 데 16.6밀리초보다 오래 걸리는 프레임은 노란색 또는 빨간색 프레임 원으로 표시됩니다.
![프레임의 확대된 뷰](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-unselected.png?authuser=9&hl=ko)
프레임 원을 클릭하면 강조표시되고 알림을 비롯하여 시스템에서 이 프레임을 렌더링하기 위해 실행한 작업에 관한 추가 정보가 제공됩니다. 또한 이 보고서에는 해당하는 프레임을 렌더링하는 동안 시스템에서 실행 중이던 메서드가 표시됩니다. 이러한 메서드를 조사하여 UI 버벅거림의 잠재적 원인을 확인할 수 있습니다.
![문제가 있는 프레임이 선택됨](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected.png?authuser=9&hl=ko)
느린 프레임을 선택하면 보고서의 하단 창에 알림이 표시될 수 있습니다. 그림 5에 표시된 알림은 프레임의 주요 문제가 ListView
재활용 및 다시 결합 내에서 너무 많은 시간이 소요된다는 것임을 나타냅니다. 이 시간 동안 시스템에서 실행되는 작업을 자세히 설명하는 관련 이벤트의 링크가 트레이스에 있습니다.
이 도구가 트레이스에서 발견한 각 알림과 기기가 각 알림을 트리거한 횟수를 보려면 그림 6에 표시된 것처럼 창의 맨 오른쪽에 있는 Alerts 탭을 클릭하세요. Alerts 패널을 통해 트레이스에서 발생한 문제와 이러한 문제가 버벅거림 현상을 일으키는 빈도를 확인할 수 있습니다. 이 패널을 수정해야 하는 버그의 목록 정도로 생각해도 됩니다. 종종 한 영역에서 조금만 변경하거나 개선해도 전체 알림 세트가 삭제될 수 있습니다.
![알림 탭이 표시됨](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected-alert-tab.png?authuser=9&hl=ko)
UI 스레드에서 너무 많은 작업이 실행되고 있는 경우 다음 접근 방식 중 하나를 사용하여 너무 많은 CPU 시간을 소모하는 메서드를 알아보세요.
- 병목 현상을 발생시킬 수 있는 메서드를 알고 있는 경우 이러한 메서드에 트레이스 마커를 추가하세요. 자세히 알아보려면 코드에서 맞춤 이벤트를 정의하는 방법에 관한 가이드를 참고하세요.
- UI 병목 현상의 소스가 확실하지 않은 경우 Android 스튜디오에서 사용할 수 있는 CPU 프로파일러를 사용하세요. 트레이스 로그를 생성한 다음 CPU 프로파일러를 사용해 가져와서 검사할 수 있습니다.