Verzögerung bei Animationsbehebung

Eine der größten Herausforderungen für App-Entwickler ist die Gewährleistung einer flüssigen, störungsfreien und störungsfreien Animation. Das ist besonders schwer zu beheben, wenn das System auch ressourcenintensive Hintergrundaufgaben ausführt. Es gibt keine einfache Möglichkeit festzustellen, ob eine Verzögerung von Ihrer Anwendung oder dem System verursacht wird. Es gibt jedoch ein Profiler-Tool, mit dem Sie die mögliche Quelle des unerwünschten Verhaltens identifizieren können.

Unter ChromeOS rendern

Eine abgestimmte App, wie ein Spiel, verwendet in der Regel doppelte Zwischenspeicherung, um die Reaktionszeit des Nutzers so kurz wie möglich zu halten. Dennoch gibt es viele Faktoren, die die Leistung beeinträchtigen können. Wenn das Rendern eines Frames beispielsweise zu lange dauert, ist das gerenderte Ergebnis nicht für den nächsten Zwischenspeichertausch bereit und folglich wird der vorherige Frame wiederholt.

Dann kann der Renderer nicht mit dem Rendern des nächsten Frames beginnen, was noch weitere Probleme verursacht. Dieses Szenario ist Entwicklern von Android-Mobilgeräten vertraut. Wenn eine App unter ChromeOS ausgeführt wird, ist der Kontext noch komplizierter.

Eine auf dem Desktop ausgeführte App wird nicht direkt im Display-Frame des Bildschirms gerendert. Die Daten werden stattdessen in einer Textur wiedergegeben. Normalerweise gibt es mehrere Apps, die ihre Grafiken jeweils als Textur rendern. Das System erstellt die Bildschirmansicht mit einem Compositor, mit dem alle Texturen zu einem einzigen Desktopbild kombiniert werden.

Der Compositor arbeitet transparent im Hintergrund. Es wird jedoch eine Ein-Frame-Zeitverzögerung eingeführt, um die Nutzung der GPU-Pipeline zu maximieren. Im Idealfall ist dies möglicherweise nicht erforderlich, aber es gleicht Schwankungen der Systemleistung aus und hilft, asymmetrische Lasten auszugleichen.

Wenn das Betriebssystem sehr hart arbeitet, kann die GPU zu klemmen sein. Die Darstellung eines Frames kann sich nach der Darstellung auf dem Bildschirm verzögern. Je nach Hardware verwendet das System möglicherweise eine vierfache Zwischenspeicherung zum Ausgleich. Selbst bei tieferem Zwischenspeichern kann es bei der Grafikpipeline zu Unterbrechungen kommen.

ARC-Grafik-Tracer

ChromeOS verfügt über ein Profiling-Tool, das zeigt, wie die Zwischenspeicher im System sickern, wann Speicherauslagerungen stattfinden, wie ausgelastet die CPU/GPU ist und was Ihre Anwendung zu einem bestimmten Zeitpunkt tut. Dies ist in der folgenden Abbildung dargestellt:

Profiler einrichten

Wenn Sie den Profiler verwenden möchten, müssen Sie M75 oder höher ausführen. Die besten Ergebnisse erzielst du mit einem Intel-Gerät.

Bevor Sie den Profiler verwenden, müssen Sie Ihrer Anwendung Traces hinzufügen. Fügen Sie Ihrem Code überall dort Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); hinzu, wo Sie einen Trace einfügen möchten. Verwenden Sie einen Event, der mit dem Präfix customTrace beginnt. Das Präfix wird nicht in der Trace-Nachricht angezeigt.

So richten Sie den Profiler ein:

  1. Aktivieren Sie den Entwicklermodus.
  2. Aktivieren Sie die Chrome-Einstellungen und das Tool zur Visualisierung von ARC-Grafikzwischenspeichern.
  3. Zu chrome://arc-graphics-tracing navigieren

Profiler ausführen

  1. Wählen Sie Bei Verzögerung beenden aus.
  2. Führen Sie die Android-App aus.
  3. Wenn die Android-App aktiv und im Fokus ist, drücken Sie Strg + Umschalttaste + G.

Bei einer Verzögerung wird ein Browserfenster geöffnet. Mit den Tasten W und S können Sie die Zeitachse vergrößern oder verkleinern.