J'essaie de déterminer (à moins de 1 ms) quand des retournements d'écran particuliers se produisent sur Android. Le chorégraphe se déclenche chaque fois qu'un cadre est retourné, mais ne permet pas de déterminer quel cadre est réellement affiché. Selon https://source.android.com/devices/graphics/architecture.html, il y a plusieurs couches dans le processus: le tampon de l'utilisateur, qui retourne à une file d'attente à triple tampon, qui retourne au déflecteur de surface, qui retourne au matériel. Chacune de ces couches peut potentiellement laisser tomber une trame, mais à ce stade, j'ai seulement déterminé comment surveiller la mémoire tampon de l'utilisateur. Existe-t-il un moyen de surveiller les autres tampons/retournements (en temps réel, sur un téléphone non-root, non personnalisé)?Déterminer les temps de retournement d'écran exact sur Android
J'ai observé des retards de trame inattendus sur le HTC M8 (environ 1 toutes les 5 minutes), mais le Nexus 7 ne semble pas avoir ce problème. Je mesure les retards en utilisant un Cedrus StimTracker (http://cedrus.com/stimtracker/) avec un capteur photo et le Lab Streaming Layer (https://github.com/sccn/labstreaminglayer). J'ai essayé d'utiliser eglPresentationTimeANDROID pour contrôler quand les écrans sont retournés, et cela n'a pas résolu le problème. Notez que j'utilise le ndk, mais je peux généralement utiliser l'interface JNI pour accéder aux fonctionnalités non ndk lorsque j'en ai besoin.
La raison pour laquelle je me soucie est d'utiliser Android pour les expériences psychologiques et neurologiques, où la précision de 1 ms est hautement souhaitable.
Merci Fadden. "Utiliser Choregorapher et extrapolation .... En utilisant eglPresentationTimeANDROID() .... cela devrait vous donner un timing fiable." C'est le test que j'ai fait. Malheureusement, il n'a pas abouti à un timing fiable sur le HTC M8. La latence typique change avec des valeurs d'extrapolation croissantes, donc je sais que j'utilise la fonction correctement. Malheureusement, systrace ne fonctionne pas sur le HTC M8. Voir http://stackoverflow.com/questions/32185412/unable-to-systrace-on-htc-one-m8-lollipop. Sans plus d'outils, nous pourrions avoir à mettre le HTC M8 sur une liste non recommandée pour la science. –
Chaque appareil Android est un flocon de neige spécial. Avec vos exigences, il pourrait être plus sûr de créer une liste blanche.Si vous êtes particulièrement motivé, vous pourrez peut-être rooter le M8 et installer un noyau activé par systrace, mais il y a une chance que vous remplaciez le composant qui cause l'instabilité, ce qui serait génial pour ce périphérique mais un peu vaincu le but. – fadden