【发布时间】:2016-02-04 23:45:49
【问题描述】:
我正在尝试确定(在 1 毫秒内)Android 上发生特定屏幕翻转的时间。每次帧翻转时,Choreographer 都会触发,但无法确定实际显示的是哪一帧。根据https://source.android.com/devices/graphics/architecture.html的说法,这个过程有好几层:userland buffer,翻转到三缓冲队列,再翻转到surface flinger,再翻转到硬件。这些层中的每一层都可能会丢帧,但此时我只确定了如何监控用户空间缓冲区。有没有办法监控其他缓冲区/翻转(实时,在无根、非自定义手机上)?
我在 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 毫秒的精度是非常理想的。
【问题讨论】:
标签: android performance android-ndk vsync surfaceflinger