美文网首页
阅读《如何监测应用的 FPS ?》

阅读《如何监测应用的 FPS ?》

作者: 普通的程序员 | 来源:发表于2021-01-24 16:34 被阅读0次

    原文地址
    https://mp.weixin.qq.com/s/vJAonOhW79d9VXzvQlm1Gg

    image.png

    Choreographer [ˌkɔːriˈɑːɡrəfər]

    主要涉及view的绘制流程
    『View.invalidate() 的整个流程就走通了。总结一下:

    从 View.invalidate() 开始,最后会递归调用 parent.invalidateChildInParent() 方法。这里最顶层的 parent 是 ViewRootImpl 。ViewRootImpl 是 DecorView 的 parent,这个赋值调用链是这样的 ActivityThread.handleResumeActivity -> WindowManagerImpl.addView() -> WindowManagerGlobal.addView() -> ViewRootImpl.setView() -> View.assignParent() 。

    ViewRootImpl.invalidateChildInParent() 最终调用到 scheduleTraversals() 方法,其中建立同步屏障之后,通过 Choreographer.postCallback() 方法提交了任务 mTraversalRunnable,这个任务就是负责 View 的测量,布局,绘制。

    Choreographer.postCallback() 方法通过 DisplayEventReceiver.nativeScheduleVsync() 方法向系统底层注册了下一次 vsync 信号的监听。当下一次 vsync 来临时,系统会回调其 dispatchVsync() 方法,最终回调 FrameDisplayEventReceiver.onVsync() 方法。

    FrameDisplayEventReceiver.onVsync() 方法中取出之前提交的 mTraversalRunnable 并执行。这样就完成了整个绘制流程。』

    那么监控fps的重点
    就是Choreographer的FrameCallback ,其doFrame监听了vsync信号,那么新建一个
    callback继承Choreographer.FrameCallBack
    再由
    Choreographer.getInstance().postFrameCallback(callback)
    Choreographer.getInstance().removeFrameCallback(callback)

    image.png

    相关文章

      网友评论

          本文标题:阅读《如何监测应用的 FPS ?》

          本文链接:https://www.haomeiwen.com/subject/nfvmzktx.html