Je travaille sur un simple jeu 2D avec un dessin de canevas personnalisé (postInvalidate()) et HardwareAcceleration. Après des semaines d'analyse des performances, j'ai décidé de synchroniser mes opérations de mise à jour et de dessin avec l'impulsion VSYNC via l'interface Choreographer.FrameCallback. Je pense que c'est la bonne façon d'obtenir des mouvements fluides.La double mise en mémoire tampon ralentit le rendu du cadre | analyse systrace
Cependant, je suis toujours en train de ressentir des mouvements saccadés. Je l'ai analysé avec systrace et j'ai remarqué que cela a quelque chose à voir avec ma BufferQueue. Dès que le double tampon est activé, le temps de trame dépasse les 16 ms. J'ai fait une capture d'écran de ma trace avec quelques explications:
à dequeue son propre nouveau tampon vide L'ensemble de l'opération de tirage au sort attend la libération de tampon du SurfaceFlinger (consommateur).
Pouvez-vous me dire si c'est un comportement normal ou quelle pourrait en être la raison?
Merci pour la réponse détaillée! J'ai décidé d'opter pour une implémentation OpenGL ES 1 avec GLSurfaceView. Je mesure maintenant l'heure delta dans chaque cadre dans la méthode onDrawFrame(). Une interpolation supplémentaire sur les derniers temps de trame (pour éliminer les gros "sauts de bégaiement") a été une grande amélioration. Maintenant, mon jeu fonctionne très bien! – methusa