Leistungsabfall der Android-Animation, wenn das Gerät stillsteht, aber berührt wird

8

Meine App ändert die Eigenschaften einiger wirklich einfacher Ansichten (Rotation, Translation) pro Frame. Ich habe systrace verwendet, wie in den Android-Leistungsartikeln empfohlen, um zu überprüfen, ob Frames gelöscht wurden.

Etwas wirklich Unerwartetes kam auf. Wenn das Gerät still stand (selbst wenn ich den Bildschirm berührte), war die CPU-Auslastung höher, Warnungen auf Systrace erschienen und der rote Teil des GPU-Rendering-Profilers war länger. Als ich das Gerät wirklich schnell gedreht oder geschüttelt habe, war alles in Ordnung.

Im Folgenden finden Sie die Links zu den Ergebnissen. Shake ist, wenn ich die Geräte wirklich schnell gedreht habe, no_shake ist, als es auf meinem Schreibtisch saß.

Ich habe eine wirklich einfache Test-App erstellt, die eine einzelne Übersetzungs-Animation verwendet: Quellcode .

Systrace: kein Shake , shake

CPU-Nutzung:

GPU-Profiler:

Betrachtet man die Shake-Systrace, wo die Framerate glatt ist, warum haben die Zeilen HW_VSYNC_0 und HW_VSYNC_ON_0 keine Daten? Wie kann ich die CPU-Frequenz lesen? (Ich habe die Option aktiviert, als ich die Kurve aufgenommen habe).

In Bezug auf das Problem war meine Theorie, dass das Gerät die CPU-Frequenz senken könnte. Wie kann ich das in Systrace lesen? Ich benutzte eine 3rd-Party-App, um diese Hypothese zu testen und es ist wahr, wie unten gezeigt. Also, was kann ich tun, um dieses Problem zu vermeiden?

Warum macht das Gerät das? Zuerst dachte ich, dass das Gerät die Beschleunigungsmesser Daten verwendet, um zu verstehen, wenn es nicht verwendet wird, und dann die CPU-Frequenz reduziert. Aber um die CPU-Frequenz zu erhöhen, muss ich das Gerät sehr stark schütteln. Wenn man es wie eine normale Person hält, wird die CPU-Frequenz nicht erhöht.

Ich weiß, dass das eine Menge Fragen ist, aber nachdem ich alle verwandten Artikel über die Android-Grafik-Pipeline gelesen habe, habe ich keine Ideen mehr.

Das Problem trat bei einem Sony Xperia Z3 mit Android 5.1 auf. Das Problem konnte auf einem Nexus 5 mit Android 6 nicht reproduziert werden.

Aktualisieren

Es scheint, dass das Leistungsproblem durch die CPU / GPU-Drosselung verursacht wird. Das gleiche Gerät, Xperia Z3, mit Android 4.4, obwohl es die Taktgeschwindigkeit reduziert, führt es besser nach Systrace. Außerdem wird die Geschwindigkeit beim Schütteln nicht erhöht.

In Bezug auf die rüttelnde Geste, die erforderlich ist, um die CPU-Geschwindigkeit zu erhöhen, habe ich festgestellt, dass wenn ich versuche, das Gerät von Hochformat auf Querformat oder umgekehrt zu drehen, die CPU-Taktung ausgelöst wird (selbst wenn die App die Ausrichtung nicht ändert) . Also, ich denke, dass der Grund, warum diese Geste überwacht wird, ist, eine mögliche Orientierungsänderung zu beschleunigen .

    
Petrakeas 05.11.2015, 14:42
quelle

2 Antworten

3

Einige Beobachtungen ...

Mobile Geräte, insbesondere solche, die auf Qualcomm-Chips basieren, reduzieren die CPU-Taktraten aggressiv, um den Stromverbrauch zu minimieren. Manchmal sind ihre Richtlinien ein bisschen eigensinnig . Sie versuchen auch, die Anzahl der aktiven Kerne auf die Anzahl zu reduzieren, die für die aktuelle Arbeitslast erforderlich ist.

Betrachtet man den Systrace-Ausgang, nur in den "CPU n" -Zeilen, kann man sehen, dass die "Shake" -Spur alle vier Kerne beschäftigt, während die "no shake" -Spur oft mit 2 oder 3 auskommt. Die Belastung des Systems ist also geringer, wenn Sie es nicht schütteln. Abhängig davon, wie der CPU-Regler eingestellt ist, kann es andere Änderungen vornehmen, beispielsweise die Taktfrequenzen.

Sie können Änderungen an den Werten der verschiedenen Uhren sehen, indem Sie der Systrace-Befehlszeile das "freq" -Tag hinzufügen. Möglicherweise benötigen Sie ein gerootetes Gerät, um diese Informationen zu erhalten. Es sollte Änderungen an den Einstellungen für die CPU-Uhren, GPU-Bandbreite und andere arkane Elemente zeigen. Beachten Sie, dass nur Änderungen gemeldet werden. Daher sollten Sie nach dem Start der Aufnahme auf den Bildschirm tippen, um etwas zu aktivieren.

Ich bin mir sicher, dass Sie das wissen, aber für diejenigen, die das nicht tun: Wenn etwas N CPU-Zyklen ausführt und die CPU mit 100% Geschwindigkeit läuft, wird die Task in T Sekunden abgeschlossen. Wenn die CPU mit 50% Geschwindigkeit läuft, wird die Aufgabe in 2 * T Sekunden abgeschlossen. Die Werkzeuge, die die CPU-Auslastung messen, ermitteln dies, indem sie bestimmen, wie viel Prozent der Zeit die CPU im Vergleich zu Leerlauf in einem bestimmten Zeitraum läuft. Wenn das Tool 1 Sekunde lang überwacht und der Task für 1 Sekunde ausgeführt wird, ist das eine Auslastung von 100%. Wenn die CPU-Taktraten höher sind und die Task in 0,5 Sekunden beendet wird, ist das eine Auslastung von 50%. Der Vorteil niedrigerer Takte liegt darin, dass der Stromverbrauch nicht linear ist. Wenn Sie also N CPU-Zyklen verwenden, wird die Batterie durch die niedrigere und langsamere Konfiguration weniger belastet. Das Problem mit niedrigeren Taktraten besteht darin, dass die Ausführung der Vorgänge länger dauert und dass Ihre App Frames löschen kann. Aus diesem Grund erhöht das Berühren des Bildschirms die Uhren: Der CPU-Governor weiß, dass Sie mit dem Gerät interagieren, und konfiguriert das System so, dass die Interaktion so reibungslos wie möglich verläuft.

Sie sollten das VSYNC-Zeug ignorieren. Auf einigen Geräten verwendet SurfaceFlinger phasenverschobene Software-generierte VSYNC-Signale (google "dispsync" für Details). Er verwendet die Rückmeldung vom Display-Refresh-Fence, um zu entscheiden, ob es driftet, und schaltet die Hardware VSYNC kurz wieder ein, um sie bei Bedarf neu zu synchronisieren. (FWIW, die betreffenden Zeilen do haben Daten in den von Ihnen geposteten Traces.)

    
fadden 05.11.2015, 17:21
quelle
0

Verwenden Sie eine CPU-Overclock-App wie SetCPU (Sie brauche root) und setze den Governor der CPU auf etwas, das die CPU im Leerlauf nicht untertaktet, wie zum Beispiel Performance.

Vielleicht könnten Sie einfach die CPU-Mindestfrequenz etwas höher einstellen.

Hoffe, das hilft.

    
Nanoc 05.11.2015 14:49
quelle