안드로이드의 화면 프레임 성능을 측정할 수 있는 툴이 Jelly Bean(4.2.2) 개발자 옵션에 추가되었다. 이것을 통해서 화면에 얼마나 부드럽게 끊기지 않게 매끄럽게 그려지고 있는지에 대해 측정 할 수있다. (4.3부터는 화면에 실시간으로 직접 보여주는 기능도 추가되었다.)
#>adb shell dumpsys gfxinfo 패키지명
쉘스크립트 명령을 통해서 현재 실행되고 있는 앱의 프레임을 측정 할 수 있다.
아래와 같이 명령을 통해 앱의 프레임 상태를 덤프뜬것이다.
~ kmshack$ adb shell dumpsys gfxinfo com.kmshack.BusanBus Applications Graphics Acceleration Info: Uptime: 382691 Realtime: 382691 ** Graphics info for pid 2595 [com.kmshack.BusanBus] ** Recent DisplayList operations DrawDisplayList Save ClipRect DrawText RestoreToCount RestoreToCount DrawDisplayList DrawPatch Save ClipRect DrawDisplayList Save ClipRect DrawText RestoreToCount DrawDisplayList Save ClipRect DrawText RestoreToCount RestoreToCount DrawDisplayList DrawPatch Save ClipRect DrawDisplayList Save ClipRect DrawText RestoreToCount DrawDisplayList Save ClipRect DrawText RestoreToCount RestoreToCount DrawDisplayList DrawPatch Save ClipRect DrawDisplayList DrawDisplayList RestoreToCount DrawPatch Translate DrawBitmapRect Translate RestoreToCount DrawPatch RestoreToCount Caches: Current memory usage / total memory usage (bytes): TextureCache 104824 / 25165824 LayerCache 3735552 / 16777216 GradientCache 0 / 524288 PathCache 0 / 4194304 CircleShapeCache 0 / 1048576 OvalShapeCache 0 / 1048576 RoundRectShapeCache 0 / 1048576 RectShapeCache 0 / 1048576 ArcShapeCache 0 / 1048576 TextDropShadowCache 23525 / 2097152 FontRenderer 0 262144 / 262144 Other: FboCache 1 / 16 PatchCache 6 / 512 Total memory usage: 4126045 bytes, 3.93 MB Profile data in ms: com.kmshack.BusanBus/com.kmshack.BusanBus.activity.SearchMainActivity/android.view.ViewRootImpl@a6b576a8 Draw Process Execute 0.51 0.15 1.36 0.24 0.13 1.40 0.14 0.23 1.38 0.24 0.12 2.06 0.27 0.13 1.27 0.20 0.14 1.81 0.25 0.15 1.37 0.23 0.13 1.47 0.20 0.14 1.43 0.48 0.14 1.43 0.25 0.15 1.29 0.26 0.14 1.31 0.79 0.25 1.73 0.25 0.14 1.28 0.25 0.14 1.57 0.26 0.14 1.59 0.24 0.13 1.27 0.25 0.14 1.32 0.35 0.23 1.93 0.27 0.14 1.43 0.27 0.14 1.85 0.25 0.15 1.62 0.34 0.63 1.57 0.26 0.38 1.61 0.36 0.44 2.56 0.25 0.15 1.59 0.26 0.15 1.34 0.24 0.14 1.45 0.20 0.14 1.29 0.24 0.17 1.67 0.28 0.15 1.75 0.25 0.14 1.30 0.24 0.14 1.53 0.31 0.27 2.67 0.23 0.13 1.35 0.20 0.14 1.28 0.32 0.23 1.56 0.20 0.15 1.39 0.25 0.14 1.15 0.21 0.15 1.37 0.20 0.15 1.44 0.24 1.16 1.19 0.20 0.14 1.35 0.21 0.14 1.61 0.25 0.14 1.36 0.35 0.15 1.22 0.25 0.14 1.28 0.51 0.14 1.36 0.21 0.14 1.38 0.29 0.14 1.57 0.31 0.15 1.65 0.32 0.17 1.35 0.64 0.28 1.66 0.28 0.51 1.86 0.51 0.33 1.84 1.42 0.38 1.78 0.28 0.19 1.66 0.75 0.31 1.47 0.37 0.21 1.37 0.41 0.21 2.16 0.60 0.34 1.67 0.37 0.32 1.52 0.41 0.21 1.71 0.30 0.19 1.51 0.48 0.21 1.53 0.31 0.21 1.40 0.51 0.23 1.40 0.41 0.20 3.39 0.42 0.33 1.45 0.70 0.21 1.88 0.37 0.21 1.46 0.30 0.86 5.80 0.35 0.25 2.82 0.32 0.19 1.55 0.38 0.20 1.69 0.45 0.50 1.42 0.41 0.37 4.31 0.36 0.35 1.48 0.56 0.31 1.91 0.55 0.19 1.36 0.58 0.31 1.97 0.57 0.19 1.45 0.34 0.19 3.81 0.27 0.22 1.89 0.47 0.35 3.13 0.37 0.20 1.57 0.46 0.37 2.21 0.57 0.21 1.60 0.32 0.19 1.25 0.37 0.37 1.47 0.30 0.19 1.51 0.28 0.19 1.54 0.29 0.19 1.36 0.30 0.19 1.74 0.29 0.19 1.44 0.30 0.19 2.24 0.23 0.20 1.42 0.28 0.19 1.19 0.28 0.18 1.36 0.29 0.19 1.47 0.24 0.21 1.46 0.58 0.23 1.38 0.82 1.16 1.64 0.24 0.20 1.22 0.28 0.19 1.36 0.33 0.21 1.67 0.48 0.71 1.39 0.58 0.20 1.45 0.25 0.22 1.22 0.32 0.23 1.33 0.33 0.38 1.37 0.32 0.21 1.57 0.22 0.19 1.38 0.31 0.68 1.98 0.31 0.21 1.79 0.62 0.29 1.57 0.41 0.22 1.89 0.28 0.14 1.23 0.24 0.14 1.24 0.26 0.14 1.28 0.26 0.13 1.15 0.25 0.14 1.33 0.14 1.11 1.40 0.27 0.15 1.59 0.26 0.14 1.23 0.28 0.17 1.37 0.29 0.14 1.27 0.13 0.14 1.77 View hierarchy: com.kmshack.BusanBus/com.kmshack.BusanBus.activity.SearchMainActivity/android.view.ViewRootImpl@a6b576a8 136 views, 5.47 kB of display lists, 372 frames rendered Total ViewRootImpl: 1 Total Views: 136 Total DisplayList: 5.47 kB
가장 최근의 128프레임에 대한 정보들이다. Draw, Process, Execute에 대한 프레임을 그리는데 걸리는 시간을 측정하였다. 여기서 시간 정보를 좀 더 보기 편하게 하기위해 아래 URL을 이용하여 그래프로 보는것을 권한다.
https://docs.google.com/spreadsheet/ccc?key=0AuNkAshECJ2XdDVFa25CM2FJdFg4dEJSTFRHTEZ1eEE&usp=sharing
일반 적으로 사용자들이 화면이 끊김 없이 부드럽다고 인지하는 속도가 초당 60프레임이다. 이를 바탕으로 초당 60프레임이 나오기위해서는 1프레임당 1000/60 = 16ms이하로 나와야 한다. 참고로 FPS게임 개발시 60프레임을 목표로 제작된다.
여기서 예제로 분석한 앱은 1프레임당 4ms로 아주빠른 프레임을 보여 주고 있다. 만일 16ms가 넘거나 중간에 오래걸리는 시간이 나타나게 되면 스크롤시 끊김이나타나며 부드럽지 않다고 느껴질 것이며 성능적으로 튜닝이 필요한 부분이다.
하지만 화면을 움직이게 하면서 dump하기가 쉽지 않고, 최근 128프레임만 dump하기 때문에 측정하기가 어렵다. 하지만 4.3부터는 화면에 실시간으로 보여주는 기능도 있으니 이런 개발자도구를 이용해서 빠른반응을 가진 앱을 개발해보기 바란다.
'안드로이드 개발 > View' 카테고리의 다른 글
| ViewGroup setClipToPadding() 메서드의 비밀 (2) | 2014.01.07 |
|---|---|
| 안드로이드 페이스북홈 앱에 적용된 Rebound SpringSystem 기술 오픈소스로 공개 (1) | 2013.12.09 |
| 큰 화면에서의 풍부한 UI지원과 Layout 중첩을 낮추기 위한 새로운 레이아웃 GridLayout (2) | 2013.12.06 |