Die geschätzten Frame-Verarbeitungszeiten (Frame-Times) für CPU und GPU sind wichtig, um die Leistung Ihrer App zu verstehen und Engpässe zu finden. Wenn Sie eine App mit AGI profilieren, stellt System Profiler Tracedaten bereit, mit denen Sie die Frame-Zeiten schätzen können.
CPU-Zeiten
In AGI können Sie die gesamten und aktiven CPU-Frame-Zeiten im CPU-Track eines Systemprofils ansehen.
CPU-Gesamtzeit
Um die gesamte CPU-Zeit zu messen, die für die Verarbeitung aufgewendet wurde, wählen Sie den Zeitraum aus, der die Zeit zwischen aufeinanderfolgenden Ereignissen zum Einreichen von Frames umfasst. Die Ereignisse für die Frame-Übermittlung sind eglSwapBuffers (für OpenGL) und vkQueuePresentKHR (für Vulkan).
eglSwapBuffer-Ereignissen.
vkQueuePresentKHR-Ereignissen.Diese Messung ist eine Schätzung der gesamten CPU-Zeit,stellt aber nicht unbedingt die aktive CPU-Zeit dar. Bei GPU-gebundenen Apps wartet die CPU beispielsweise möglicherweise darauf, dass die GPU ihre Arbeit beendet, bevor sie einen neuen Frame sendet. Das passiert oft, wenn ein dequeueBuffer-, eglSwapBuffer- (für OpenGL) oder vkQueuePresent-Ereignis (für Vulkan) einen großen Teil der CPU-Zeit in Anspruch nimmt.
Die Wartezeit ist in der CPU-Gesamtzeit, aber nicht in der aktiven CPU-Zeit enthalten.
dequeueBuffer- und eglSwapBuffer-Ereignissen.
Aktive CPU-Zeit
Die aktive CPU-Zeit gibt an, wann die CPU den App-Code ausführt, ohne sich im Leerlauf zu befinden.
Um die aktive CPU-Zeit zu messen, sehen Sie sich die Running-Abschnitte direkt über den CPU-Ereignissen an. Zählen Sie alle Abschnitte des Traces zwischen den beiden Ereignissen für die Frame-Übermittlung, die sich im Status Wird ausgeführt befinden. Achten Sie darauf, dass Sie funktionierende Threads einfügen.
Eine weitere Möglichkeit, die aktive CPU-Zeit zu messen, besteht darin, sich die App-Slices in den CPU-Tracks anzusehen. Diese Abschnitte geben an, wann die CPU ausgeführt wird. Sie entsprechen den Abschnitten Wird ausgeführt.
Um App-Slices leichter zu identifizieren, können Sie Ihrer App ATrace-Marker hinzufügen. Diese werden dann im CPU-Track des System Profiler angezeigt.
GPU-Framezeiten schätzen
Um die GPU-Frame-Zeiten zu schätzen, können Sie entweder GPU-Slices oder GPU-Zähler im System Profiler verwenden. Die Schätzung ist genauer, wenn GPU-Slices verwendet werden.
GPU-Slices
Wenn System Profiler Informationen zu GPU-Slices verfügbar hat, können Sie sehr genaue Informationen zur GPU-Frame-Zeit erhalten, indem Sie die Gesamtzeit messen, die Ihre App für Aufgaben benötigt, die mit einem einzelnen Frame verknüpft sind.
Mali-Geräte
Auf Mali-Geräten haben GPU-Slices die Tracks fragment, non-fragment und gelegentlich supplementary non-fragment. Bei weniger komplexen Frames erfolgt die Arbeit mit Fragmenten und ohne Fragmente sequenziell. Die Arbeit eines Frames lässt sich also von der eines anderen unterscheiden, indem man nach Lücken zwischen aktiver GPU-Arbeit sucht.
Wenn Sie mit der Arbeit vertraut sind, die an die GPU gesendet wird, können Sie alternativ anhand des Musters der gesendeten Renderdurchläufe Informationen dazu erhalten, wann ein Frame beginnt und endet.
Bei Apps mit einem stärker parallelisierten GPU-Workflow können Sie die GPU-Frame-Zeiten ermitteln, indem Sie für jeden Slice im Bereich Selection (Auswahl) nach allen Frames mit derselben submissionID (ID für die Einreichung) suchen.
Bei Vulkan-basierten Apps können mehrere Einreichungen verwendet werden, um einen Frame zu erstellen. Behalten Sie die Einreichungs-IDs im Blick, indem Sie den Vulkan Events-Track verwenden, der für jede Einreichung einen Slice enthält. Wenn Sie einen Einreichungsabschnitt auswählen, werden alle GPU-Aktivitätsabschnitte hervorgehoben, die der Einreichung entsprechen.
Adreno-Geräte
Auf Adreno-Geräten werden GPU-Slices im Track GPU Queue 0 angezeigt und immer sequenziell dargestellt. Sie können sich also alle Slices ansehen, die die Rendering-Passes für einen Frame darstellen, und damit die GPU-Framezeiten messen.
Ähnlich wie im zuvor beschriebenen Mali-Szenario enthält der Vulkan Events-Track Informationen zu den Aufgaben, die zum Rendern des Frames übergeben werden, wenn die App Vulkan verwendet. Klicken Sie auf die mit dem Frame verknüpften Vulkan Events-Slices, um die Render-Passes hervorzuheben.
In einigen Szenarien sind die GPU-Framegrenzen schwieriger zu unterscheiden, da die App stark GPU-gebunden ist. Wenn Sie in diesen Szenarien mit der Arbeit vertraut sind, die an die GPU gesendet wird, können Sie das Muster erkennen, mit dem Renderdurchläufe ausgeführt werden, und anhand dieser Informationen die Framegrenzen bestimmen.
GPU-Zähler
Wenn in einem Trace keine Informationen zu GPU-Slices verfügbar sind, können Sie die GPU-Frame-Zeit anhand der Tracks für GPU-Zähler schätzen.
Mali-Geräte
Auf Mali-Geräten können Sie den GPU-Auslastungs-Track verwenden, um die GPU-Frame-Zeit für eine App zu schätzen, die nicht GPU-intensiv ist. Bei Apps, die weniger GPU-intensiv sind, gibt es regelmäßige Phasen mit hoher und niedriger GPU-Aktivität anstelle einer durchgehend hohen Aktivität. Um die GPU-Framezeiten anhand des Tracks GPU-Auslastung zu schätzen, messen Sie die Dauer der Zeiträume mit hoher Aktivität im Track.
Wenn die App GPU-intensiver ist, kann die GPU-Auslastung durchgehend sehr hoch sein. In diesem Fall können Sie die Tracks fragment queue utilization (Auslastung der Fragmentwarteschlange) und non-fragment queue utilization (Auslastung der Nicht-Fragmentwarteschlange) verwenden, um die GPU-Aktivität zu überwachen und die GPU-Framezeiten zu schätzen. Wenn Sie nach Mustern in Fragment- und Nicht-Fragment-Tracks suchen, können Sie eine grobe Schätzung der Framegrenzen erhalten und damit die GPU-Framezeit messen.
Adreno-Geräte
Wenn die App auf Adreno-Geräten nicht GPU-intensiv ist, können Sie die GPU-Frame-Zeiten auf dieselbe Weise schätzen wie bei Mali-Geräten im vorherigen Abschnitt.
Wenn die App GPU-intensiver ist und die GPU-Auslastung durchgehend hoch ist, können Sie die Tracks Vertex Instructions / Second (Vertex-Anweisungen / Sekunde) und Fragment Instructions / Second (Fragment-Anweisungen / Sekunde) verwenden, um die GPU-Framezeiten zu schätzen. Wenn Sie nach Mustern in den Aktivitätsstufen dieser Tracks suchen, können Sie grob schätzen, wo die Grenzen eines Frames liegen, und damit die GPU-Frame-Zeit messen.
Diese anderen Tracks können ähnliche Informationen enthalten:
- Gerenderte Eckpunkte pro Sekunde
- Schattierte Fragmente / Sekunde
- % Time Shading Vertices (Prozentsatz der Zeit-Shading-Knoten)
- % Time Shading Fragments (Prozentsatz der Zeit-Shading-Fragmente)