我正在试图确定Android上特定屏幕翻转发生的时间(精度为1毫秒)。Choreographer每次帧翻转时都会触发,但没有办法确定实际显示哪一帧。根据https://source.android.com/devices/graphics/architecture.html,该过程中有几个层次:用户空间缓冲区翻转到三重缓冲队列,再翻转到表面贴图器,最后翻转到硬件。这些层面中的每一个都可能丢失一帧,但目前我只确定了如何监视用户空间缓冲区。是否有办法监视其他缓冲区/翻转(在非Root、非自定义手机上实时)?
我在HTC M8上观察到意外的帧延迟(大约每5分钟1次),但Nexus 7似乎没有这个问题。我使用Cedrus StimTracker(http://cedrus.com/stimtracker/)和Lab Streaming Layer(https://github.com/sccn/labstreaminglayer)通过光电传感器测量延迟。我尝试使用eglPresentationTimeANDROID来控制屏幕翻转的时间,但这并没有解决问题。请注意,我正在使用ndk,但通常可以使用JNI来访问非ndk功能。
我关心的原因是为了在心理和神经学实验中使用Android,其中1毫秒的精度非常重要。