当一个新的帧在物理上呈现给人类观察者时,我如何获得精确的时间点?我更喜欢使用材料小部件,而不是dart:ui把应用程序放在一起。
这种努力的目的是测量人类的反应时间,这是心理学和认知科学的一种基本研究方法。人的反应时间是指屏幕/人视网膜上刺激的物理开始到人体反应的物理开始(即点击或点击)之间的时间跨度。反应的时间戳很容易得到,所以在这个问题中,我集中讨论刺激呈现时间点的近似值。
认知科学中的反应时间实验类似于简单的复古电脑游戏。一种方法是使用游戏框架,这与简单的动画没有太大区别。在颤振中,动画控制器是同步的刻录机的滴答,可以用来触发setState。帧的同步保证了时间测量的相对低方差,但当新的动画帧对人类观察者物理可见时,它不提供系统时间的绝对点。在调用setState和将修改后的小部件呈现到屏幕之间将有一个固定的时间间隔。
因此,有两项要求:
是否有满足这两种要求的方法?
发布于 2019-11-19 23:34:12
这真的取决于你到底需要有多精确。考虑到现代多任务操作系统的复杂性,我不认为你能够准确地知道新的框架何时出现--在软件和显示硬件本身,都有太多的变量需要考虑。
这可能并不重要,取决于你实验的性质。
您应该做的第一件事是验证测试设备。我的意思是,你可能需要找出一种方法来测量当颤振说帧已经完成的时候和屏幕上的物理帧之间的时间差。如果持续时间足够一致,则可以对数据进行更正。
我认为在颤振中获得帧时间的最好方法是SchedulerBinding中的回调。我想看看使用addPersistentFrameCallback
与addPostFrameCallback
相比在时间上的差异。从文档来看,addPostFrameCallback
似乎是最合适的:
此回调在框架期间运行,仅在持久框架回调(即主呈现管道被刷新时)之后运行。
您需要验证的另一件事是输入延迟(物理地点击屏幕和点击在应用程序中注册的点击之间的时间)。
同样地,所有这些绝对精度可能并不重要,取决于实验的种类。人的视觉反应时间为大约250毫秒。如果你在120赫兹的显示器上运行你的应用程序,那么单帧是8ms -所以你可以测量到+/- 3%,这是相当不错的。例如,如果你的实验是比较对不同视觉暗示的反应,那么绝对精度并不像每个线索的相对性能那么重要。
https://stackoverflow.com/questions/58941874
复制相似问题