기존 안드로이드 프로파일 도구를 기반으로하는 응용 프로그램의 성능 문제를 감지하기 위해 FPS를 계산하고 싶습니다.performTraversals을 사용하여 Android에서 FPS를 측정 할 수 있습니까?
나는 Systrace에서 performTraversals의 길이를 기록 할 수 있다고 언급했다. 내가 아는 한 performTraversals는 프레임을 업데이트 할 때 대부분의 작업을 포함하는 측정, 레이아웃 및 그리기를 수행합니다. 따라서 PerformTraversals가 프레임을 업데이트하는 데 60 밀리 초가 걸릴지를 측정 할만큼 충분히 대표 할 수 있습니까?
또한 Systrace는 SurfaceFlinger에 소요되는 시간을 기록합니다. SurfaceFlinger는 렌더링 목적으로 사용되었지만 프레임의 정확한 시작점과 끝점을 알지 못합니다. SurfaceFlinger에서 프레임 속도에 소비 된 시간을 고려해야합니까? (SurfaceFlinger가 performTraversals보다 더 자주 수행하는 것을 관찰했는데, 이는 SurfaceFlinger가 반드시 performTraversals을 따르지 않을 수도 있음을 의미하며, 다른 시나리오에서도 트리거됩니다.)
P. 나는 sysdump gfxinfo에 대해 알고 있지만 128 프레임 (~ 2 초) 만 기록 할 수 있지만 원하는 것은 오래 지속될 수 있습니다.
안녕하세요! Fadden, 유익한 답변 주셔서 감사합니다. 현재 상황은 테스트중인 대부분의 앱에 대한 소스 코드가 없다는 것입니다. 나는 이것이 프레임 카운터 솔루션을 실현 불가능하게 만들 것이라고 생각합니다. 내가 원하는 것은 정확히 프레임 속도는 아니지만 Systrace의 데이터를 사용하여 타임 스탬프 정보로 잠재적 인 성능 문제를 감지 할 수 있습니다. 나는 performTraversals를 운영하면서 it 's를 통해 유골을 추측 할 수 있다는 것을 이해한다. SurfaceFlinger 스레드의 onMessageReceived 메서드도 10 밀리 초 이상 걸릴 수 있습니다. 윌 또한 프레임 속도에 영향을 줍니까? –
"gfx"및 "view"태그가 활성화되어 있다고 가정합니다. 이상적인 surfaceflinger는 거의 실행 시간이 없으며 모든 vsync에서 새로 시작됩니다 (배터리 수명을 향상시키기 위해 애니메이션 작업을하지 않으면 vsync 이벤트가 꺼지게됩니다).surfaceflinger가 느린 경우 대개 GPU 렌더링이 완료되기를 기다리고 있기 때문입니다. 일반적인 응용 프로그램의 경우보기 지속 시간을보고 느린 렌더링 프레임을보고 계층 뷰어를 사용하여 명백한 문제점을 확인할 수 있습니다. 사용 가능한 정보는 새로 출시 된 Android 4.3에서 훨씬 좋습니다. – fadden