我试图确定(在1毫秒内)何时在Android上发生特定的屏幕翻转。每当画面翻转时,编舞者都会触发,但无法确定实际显示的画面。根据https://source.android.com/devices/graphics/architecture.html,在这个过程中有几个层次:用户登陆缓冲区,它翻转到三重缓冲队列,翻转到表面抛掷,然后翻转到硬件。这些层中的每一层都可能会丢弃一帧,但此时我只确定如何监视用户的陆地缓冲区。有没有办法监视其他缓冲区/翻转(实时,在非根源,非自定义电话上)?在Android上确定确切的屏幕翻转时间
我在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 ms的精度非常可取。
谢谢法登。 “使用Choregorapher和推断....使用eglPresentationTimeANDROID()....应该让你得到可靠的时间。”这是我做的测试。不幸的是,它没有导致HTC M8的可靠时机。典型的延迟随着外推值的增加而改变,所以我知道我正确地使用了该功能。不幸的是,systrace在HTC M8上不起作用。请参阅http://stackoverflow.com/questions/32185412/unable-to-systrace-on-htc-one-m8-lollipop。如果没有更多的工具,我们可能不得不将HTC M8推荐到科学列表中。 –
每款Android设备都是特殊的雪花。根据您的要求,创建白名单可能更安全。如果你有特别的动机,你可以根植M8并安装一个支持systrace的内核,但是有可能你会替换导致不稳定的任何组件,这对于那个设备来说很好,但是有点失败目的。 – fadden