2017년 6월 14일 수요일

안드로이드 UI 성능분석 툴 - Hierarchy VIewer

Hierarchy VIewer

준비작업

  1. 개발할 컴퓨터에 환경변수로 ANDROID_HVPROTO=ddm을 추가한다. (이미 추가되었다면 다음단계부터 진행)
  2. Tools -> Android -> Android Device Monitor를 실행한다.
스크린샷 2017-04-21 오후 12.21.51.png
  1. 아래와 같은 팝업이 뜬다면 YES를 선택한다.(안뜨면 다음단계부터 진행)
스크린샷 2017-04-21 오후 12.24.11.png
  1. Android Device Monitor가 떴으면, 오른쪽 상단에서 Hierarchy Viewer 탭 선택
    • 만약 탭이 없다면, 그림에서 표시된 부분의 가장 왼쪽 버튼(Open Perspective)를 선택하여 Hierarchy Viewer를 선택한다.
스크린샷 2017-04-21 오후 12.28.12.png
  1. 왼쪽의 Windows 탭에서 디바이스이름과 밑으로 현재 실행중인 엑티비티목록이 뜨는것을 확인한다. 만약, 목록이 갱신되지 않았다면 Refresh 버튼 클릭!
    • 확인할 앱은 반드시 debug모드로 수행되어야 한다.(build.gradle에서 debuggable 속성 true)
  1. 확인하고싶은 엑티비티를 더블클릭하면, Tree View 앱에서 레이아웃 구조를 확인할 수 있다. 루트를 선택한 후에 아래 스크린샷에 표시된 버튼(Obtain Layout TIme)을 선택한다.
스크린샷 2017-04-21 오후 1.59.10.png
  1. 확인하고싶은 뷰를 선택한 후에, Measure, Layout, Draw에 걸린 시간과 그 시간의 정도를 나타내는 3개의 점을 확인한다.
    • Measure : 자식뷰를 포함하여 선택한 뷰의 크기 결정 시간 (왼쪽 점)
    • Layout : 자식뷰를 포함하여 선택한 뷰의 레이아웃 배치 시간 (중간 점)
    • Draw : 자식뷰를 포함하여 선택한 뷰의 렌더링 시간 (오른쪽 점)
스크린샷 2017-04-21 오후 5.23.09.png

분석방법

  • 리프노드, 혹은 자식뷰가 많지 않은 노드 중에 빨간점으로 표기된 노드를 찾는다. 대체적으로 이 뷰가 렌더링을 느리게한다. SystraceTraceview를 이용하면 추가정보를 더 얻을 수 있다.
  • 자식뷰가 많은 노드이고 Measure가 빨간점으로 표기되었다면, 자식들의 노드를 살펴본다.
  • 점이 노란색 / 빨간색 이더라도 실제로는 성능에 큰 영향을 미치지 않는 요소일 수 있다. 측정된 시간을 비교하면 도움이 된다. SystraceTraceview를 이용하면 추가정보를 더 얻을 수 있다.
  • 루트 뷰노드는 모든 자식뷰가 완료되고 난 후에야 완료되므로, 일반적으로 Measure, Layout이 빨간점이고, Draw가 노란점이다.
  • 20개 이상의 노드를 가진 뷰계층에서 Draw가 빨간점으로 표시된 리프노드가 있다면, 그 뷰는 Draw에 문제가 있으므로, onDraw 등의 Draw 메서드를 확인한다.