我想計算FPS來檢測基於現有Android分析工具的應用程序的性能問題。我可以使用performTraversals來測量Android上的FPS嗎?
我注意到,在Systrace上,它可以記錄performTraversals的長度。據我所知,performTraversals執行度量,佈局和繪製,其中包括更新框架時的大部分作業。那麼performTraversals是否足夠具有代表性,可以測量幀是否需要60 ms更新?
我還注意到Systrace記錄在SurfaceFlinger上花費的時間。我知道SurfaceFlinger用於渲染目的,但我不知道幀的確切開始點和結束點。我是否也應該考慮在SurfaceFlinger上花費的幀時間? (儘管我確實觀察到SurfaceFlinger比performTraversals執行得更頻繁,這意味着SurfaceFlinger可能不一定跟隨performTraversals,在其他情況下也會觸發它。)
P.S.我知道sysdump gfxinfo,但它只能記錄128幀(〜2秒),而我想要的可能會持續更長的時間。
嗨!法登,感謝您提供豐富的答案。我目前的情況是,我沒有針對大多數正在測試的應用程序的源代碼。我想這會使幀計數器解決方案不可行。我想要的可能不是幀頻,而是使用Systrace上的數據來檢測帶時間戳信息的潛在性能問題。我知道我可以通過performTraversals的運行itme推斷janks。似乎SurfaceFlinger線程上的onMessageReceived方法也可能需要超過10毫秒。這也會影響幀速率嗎? –
我假設你已啓用「gfx」和「view」標籤。理想情況下,surfaceflinger只需要很少的時間來運行,並在每個vsync上重新開始(假設有活動 - 如果沒有任何動畫可以延長電池壽命,則關閉vsync事件)。如果surfaceflinger速度較慢,通常是因爲它正在等待GPU渲染完成。對於典型的應用程序,您可以查看視圖持續時間以查看緩慢渲染幀,然後使用hierarchyviewer檢查是否存在明顯的問題。在新發布的Android 4.3中,可用信息要好得多。 – fadden