Android Dumpsys gfxinfo를 이용한 프레임 측정

안드로이드의 화면 프레임 성능을 측정할 수 있는 툴이 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부터는 화면에 실시간으로 보여주는 기능도 있으니 이런 개발자도구를 이용해서 빠른반응을 가진 앱을 개발해보기 바란다.   

댓글 남기기