評估 CPU 和 GPU 影格的處理時間 (影格時間) 是瞭解應用程式效能及找出瓶頸的關鍵。使用 AGI 剖析應用程式時,系統分析器會提供追蹤記錄資料,方便您估算影格時間。
CPU 時間
在 AGI 中,您可以在系統設定檔的 CPU 追蹤中,查看 CPU 影格的總和使用中影格時間。
CPU 作業時間總計
如要測量 CPU 花費總時間,請選取時間範圍,其中包括連續影格提交事件之間的時間。影格提交事件為 eglSwapBuffers
(適用於 OpenGL) 和 vkQueuePresentKHR
(適用於 Vulkan)。
![多個 eglSwapBuffer 事件的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image1.png?authuser=19&hl=zh-tw)
eglSwapBuffer
事件。![vkQueuePresentKHR 事件的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image2.png?authuser=19&hl=zh-tw)
vkQueuePresentKHR
事件。測量結果是預估 CPU 作業時間總計,但不一定代表使用中的 CPU 作業時間。舉例來說,在受 GPU 限制的應用程式中,CPU 可能會等待 GPU 完成工作,再提交新的影格。如果 dequeueBuffer
、eglSwapBuffer
(適用於 OpenGL) 或 vkQueuePresent
(適用於 Vulkan) 事件佔用了大部分的 CPU 作業時間,就會發生這種情況。等待時間包含在 CPU 作業時間中,但不含使用中的 CPU 作業時間。
![這張螢幕截圖顯示 dequeueBuffer 和 eglSwapBuffer 事件期間出現大量閒置情形。](https://developer.android.google.cn/static/images/agi/long-images/image3.png?authuser=19&hl=zh-tw)
dequeueBuffer
和 eglSwapBuffer
事件期間大量閒置。使用中的 CPU 作業時間
使用中的 CPU 時間會決定 CPU 執行應用程式碼的時間,而這些時間未處於閒置狀態。
如要測量使用中的 CPU 時間,請查看 CPU 事件正上方的「Running」配量。計算兩個處於「Running」狀態的影格提交事件之間的追蹤記錄所有部分。請務必加入工作執行緒。
![兩段 CPU 作業時間的螢幕截圖,可用於測量使用中的 CPU 作業時間。](https://developer.android.google.cn/static/images/agi/long-images/image5.png?authuser=19&hl=zh-tw)
![螢幕截圖:多執行緒應用程式,且應用程式在主要執行緒處於閒置狀態。](https://developer.android.google.cn/static/images/agi/long-images/image6.png?authuser=19&hl=zh-tw)
測量使用中 CPU 時間的另一種方法,是查看 CPU 歷程中的應用程式配量。這些配量會指出 CPU 正在執行的時間,並與「Running」 配量相對應。
![這張螢幕截圖顯示與 CPU 追蹤相符的固定執行緒執行狀態。](https://developer.android.google.cn/static/images/agi/long-images/image7.png?authuser=19&hl=zh-tw)
為協助找出應用程式配量,您可以在應用程式中加入 ATrace 標記。這樣即可在系統分析器的 CPU 追蹤記錄中顯示標記。
![CPU 追蹤中 ATrace 標記的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image8.png?authuser=19&hl=zh-tw)
估算 GPU 影格時間
如要估算 GPU 影格時間,您可以在系統分析器中使用 GPU 配量或 GPU 計數器。使用 GPU 配量時,預估值會更加準確。
GPU 配量
如果系統分析器提供 GPU 配量資訊,您可以測量應用程式處理與單一影格相關的工作所花費的總時間,藉此取得非常準確的 GPU 影格時間資訊。
Mali 裝置
在 Mali 裝置上,GPU 配量具有「片段」、「非片段」,有時也會「補充非片段」軌跡。如果是較複雜的影格,片段和非片段作業會依序執行,因此,可以透過尋找使用中的 GPU 作業之間的間隔來區分某影格的工作。
如果您熟悉要提交至 GPU 的工作,建議您找出已提交的算繪傳遞模式,藉此瞭解影格開始和結束時間。
![多個連續執行的影格的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image9.png?authuser=19&hl=zh-tw)
![放大 AGI 放大個別影格工作的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image10.png?authuser=19&hl=zh-tw)
如果應用程式的 GPU 工作流程更加平行,您可以在每個切片的「Selection」窗格中尋找所有具有相同 submissionID 的影格時間。
如果是以 Vulkan 為基礎的應用程式,則可以使用多個提交內容來組合影格。使用 Vulkan 事件軌跡追蹤提交 ID,這個測試群組包含每次提交內容的配量。選取提交內容片段時,系統會醒目顯示與提交內容對應的所有 GPU 活動片段。
![平行處理 GPU 工作負載的螢幕截圖,其中使用單一影格上的作業可以與其他影格重疊。](https://developer.android.google.cn/static/images/agi/long-images/image11.png?authuser=19&hl=zh-tw)
![特定影格的多個 Vulkan 事件的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image12.png?authuser=19&hl=zh-tw)
Adreno 裝置
在 Adreno 裝置上,GPU 配量會顯示在「GPU Queue 0」軌跡中,而且一律會依序表示,因此您可以查看代表影格轉譯傳遞的所有配量,並使用這些片段測量 GPU 影格時間。
![多個連續執行的影格的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image13.png?authuser=19&hl=zh-tw)
![AGI 放大含有多個算繪通道的影格。](https://developer.android.google.cn/static/images/agi/long-images/image14.png?authuser=19&hl=zh-tw)
與前述的 Mali 情境類似:如果應用程式使用 Vulkan,則 Vulkan 事件測試群組會提供相關資訊,說明要提交哪些工作來執行影格。如要醒目顯示算繪通道,請按一下與影格相關聯的「Vulkan 事件」配量。
![以 Vulkan 為基礎的應用程式螢幕截圖,其中含有針對所選影格的 Vulkan 事件。](https://developer.android.google.cn/static/images/agi/long-images/image15.png?authuser=19&hl=zh-tw)
在某些情況下,GPU 影格邊界較難區分,這是因為應用程式受到大量的 GPU 限制。在這些情況下,如果您熟悉提交至 GPU 的工作,您可以識別用於轉譯傳遞的模式,並從該項資訊判斷影格邊界。
![這張螢幕截圖:高度受到 GPU 繫結的應用程式,具備可識別影格邊界的算繪通道。](https://developer.android.google.cn/static/images/agi/long-images/image16.png?authuser=19&hl=zh-tw)
GPU 計數器
如果追蹤記錄中沒有 GPU 切片資訊,您可以使用「GPU 計數器」軌跡估算 GPU 影格時間。
Mali 裝置
在 Mali 裝置上,您可以使用「GPU 使用率」測試群組,針對不會大量使用 GPU 的應用程式估算 GPU 影格時間。當應用程式的 GPU 資源較少時,其 GPU 活動會經常有高和低的 GPU 活動,而非表現一致的高活動。如要使用「GPU 使用率」軌跡估算 GPU 影格時間,請測量歷程中高活動時段的持續時間。
![Mali 裝置的 GPU 使用率和 GPU 佇列軌跡螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image17.png?authuser=19&hl=zh-tw)
如果應用程式耗用大量 GPU 資源,您可以使用「片段」和「非片段」軌跡來估算 GPU 影格時間。在「片段」和「非片段」測試群組的活動層級中尋找模式,即可取得影格邊界的粗略估計,並使用該範圍測量 GPU 影格時間。
![片段和非片段音軌的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image18.png?authuser=19&hl=zh-tw)
Adreno 裝置
在 Adreno 裝置上,如果應用程式不耗用大量 GPU,您可以採用與上一節 Mali 裝置相同的方式估算 GPU 影格時間。
![Adreno 裝置上 GPU 使用率和 GPU 佇列軌跡的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image19.png?authuser=19&hl=zh-tw)
如果應用程式較耗用大量 GPU,您可以使用「Vertex 操作說明/秒」和「片段操作說明 / 秒」軌跡來估算 GPU 影格時間。只要在這些軌道的活動層級中尋找模式,就能取得影格邊界的粗估預估值,並據此測量 GPU 影格時間。
![Vertex 操作說明 / 第二測試群組的螢幕截圖。](https://developer.android.google.cn/static/images/agi/long-images/image20.png?authuser=19&hl=zh-tw)
這些曲目可能會提供類似資訊:
- 陰影 / 秒
- 陰影 / 秒的片段
- % 時間陰影 Vertices
- 時間片段百分比