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