view流畅相关

GUP :图形处理器(英语:Graphics Processing Unit)理解成硬件计算;显卡的心脏

CPU :中央处理器(CPU,Central Processing Unit);理解成软件计算;CPU包括运算逻辑部件、寄存器部件和控制部件等。

刷新率:每秒屏幕刷新次数,手机屏幕的刷新率是60Hz

帧率(每秒传输帧数 FPS Frames Per Second) :GPU/CPU 在一秒内绘制的帧数; FPS计算公式: 1000ms/60frames 约等于 16.67ms/frames

V-Sync:显卡的输出帧数和屏幕的垂直刷新率相同,由于V-Sync只限制了显卡输出的帧速而非性能

撕裂:帧率>屏幕刷新率

撕裂的解决方法:双重缓冲区 + V-Sync

V-Sync:?? 理解成是一种信号,接收到这种信号的时候 Cpu/Gpu才开始渲染

why v-Sync:

  • 让帧的渲染更有规律性,防止掉帧
  • 如果帧渲染时间太快,可以防止FPS比屏幕刷新率高而导致的画面撕裂 (+双重缓冲区,防止撕裂)

单缓存 (android4.4之前)

双缓存 (ios)

三缓存 (开始>=android4.4)

丢帧:Android系统每隔16ms发出VSYNC信号,触发GPU对UI进行渲染,如果你的某个操作花费时间是24ms,

    系统在得到VSYNC信号的时候由于还没有准备好,就无法进行更新任何内容,
        那么用户在32ms内看到的会是同一帧画面(卡顿现象),即丢帧现象。

APP需要尽可能的超过24帧/秒,接近60帧/秒的速度,并且在使用的过程中保持这个速率,因此这意味着我们的程序需要在16.67ms内处理一幅画面内的所有事,并保持住这个状态。
计算公式:1000ms / 60 frames ≈ 16.67 ms/frames

会发生不流畅的原因:
其实动画也好电影也好其实是由一张张连续的图片连贯执行的效果,
当一张张图片切换的速度够快的时候就会欺骗了我们的眼睛,
以为这是连续的动作,反之如果切换速度不够快,就会被人给看穿,就是我们感觉的卡顿
想要达到流程的效果起码得每秒24帧。

计算流畅度 fps

  • 链接usb命令 : gfxinfo、 SurfaceFlinger
  • 丢帧计算: Choreographer.FrameCallback() (Called when a new display frame is being rendered)

一般检测页面卡顿的方式:
BlockCanary你值得拥有,

BlockCanary原理: 在MainLooperPrint中挂上Printer事件进行打印统计 http://blog.zhaiyifan.cn/2016/01/16/BlockCanaryTransparentPerformanceMonitor/

扩展:

SurfaceFlinger (C层):用来生成Surface,管理帧缓冲区 合成帧

Choreographer:

使用:

配合Application.ActivityLifecycleCallbacks去统计每个Activity的render次数,开始统计 结束统计,上报。�
以Page(page 是工程独有的一套机制)的维度进行统计,每个Page去通记录pageStart的时候的render次数,pageEnd记录render次数

你可能感兴趣的:(view流畅相关)