Systrace
준비작업
- Tools -> Android -> Android Device Monitor를 실행한다.
- 아래와 같은 팝업이 뜬다면 YES를 선택한다.(안뜨면 다음단계부터 진행)
- Android Device Monitor가 떴으면, 오른쪽 상단에서
DDMS 탭 선택
- 만약 탭이 없다면, 그림에서 표시된 부분의 가장 왼쪽 버튼(
Open Perspective)를 선택하여 DDMS를 선택한다.
- 왼쪽의
Device 탭에서 디바이스이름과 밑으로 현재 실행중인 프로세스목록이 뜨는것을 확인한다. 분석할 프로세스를 선택한 후에, 스크린샷에 표시된 버튼(Systrace)을 클릭한다.
- Systrace버튼을 클릭하면 다음의 팝업이 뜨는데, Trace 시간, 버퍼크기, 측정항목 들을 변경할 수 있다. 적절한 값을 설정한 후에 OK 를 선택한다.
- Destination File : Trace 결과는 html 파일로 저장되는데, 그 파일이 저장될 경로를 선택한다.
- Trace duration : Trace 를 수행할 시간
- Trace Buffer Size : Trace 버퍼
- Enable Application Trace from : Trace를 수행할 프로세스
- Commonly Used Tags : 일반적으로 사용되는 항목들
- Advanced Options : 추가로 붐석할 항목들
- 앱을 이용한다.(분석하고자 하는 동작을 수행)
- 생성된 html 파일을 브라우저로 실행한다.
분석방법
- 도움말을 보고 분석툴 UI 숙지(스크린샷의 1번)
- 화면을 스크롤하여 Trace한 프로세스를 찾는다.(스크린샷의 2번)
- 해당 프로세스의 프레임을 확인한다.(스크린샷의 3번)
- 초록색 : 프레임 양호
- 노란색 : 프레임지연 다소 있음
- 빨간색 : 프레임지연 많이 있음
- 해당 프레임을 선택하면 하단의 영역(스크린샷의 4번)에서 대략적인 지연 원인을 확인할 수 있다.
- 프레임 외에, UI Thread 등 다른 영역에 표시된 부분을 선택해도 시간 / 설명 등 여러 정보를 확인할 수 있다.
Hierarchy VIewer
준비작업
- 개발할 컴퓨터에 환경변수로
ANDROID_HVPROTO=ddm을 추가한다. (이미 추가되었다면 다음단계부터 진행)
- Tools -> Android -> Android Device Monitor를 실행한다.
- 아래와 같은 팝업이 뜬다면 YES를 선택한다.(안뜨면 다음단계부터 진행)
- Android Device Monitor가 떴으면, 오른쪽 상단에서
Hierarchy Viewer 탭 선택
- 만약 탭이 없다면, 그림에서 표시된 부분의 가장 왼쪽 버튼(
Open Perspective)를 선택하여 Hierarchy Viewer를 선택한다.
- 왼쪽의
Windows 탭에서 디바이스이름과 밑으로 현재 실행중인 엑티비티목록이 뜨는것을 확인한다. 만약, 목록이 갱신되지 않았다면 Refresh 버튼 클릭!
- 확인할 앱은 반드시
debug모드로 수행되어야 한다.(build.gradle에서 debuggable 속성 true)
- 확인하고싶은 엑티비티를 더블클릭하면,
Tree View 앱에서 레이아웃 구조를 확인할 수 있다. 루트를 선택한 후에 아래 스크린샷에 표시된 버튼(Obtain Layout TIme)을 선택한다.
- 확인하고싶은 뷰를 선택한 후에, Measure, Layout, Draw에 걸린 시간과 그 시간의 정도를 나타내는 3개의 점을 확인한다.
- Measure : 자식뷰를 포함하여 선택한 뷰의 크기 결정 시간 (왼쪽 점)
- Layout : 자식뷰를 포함하여 선택한 뷰의 레이아웃 배치 시간 (중간 점)
- Draw : 자식뷰를 포함하여 선택한 뷰의 렌더링 시간 (오른쪽 점)
분석방법
- 리프노드, 혹은 자식뷰가 많지 않은 노드 중에 빨간점으로 표기된 노드를 찾는다. 대체적으로 이 뷰가 렌더링을 느리게한다.
Systrace, Traceview를 이용하면 추가정보를 더 얻을 수 있다.
- 자식뷰가 많은 노드이고 Measure가 빨간점으로 표기되었다면, 자식들의 노드를 살펴본다.
- 점이 노란색 / 빨간색 이더라도 실제로는 성능에 큰 영향을 미치지 않는 요소일 수 있다. 측정된 시간을 비교하면 도움이 된다.
Systrace, Traceview를 이용하면 추가정보를 더 얻을 수 있다.
- 루트 뷰노드는 모든 자식뷰가 완료되고 난 후에야 완료되므로, 일반적으로 Measure, Layout이 빨간점이고, Draw가 노란점이다.
- 20개 이상의 노드를 가진 뷰계층에서 Draw가 빨간점으로 표시된 리프노드가 있다면, 그 뷰는 Draw에 문제가 있으므로, onDraw 등의 Draw 메서드를 확인한다.