我正在使用自定义视图画布绘图 (postInvalidate()) 和HardwareAcceleration进行简单的 2D 游戏。经过数周的性能分析,我决定通过 Interface Choreographer.FrameCallback将我的更新和绘图操作与 VSYNC 脉冲同步。我认为这是获得平稳运动的正确方法。
然而,我仍然经历波涛汹涌的运动。我用systrace对其进行了分析,发现这与我的 BufferQueue 有关。一旦双缓冲开始,帧时间就会超过 16 毫秒。我做了一些解释的跟踪截图:
整个draw操作等待SurfaceFlinger(消费者)的buffer释放,将自己新的空Buffer出列。
你能告诉我这是否是一种常规行为或可能是什么原因?