Systrace 學習筆記

和你一起終身學習,這裏是程序員 Android

經典好文推薦,通過閱讀本文,您將收穫以下知識點:

一、Systrace 紅綠黃 frame 代表意義?

綠色: 一幀耗時在 1 個 vsync 週期內完成。
黃色: 一幀耗時在 1-2 個 vsync 週期內完成。
紅色: 一幀耗時在 2 個 vsync 週期以上完成。

二、Systrace 中 如何判斷丟幀?

SurfaceFlinger 是判斷丟幀的關鍵

1.SurfaceFlinger 的 UIThread 在每個 Vsync-SF 的時候是否沒有合成?
2.如果沒有合成操作,那麼需要看沒有合成的原因:

  • a.因爲 SurfaceFlinger 檢查發現沒有可用的 Buffer 而沒有合成操作?
  • b.因爲 SurfaceFlinger 被其他的工作佔用(比如截圖、HWC 等)?

3.如果有合成操作,那麼需要看對應的 App 的 可用 Buffer 個數是否正常:
如果 App 此時可用 Buffer 爲 0,那麼看 App 端爲何沒有及時 queueBuffer(這就一般是應用自身的問題了),因爲 SurfaceFlinger 合成操作觸發可能是其他的進程有可用的 Buffer .

三、Vsync 是什麼?

Vsync (Vertical Synchronization ) 垂直同期, 將 FPS 與 屏幕刷新率同步起來,避免撕裂現象發生。

四、Systrace 中 Input 事件有哪些關鍵字?

  • InputReader: System_server 中,負責從 EventHub 中讀取出 input 事件,並放入 InboundQueue
  • InboundQueue :存放input 事件,交給 InputDispatcher處理。
  • InputDispatcher: System_server 中,對input事件進行包裝分發
  • OutboundQueue:即將要被派發給對應 AppConnection 的事件
  • WaitQueue:已經派發給 AppConnection 但是 App 還在處理沒有返回處理成功的事件
  • PendingInputEventQueue:記錄的是 App 需要處理的 Input 事件
  • deliverInputEvent : App UI Thread 被 Input 事件喚醒
  • InputResponse:標識 Input 事件區域,這裏可以看到一個 Input_Down 事件 + 若干個 Input_Move 事件 + 一個 Input_Up 事件的處理階段都被算到了這裏

五、 抓取/打開 Systrace 的方法是怎樣的?

抓取:
1.Android SDK monitor
Android Device Moniter -- capture system wide trace using Android systrace
2.手機開發者模式自帶
Developer Options --System Tracing ( 文件保存路徑:data/local/traces )
3.pyhton 命令
python systrace.py -o trace.html -t 77 gfx am input view wm res idle freq sched camera -b 102400 --time=10
打開:
chrome://tracing/
https://ui.perfetto.dev/#!/viewer

六、Systrace 中的線程狀態有哪些?

綠色: Running 運行中,點擊可查看 CPU 運行狀態,運行時間等。
藍色: Runnable 待運行,等待CPU調度,時間越長表示 CPU 調度越繁忙。
白色: Sleeping

至此,本篇已結束。轉載網絡的文章,小編覺得很優秀,歡迎點擊閱讀原文,支持原創作者,如有侵權,懇請聯繫小編刪除,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章