VSYNC

Le signal VSYNC synchronise le pipeline d'affichage. L'écran le rendu de l'application, la composition SurfaceFlinger et le pipeline Composer (HWC) présentant des images à l'écran VSYNC synchronise heure à laquelle les applications s'activent pour commencer à afficher, l'heure à laquelle le SurfaceFlinger se réveille l'écran et le cycle d'actualisation de l'affichage. Cette synchronisation élimine le stuttering et améliore les performances visuelles des graphiques.

Le matériel génère des événements VSYNC et les envoie à SurfaceFlinger via le rappel:

typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData,
        hwc2_display_t display, int64_t timestamp);

SurfaceFlinger contrôle si le matériel génère des événements VSYNC ou non appel à setVsyncEnabled. SurfaceFlinger permet setVsyncEnabled pour générer des événements VSYNC afin de pouvoir être synchronisés avec le cycle d'actualisation de l'écran. Lorsque SurfaceFlinger est synchronisé avec cycle d'actualisation de l'affichage, SurfaceFlinger désactive setVsyncEnabled pour empêcher le matériel de générer des événements VSYNC. Si SurfaceFlinger détecte un différence entre le VSYNC réel et le VSYNC précédemment établi SurfaceFlinger réactive la génération d'événements VSYNC.

Décalage VSYNC

L'application de synchronisation et SurfaceFlinger effectuent les boucles de rendu vers le VSYNC matérielle. En cas d'événement VSYNC, le cadre N s'affiche à l'écran tandis que SurfaceFlinger commence la composition des fenêtres du cadre N+1. L'application gère une entrée en attente et génère la trame N+2.

La synchronisation avec VSYNC offre une latence constante. Il réduit les erreurs dans et SurfaceFlinger, et limite le décalage des écrans grâce à les uns les autres. Cela suppose que l'application et le SurfaceFlinger par frame les heures ne varient pas beaucoup. La latence est d'au moins deux frames.

Pour y remédier, vous pouvez utiliser des décalages VSYNC afin de réduire le volume d'entrée à affichage. la latence en envoyant le signal de l'application et de la composition par rapport au matériel VSYNC Cela est possible, car l'application et la composition prennent généralement moins de temps ne doit pas dépasser 33 ms.

Le résultat du décalage VSYNC est obtenu en trois signaux ayant la même période et le même décalage phase:

  • HW_VSYNC_0 : l'écran commence à afficher l'image suivante.
  • VSYNC : l'application lit l'entrée et génère le frame suivant.
  • SF_VSYNC : SurfaceFlinger commence la composition pour l'image suivante.

Avec le décalage VSYNC, SurfaceFlinger reçoit le tampon et compose le pendant que l'application traite simultanément l'entrée et l'affichage le cadre.

DispSync

DispSync conserve un modèle des événements VSYNC périodiques matériels d'une afficher et utiliser ce modèle pour exécuter des rappels à une phase spécifique ; par rapport aux événements VSYNC matériels.

DispSync est une boucle de verrouillage de phase (PLL) logicielle qui génère Signaux VSYNC et SF_VSYNC utilisés par le Chorégraphe et SurfaceFlinger, même si par rapport au VSYNC matériel.

Flux DispSync

Figure 1 : Flux DispSync

DispSync présente les caractéristiques suivantes:

  • Référence : HW_VSYNC_0.
  • Sortie : VSYNC et SF_VSYNC.
  • Feedback (Commentaires) : supprimez les horodatages des signaux de cloisonnement de Hardware Composer.

Décalage VSYNC/retrait

L'horodatage du signal pour la suppression de clôtures doit correspondre à VSYNC matériel, même sur les appareils. qui n'utilisent pas la phase de décalage. Sinon, les erreurs semblent plus graves qu'elles ne le sont. Les panneaux intelligents présentent souvent un delta qui marque la fin de la clôture. d'accès direct à la mémoire (DMA) pour afficher la mémoire, mais le bouton bascule d'affichage et HW VSYNC est quelque temps plus tard.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS est défini dans le BoardConfig.mk. Il est basé sur le contrôleur d'affichage et le panneau caractéristiques. Temps écoulé entre le code temporel de retrait de la clôture et le passage au VSYNC matériel se mesure en nanosecondes.

Décalages VSYNC et SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NS et Les SF_VSYNC_EVENT_PHASE_OFFSET_NS sont définies de manière prudente en fonction pour les cas d'utilisation à charge élevée, comme la composition GPU partielle lors de la transition de fenêtres ou lorsqu'il fait défiler une page Web contenant des animations dans Chrome. Ces décalages permettent un long délai d'affichage de l'application et un long temps de composition GPU.

Une latence de plus d'une milliseconde ou deux est perceptible. Pour minimiser la latence sans augmentation significative du nombre d'erreurs, intégrez des erreurs automatisées tests.