SurfaceFlinger 傾印檔會提供特定時間的 SurfaceFlinger 快照。SurfaceFlinger 追蹤功能會依時間順序記錄狀態,提供寶貴的洞察資料,瞭解視窗在螢幕上的顯示方式,以及決定特定位置的觸控回應由哪個視窗接收。這項資訊對於排解問題至關重要,例如「應用程式沒有回應我的觸控操作」或「觀看影片時發生閃爍情形」。
使用主動模式收集追蹤記錄,或在擷取錯誤報告時從交易追蹤記錄產生追蹤記錄 (預設為 Droidfood 設定),以及傾印時,Winscope 的 SurfaceFlinger 檢視器會顯示這項資訊。
如要進一步瞭解追蹤記錄收集作業,請參閱「SurfaceFlinger (層級)」。
圖 1. SurfaceFlinger 追蹤記錄分析。
畫面左側會顯示圖層的 3D 檢視畫面。矩形檢視畫面會考量圖層界線、Z 順序、不透明度、相對 Z 和圓角。
階層方塊
分頁的中央區段會顯示圖層階層,並提供更多資訊的方塊,例如圖層之間的父項/子項關係,如下所示:
- V:識別顯示的圖層。
- RelZParent:識別具有 RelZ 子項的圖層。
- RelZ:識別具有 RelZParent 的圖層,並以 z 順序繪製為其階層。
- HWC:識別由硬體 Compositor 組成的圖層。
- GPU:識別 GPU 組成的圖層。
畫面右側會列出精選的屬性,以及所有可用圖層屬性的 proto 傾印。如要進一步瞭解 proto 傾印區段的功能,請參閱「屬性」。
精選房源
為方便偵錯,SurfaceFlinger 檢視器提供精選的屬性清單,以更有條理的格式呈現最常用的資訊:
圖 2. SurfaceFlinger 屬性。
這份清單包含下列類別。
瀏覽權限
這個區塊包含圖層顯示狀態的相關資訊,以及圖層未顯示的原因說明。本指南涵蓋的內容:
旗標:這些旗標可控制顯示狀態,例如 HIDDEN
和 OPAQUE
。
隱藏原因:說明圖層或介面為何在畫面上隱藏 (如適用),例如遭自身或父項隱藏,或沒有緩衝區可繪製。
遮蔽、部分遮蔽或覆蓋:
- 遮蔽:系統計算出目前圖層可見,但另一個不透明圖層繪製在該圖層上方,導致目前圖層不可見。Occluded 圖層上方的圖層是不透明的,也就是說,該圖層已設定
OPAQUE
標記,或像素格式不含 Alpha,或圖層上未設定 Alpha。 - 部分遮蔽:目前圖層部分可見,因為繪製在頂端的不透明圖層並未完全遮蓋該圖層。「Partially Occluded」圖層上方的圖層是不透明的,也就是說,
OPAQUE
旗標已設定,或是像素格式不含 Alpha,或圖層上未設定 Alpha。 遮蓋:目前的圖層完全或部分遭到不透明圖層遮蓋,但仍可能顯示在畫面上。「Covered」圖層上方的圖層不透明,也就是說,
OPAQUE
旗標未設定,或像素格式包含 Alpha,或 Alpha 已在圖層上設定。不過,如果是 SurfaceFlinger 追蹤記錄,系統會將「涵蓋」圖層顯示為可見,適用於 SurfaceFlinger 下方的圖層:圖 3. SurfaceFlinger 上的涵蓋圖層。
幾何和效果
本節說明目前圖層的所要求和計算幾何圖形與效果。
「要求」部分會顯示圖層上設定的屬性。相較之下,「計算結果」部分會顯示套用至圖層的屬性。這是因為幾何圖形和效果會沿著階層向下傳遞,並從父項元素繼承。
在圖 2 中,圖層要求將「圓角半徑」設為 0 像素。不過,其中一個父層將「圓角半徑」設為 97.419 像素,這是套用的值:
緩衝區
下列屬性會顯示圖層是否有緩衝區、緩衝區大小和轉換。
- 影格編號:應用程式建立時開始的遞增編號。
- 目的地影格:用於將緩衝區縮放至目的地影格定義的界限。
階層
下列屬性說明如何判斷圖層階層:
- Z 順序:在圖層階層中,Z 順序會決定圖層相對於同層級圖層的相對位置。z 值為 0 的圖層會位於父項上方。如果多個圖層共用相同的 z 值,系統會將圖層 ID 較高的圖層放在最上方。
- 相對父項:表示 z 順序中的相對父項層。子項不會沿用相對父項的任何屬性,隱藏旗標除外。
輸入
下列屬性包含可觸控區域和焦點的相關資訊:
- 使用項目裁剪觸控區域:使用圖層界線裁剪可觸控的區域。
- 將觸控區域替換為裁剪區域:使用目前圖層的裁剪區域做為可觸控區域。