0

기존 안드로이드 프로파일 도구를 기반으로하는 응용 프로그램의 성능 문제를 감지하기 위해 FPS를 계산하고 싶습니다.performTraversals을 사용하여 Android에서 FPS를 측정 할 수 있습니까?

나는 Systrace에서 performTraversals의 길이를 기록 할 수 있다고 언급했다. 내가 아는 한 performTraversals는 프레임을 업데이트 할 때 대부분의 작업을 포함하는 측정, 레이아웃 및 그리기를 수행합니다. 따라서 PerformTraversals가 프레임을 업데이트하는 데 60 밀리 초가 걸릴지를 측정 할만큼 충분히 대표 할 수 있습니까?

또한 Systrace는 SurfaceFlinger에 소요되는 시간을 기록합니다. SurfaceFlinger는 렌더링 목적으로 사용되었지만 프레임의 정확한 시작점과 끝점을 알지 못합니다. SurfaceFlinger에서 프레임 속도에 소비 된 시간을 고려해야합니까? (SurfaceFlinger가 performTraversals보다 더 자주 수행하는 것을 관찰했는데, 이는 SurfaceFlinger가 반드시 performTraversals을 따르지 않을 수도 있음을 의미하며, 다른 시나리오에서도 트리거됩니다.)

P. 나는 sysdump gfxinfo에 대해 알고 있지만 128 프레임 (~ 2 초) 만 기록 할 수 있지만 원하는 것은 오래 지속될 수 있습니다.

답변

1

Systrace는 FPS를 측정하는 데는 유용하지 않지만 프레임 카운터 및 System.nanoTime()을 사용하면 쉽게 측정 할 수 있습니다. 그러나 목표물 프레임 속도를 치지 않으면, 왜 그렇게 생각 하는지를 도울 수 있습니다.

official docs은 유용한 포인터를 제공하지만 많은 정보가 있으며 상호 작용이 복잡 할 수 있습니다. 알아야 할 핵심 사항은 다음과 같습니다.

  • 장치 디스플레이 패널에 vsync 신호가 생성됩니다. VSYNC 라인에서 확인할 수 있습니다. 1과 0 사이에서 전환 할 때마다 새로 고침이 수행됩니다.
  • vsync는 다양한 창에 대한 수신 버퍼를 모아서 합성합니다 (OpenGL ES를 사용하거나 하드웨어 작성기를 통해 합성합니다).
  • 앱이 패널 새로 고침 빈도 (일반적으로 60fps)보다 빠르게 실행 중이면 화면 속보를 기다리는 동안 차단됩니다 (예 : eglSwapBuffers()). surfaceflinger가 버퍼를 획득하면 앱은 계속해서 다른 프레임을 생성 할 수 있습니다.
  • 화면 밖에서 렌더링하지 않으면 서페이스 플링커보다 빨리 진행할 수 없습니다.

Android 4.3 (API 18)부터 android.os.Trace 클래스를 사용하여 systrace 출력에 나만의 이벤트를 추가 할 수 있습니다. 추적 마커를 사용하여 그리는 방법은 매우 유익한 정보가 될 수 있습니다. 태그를 보려면 systrace로 태그를 활성화해야합니다.

60fps에서 실행하려면 렌더링이 16.7ms 미만으로 끝나야합니다. 이라는 단일 호출이 이보다 오래 걸리면 최대 속도에 도달하지 않을 것입니다.

+0

안녕하세요! Fadden, 유익한 답변 주셔서 감사합니다. 현재 상황은 테스트중인 대부분의 앱에 대한 소스 코드가 없다는 것입니다. 나는 이것이 프레임 카운터 솔루션을 실현 불가능하게 만들 것이라고 생각합니다. 내가 원하는 것은 정확히 프레임 속도는 아니지만 Systrace의 데이터를 사용하여 타임 스탬프 정보로 잠재적 인 성능 문제를 감지 할 수 있습니다. 나는 performTraversals를 운영하면서 it 's를 통해 유골을 추측 할 수 있다는 것을 이해한다. SurfaceFlinger 스레드의 onMessageReceived 메서드도 10 밀리 초 이상 걸릴 수 있습니다. 윌 또한 프레임 속도에 영향을 줍니까? –

+0

"gfx"및 "view"태그가 활성화되어 있다고 가정합니다. 이상적인 surfaceflinger는 거의 실행 시간이 없으며 모든 vsync에서 새로 시작됩니다 (배터리 수명을 향상시키기 위해 애니메이션 작업을하지 않으면 vsync 이벤트가 꺼지게됩니다).surfaceflinger가 느린 경우 대개 GPU 렌더링이 완료되기를 기다리고 있기 때문입니다. 일반적인 응용 프로그램의 경우보기 지속 시간을보고 느린 렌더링 프레임을보고 계층 뷰어를 사용하여 명백한 문제점을 확인할 수 있습니다. 사용 가능한 정보는 새로 출시 된 Android 4.3에서 훨씬 좋습니다. – fadden