Déboguer les à-coups d'animation

L'un des problèmes les plus difficiles pour les développeurs d'applications est de garantir une animation fluide, irréprochable et sans à-coups. Cela est particulièrement difficile à déboguer lorsque le système effectue également des tâches en arrière-plan qui consomment beaucoup de ressources. Il n'existe aucun moyen facile de déterminer si un à-coup est causé par votre application ou par le système. Cependant, un outil de profilage peut vous aider à identifier la source possible du comportement insatisfaisant.

Effectuer le rendu sur ChromeOS

Une application optimisée, comme un jeu, utilise généralement la double mise en mémoire tampon pour que le temps de réponse de l'utilisateur soit le plus bas possible. Cependant, de nombreux facteurs peuvent dégrader les performances. Par exemple, si le rendu d'une image prend trop de temps, le résultat n'est pas prêt pour le prochain échange de tampon. Par conséquent, l'image précédente se répète.

Le moteur de rendu ne peut alors pas commencer à afficher l'image suivante, ce qui pose encore plus de problèmes. Ce scénario est familier aux développeurs d'applications mobiles Android. Lorsqu'une application s'exécute sous ChromeOS, le contexte est encore plus compliqué.

Une application exécutée sur un ordinateur ne s'affiche pas directement dans le cadre d'affichage de l'écran. À la place, elle effectue le rendu de ses données dans une texture. Il existe généralement plusieurs applications, chacune affichant ses graphiques dans une texture. Le système construit la vue à l'écran à l'aide d'un compositeur pour combiner toutes les textures en une seule image de bureau.

Le compositeur opère de manière transparente en arrière-plan. Cependant, il introduit un délai d'exécution d'une seule image afin de maximiser l'utilisation du pipeline GPU. Dans l'idéal, ce n'est peut-être pas nécessaire, mais cela lisse les fluctuations des performances du système et permet d'équilibrer une charge asymétrique.

Lorsque l'OS travaille très dur, le GPU peut être pressé. Il peut y avoir un laps de temps entre l'affichage d'un frame et son affichage à l'écran. Selon le matériel utilisé, le système peut utiliser une mise en mémoire tampon quadruple pour compenser les pertes de revenus. Même avec une mise en mémoire tampon plus profonde, le pipeline graphique peut toujours présenter des problèmes.

Traceur graphique ARC

ChromeOS dispose d'un outil de profilage qui montre l'impact des tampons dans le système, le moment où les échanges de mémoire se produisent, l'activité du processeur/GPU et ce que fait votre application à un moment donné, comme illustré ci-dessous:

Configurer le profileur

Pour utiliser le profileur, vous devez exécuter la version M75 ou une version ultérieure. Pour de meilleurs résultats, utilisez un appareil Intel.

Avant d'utiliser le profileur, ajoutez des traces à votre application. Ajoutez Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); à votre code partout où vous souhaitez inclure une trace. Utilisez un Event commençant par le préfixe customTrace. Le préfixe n'apparaît pas dans le message de trace.

Pour configurer le profileur, procédez comme suit:

  1. Activez le mode développeur.
  2. Activez les paramètres de Chrome et l'outil de visualisation des tampons graphiques ARC.
  3. Accédez à chrome://arc-graphics-tracing.

Exécuter le profileur

  1. Sélectionnez Arrêter en cas d'à-coup.
  2. Exécutez l'application Android.
  3. Lorsque l'application Android est active, appuyez sur Ctrl+Maj+G.

En cas d'à-coups, une fenêtre de navigateur s'affiche. Utilisez les touches W et S pour zoomer et réduire la timeline.