一秒点击屏幕次数测试_安卓App性能专项测试流畅度深度解析

指标背景

流畅度,顾名思义是用户感知使用App页面时的流畅情况。

“App卡不卡”,这是用户最直接的感受。

但是要用量化之后的数据衡量流畅度,在Android平台这边并没有直接有效的方式/手段去监控。

帧率&刷新频率

首先需要了解到两个概念:

刷新频率(Refresh Rate)

代表屏幕在一秒内刷新操作的次数,这取决于硬件的固定参数,例如60HZ。

帧率(Frame Rate)

代表GPU在一秒内绘制操作的帧数,例如常见的24fps,60fps,单位是fps(每秒帧数),很多游戏里面也会有这个指标。

24fps&60fps

现在电影行业默认的规则帧率是需要24fps,除了一些极个别的电影超高帧率之外(如李安的比利林恩.中场战事达到超高帧率120fps)。

辣么有的同学就问了:是不是帧率越高越好。

这里可以给到你肯定的回答:是的!

就像显示器的分辨率一样,之前认为1080p足够了,现在用到了4K,5K之后才发现以前的真没法看。

当然支持高帧率也需要对应的硬件设备,emm..话题跑偏了,回到Android流畅度上来,现在Android平台App或者是游戏普遍需要达到60fps用户肉眼才能感觉到“不卡”。

咦?不是24fps吗?那么问题来了,为什么电影只需要24fps就能是流畅的效果,而App/游戏需要达到60fps?

动态模糊

首先小伙伴们可以看下这张图,设计功力较渣,大家见谅

950847c748651cde115f78a6800a47d6.png

第一部分为电影物体运动轨迹,不理解,没关系,再来看下这张图

32dab6ed2026e3ae9cda3132fc446b83.png

并不是电影不高清,而且主角在激烈的战斗啊!

怎么样,相信聪明如你应该懂了,电影每帧不仅会记录当前时间点的信息,还会记录物体的运行轨迹。所以我们看到是模糊的效果。

但是游戏/App的帧呢?

请看下半部分,每帧只会记下当前时间点的信息,并不会记录物体的运行轨迹,每一帧都是清晰的,经过GPU渲染加载出来的。

所以动态模糊也是为什么电影只需要24fps的一个原因,那么除了动态模糊还有别的因素会影响的吗?

有的!

帧间隔/垂直同步/Vsync

说到帧间隔这个名词大家可能比较陌生,垂直同步相信很多玩游戏的小伙伴在游戏的设置菜单有见过,那么他是用来做什么的呢?

还是来看下面这张图:

0dbc96484d8d7092c0a356c8e50449ae.png

可以看到在电影播放的时候,每帧的间隔时间都是相等的,过度非常平滑。

而在游戏帧/App帧,可能有些场景帧间隔时间较大。

(比如人民群众喜闻乐见的国民级手游王者荣耀在团战的时候)。

有些场景间隔时间较小(页面不复杂/简单应用场景)。

为什么会造成这个原因呢?

这得从App的渲染机制/原理讲起。

CPU负责将页面的布局/元素进行计算将数据推给GPU进行处理,GPU负责进行栅格化(也就是将UI元素绘制到屏幕上)。

所以帧间隔时间跟页面结构复杂程度相关,页面结构越复杂,CPU/GPU所需要的时间越多。

讲到这里,可能有些同学马上想到是不是可以有某种技术可以让帧间隔的时间保持一致?

没错,就是垂直同步!

系统会每间隔一段时间发送一个Vsync同步信号,当接收到了Vsync就会刷FrameBuffer(简单理解就是去刷新屏幕显示)。

所以有了垂直同步可以解决掉帧间隔不同步的问题。

但是事情往往不会这么简单的,有了垂直同步就可以高枕无忧了吗?并不会!

丢帧

虽然开启了垂直同步能够保证帧间隔时间相等,但是能够保证每帧都能够及时的渲染出来吗?

并不能,来看下面这张图:

16cf894469a8b6be0b41ecf5f3c8fae4.png

系统会每隔16ms去发送Vsync信号通知CPU/GPU可以开始渲染工作了,为什么是16ms?

机智如你应该能想到60fps的倒数就是16.67ms(省略后面的小数点)。

如果要能够达到60fps的话,那么就要求每一帧都应该在16ms之内绘制完毕,否则就出现了右边图里面的情况-丢帧!

16ms之内没有完成该帧的绘制,那么就必须要等到下次系统的Vsync信号过来了,中间经过的时间就是16ms*2(大致为34ms)。

而且丢帧也是App卡顿的根本原因!!!

好了,关于流畅度的解析就先到这里,下篇再给大家讲解怎么监控指标以及怎么测试的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

U盘安装Ubuntu三步走

需要工具: U盘、Ubuntu的ISO镜像、universal usb installer 1、下载Ubuntu (1) (2)我这里下载14.04版本 (3)我这里下载64位系统 下载后得到的是个torrent种子,双击后用迅雷下载即可 …

sdram 时钟相位_零基础学FPGA (二十五)必会! 从静态时序分析到SDRAM时序收敛(下篇)...

七、SDRAM工作时钟相位偏移计算本文引用地址:http://www.eepw.com.cn/article/279083.htm从上篇文章中我们知道,我们的数据是要经过一定的延时才会到达目标器件的,这个延时也就是相对于源寄存器的时钟发射沿的时间延时,数据在源寄…

星跃计划 | 新项目持续招募中!MSR Asia-MSR Redmond 联合科研计划邀你申请!

微软亚洲研究院与微软总部联合推出的“星跃计划”科研合作项目邀请你来报名!本次“星跃计划”报名再次新增了来自微软 ED (Experiences Devices) Applied Research 全球总部的新项目,欢迎大家关注与申请!还在等什么?加入“星跃计…

Linux服务器上监控网络带宽与监控性能命令大全

【51CTO精选译文】本文介绍了一些可以用来监控网络使用情况的Linux命令行工具。这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度。入站流量和出站流量分开来显示。一些命令可以显示单个进程所使用的带宽。这样一来,用户很容易发…

Android的AlertDialog详解

AlertDialog的构造方法全部是Protected的,所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法。 使用AlertDialog.Builder创建对话框需要了解以下几个方法: s…

workbench mysql mac_mysql workbench mac下载-mysql workbench mac 64位下载8.0.15 官方最新版__西西软件下载...

MySQL Workbench mac版是专为数据库架构师、开发人员和 DBA 打造的一个统一的可视化工具。MySQL Workbench 为数据库管理员、程序开发者和系统规划师提供可视化的Sql开发、数据库建模、以及数据库管理功能。MySQL Workbench 提供了数据建模工具、SQL 开发工具和全面的管理工具(…

C# 使用Awaiter

可以对任何提供 GetAwaiter 方法并返回 awaiter 的对象使用 async 关键字。awaiter 用 OnCompleted 方法实现 INotifyCompletion 接口。此方法在任务完成时调用。下面的代码片段不是在任务中使用 await,而是使用任务的 GetAwaiter 方法。Task 类的 GetAwaiter 返回一…

模板-1-模板类的特化

2019独角兽企业重金招聘Python工程师标准>>> 类模板的特化 语义: 表明该模板类在特殊的类型下具有不同的行为.类的定义,应该与模板类放入一个头文件中,告知编译器该特化类的存在;类成员的定义,应该放入源文件中.该特化类就与普通类一样,是一个实实在在存在的实体.语…

C# 内存法图像处理

内存法通过把图像储存在内存中进行处理,效率大大高于GetPixel方法,安全性高于指针法。 笔者当初写图像处理的时候发现网上多是用GetPixel方法实现,提到内存法的时候也没有具体实现,所以笔者在这里具体实现一下- -,望指…

mysql分组查询和子查询语句_6.MySQL分组聚合查询,子查询

自己的MySQL阅读笔记,持续更新,直到看书结束。数据库技术可以有效帮助一个组织或者企业科学、有效的管理数据,也是现在很多企业招聘数据分析师的必备要求之一。大家如果看过MySQL的书,也可以看我的知识导图做一个复习,…

ABP vNext微服务架构详细教程——分布式权限框架(下)

3公共组件添加公共类库Demo.Permissions&#xff0c;编辑Demo.Permissions.csproj文件&#xff0c;将 <Project Sdk"Microsoft.NET.Sdk"> 改为&#xff1a;<Project Sdk"Microsoft.NET.Sdk.Web">为Demo.Permissions项目添加Nuget引用Volo.Abp.…

ios开发第一步--虚拟机安装MAC OS X

暂时还没买Macbook&#xff0c;先用虚拟机练练手。 先说说准备工作&#xff0c;我是在win8下安装的&#xff0c;这个不是关键的&#xff0c;只要Vmware版本和MAC OS X版本确定就行了&#xff0c;win7下同样可以。 1、虚拟机Vmware10.0.0 下载地址 http://pan.baidu.com/s/1jGv…

算法学习笔记(三)-----各种基础排序问题

2019独角兽企业重金招聘Python工程师标准>>> 一、直接插入排序&#xff1a;是最简单的排序方法&#xff0c;算法简单来说就是可以把第一个数a[0]看做有序数组&#xff0c;那么a[1]要插入进来&#xff0c;对比&#xff0c;插入合适位置&#xff1b;然后a[0],a[1]是有…

mac之把打开终端设置快捷键为Ctrl+Alt+T

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程 1、在Automator.app中创建一个AppleScript Finder&#xff0d;>应用程序->Automator打开Automator.app&#xff0c;打开Automator后…

基础磁盘管理

一、设备文件Linux中设备类型分为字符设备与块设备&#xff0c;他们特点分别为&#xff1a;块设备特性&#xff1a;以“块”为单位进行存取&#xff0c;随机访问&#xff0c;例如磁盘字符设备特性&#xff1a;以“字节”单位进行存取&#xff0c;线性访问&#xff0c;例如键盘设…

HTML5 Canvas 画纸飞机组件

纸飞机模拟一个物体在规定设计轴线偏离方位。 1 //三角形2 function DrawTriangle(canvas, A, B, C) {3 //画个三角形,“A、B、C”是顶点4 with (canvas) {5 moveTo(A[0], A[1]);6 lineTo(B[0], B[1]);7 lineTo(C[0], C[1]);8 lineTo(…

OPPO R9凭创新赢得2000万销量,成2016年热销手机

2016年的手机市场虽然新闻不断但是整体状况并没有以往那么好&#xff0c;各方数据显示&#xff0c;2016年全年全球智能型手机出货量仅有2.3%的微幅增长&#xff0c;虽然中国市场的全年出货量通同比增长6%&#xff0c;但是比往年也大有不如&#xff0c;手机市场已从增量市场进入…

windows7 nginx php mysql_windows7配置Nginx+php+mysql的详细教程

最近在学习php&#xff0c;想把自己的学习经历记录下来&#xff0c;并写一些经验&#xff0c;仅供参考交流。此文适合那些刚刚接触php&#xff0c;想要学习并想要自己搭建Nginxphpmysql环境的同学。当然&#xff0c;你也可以选择集成好的安装包&#xff0c;比如 wamp等&#xf…

基于C#的计时管理器

问题我们使用各种系统时候会遇到以下问题&#xff1a;12306上购买火车票如果15分钟内未完成支付则订单自动取消。会议场馆预定座位&#xff0c;如果10分钟内未完成支付则预定自动取消。在指定时间之后&#xff0c;我需要执行一项任务。我之前做的很多系统&#xff0c;往往都是定…

HDU 2516 (Fabonacci Nim) 取石子游戏

这道题的结论就是&#xff0c;石子的个数为斐波那契数列某一项的时候&#xff0c;先手必败&#xff1b;否则&#xff0c;先手必胜。 结论很简单&#xff0c;但是证明却不是特别容易。找了好几篇博客&#xff0c;发现不一样的也就两篇&#xff0c;但是这两篇给的证明感觉证得不清…