当前位置: 首页 > news >正文

北京价格网站建设3d室内效果图制作公司

北京价格网站建设,3d室内效果图制作公司,上海市 建设执业资格注册中心网站,阳江市房产网目录 屏幕显示原理#xff1a; 显示刷新的过程 VSYNC机制具体实现 小结#xff1a; 屏幕显示原理#xff1a; 过程描述#xff1a; 应用向系统服务申请buffer 系统服务返回一个buffer给应用 应用开始绘制#xff0c;绘制完成就提交buffer#xff0c;系统服务把buffer数据… 目录 屏幕显示原理 显示刷新的过程 VSYNC机制具体实现 小结 屏幕显示原理 过程描述 应用向系统服务申请buffer 系统服务返回一个buffer给应用 应用开始绘制绘制完成就提交buffer系统服务把buffer数据提供给屏幕 这样屏幕就能显示应用绘制的显示数据了 如果只有一个缓存那么屏幕在还没有读完缓存数据的时候系统服务又在写缓存数据那么屏幕读取的这一帧数据其实就包含了两帧的数据显示出来的可能一半是第一帧一半是第二帧数据了。解决这个问题可以采用双缓冲区的方式。 这个操作过程大概是这样的缓存1用于系统服务写数据缓存2就用来给屏幕读取 当屏幕需要读完缓存1的数据后需要读取下一帧数据那么就把指针切换到缓存2来读取即可同理系统服务就往缓存1来写数据如此交替就使得缓存的读写独立开来互不影响了。 显示刷新的过程 安卓定义的是60Hz的刷新率就是每16ms屏幕的数据会刷新一次 那么我们分析一下显示刷新的过程 应用进行绘制然后由系统服务进行渲染并输出屏幕显示数据到缓存屏幕读取缓存数据进行刷新显示。 第1帧绘制渲染正常所以屏幕能够正常显示第1帧数据 第2帧没能在16ms内完成因此就无法提供这一帧屏幕数据给缓存所以屏幕也只能继续读取旧的数据也就是第1帧数据。我们从视图描述看第2帧的性能优化的不错远远小于16ms但是这一帧之所以会没能在16ms内完成绘制渲染提供缓存出来是因为这一帧绘制的比较晚导致这一帧还没有绘制完成就到了16ms了这就是掉帧。如果这样的情况多了就会让用户明显感受到卡顿。 该怎么解决这个问题呢答案是Vsync信号 如果有个Vsync信号来通知应用绘制那么这样就能实现每一帧都比较完美地在16ms内完成绘制渲染提供显示数据了。 这就是Vsync给应用和服务进行绘制渲染提供同步信号的基本原理了 VSYNC机制具体实现 上面讲解vsync原理的时候为了简单起见把绘制和渲染结合一起了实际上绘制和渲染是由不同的进程不同的硬件来处理的。在Android系统中绘制是由应用app来做的对应CPU的操作合成与渲染是由SurfaceFlinger完成对应的是GPU。现在的问题是一个Vsync信号只有1个怎么来同时对两个进程提供同步信号呢Android系统中的做法是一分为二就是把信号分为vsync-app和vsync-sf同时也引入一个指挥家Choreographer进行操作指导。 我们先从请求绘制开始 /frameworks/base/core/java/android/view/ViewRootImpl.java 1往消息队列插入SyncBarrier这是一个屏障把消息插入队列里就不可以处理普通消息等到这个屏障撤除了才可以进行普通消息的处理。对异步消息是不影响的。 一次Vsync周期只能触发一次requestLayout只会绘制一次 2往mChoreographer插入CallbackmTraversalRunnable就是一个异步消息需要紧急处理 Choreographer是与ViewRootImpl一起创建的 sThreadInstance是一个ThreadLocal在不同的线程去getInstance可以得到不同的Choreographer的对象 Callback是怎么加到Choreographer里面呢  /frameworks/base/core/java/android/view/Choreographer.java final long now  SystemClock.uptimeMillis();获取下一vsync的时间戳 dueTime就是从这个时间后延迟多久 mCallbackQueues[callbackType].addCallbackLocked(dueTime, action, token); 一个CallbackQueues队列不同的callbackType有不同的队列包含有3个参数 如果dueTime小于现在的时间戳那么就是说下一帧就要被处理的。直接调scheduleFrameLocked处理如果是大于下一次vsync的时间则需要通过handler发送一个异步消息等待处理。 代码可以看到跑在所在looper的线程的时候就会立刻调度vsync否则就尽快post一个消息去UI线程。所以就使用了Handler发送一个异步消息 当vsync来的时候就会调用这个FrameDisplayEventReceiver里面的timestampNanos就是这个vsync信号的时间戳 绘制的时候jitterNanos如果大于一个时间周期并且超过了SKIPPED_FRAME_WARNING_LIMIT的警告值就会给出一个警告应用主线程耗时操作。 上面是属于计算时间的阶段那么下一阶段就是一系列的回调阶段包括 从callbackqueue里面取出带有时间戳的callback进行处理 小结 应用层的View调用了requestLayout要重绘其实就是new了一个Choreographer丢到消息队列里面然后Choreographer没有马上去处理消息而是先是调用requestNextVsync函数向SurfaceFlinger请求下一个的vsync信号。然后SurfaceFlinger就会在下一个vsync信号来的时候通过postSyncEvent 向Choreographer发送一个通知Choreographer接收到通知后就会去处理消息队列里面的消息之前真正处理requestLayout的就是performTraversal这个方法开始进行遍历等一系列操作。
http://www.hkea.cn/news/14508584/

相关文章:

  • 服务专业的品牌建站公司接做名片的网站
  • 中山市网站开发中国互联网协会网站
  • 个人网站建设需求说明书17网站一起做网店怎么拿货
  • 成都网站建设方案服务电子商城网站设计
  • 阜阳网站建设电话网站开发html的题
  • 写网站开发代码河南省建设教育协会网站首页
  • 一个公司网站开发多少钱河北邢台特产
  • 专业做网站的人沙田镇网站建设公司
  • 想做一个网站传媒免费网站建设
  • 织梦做博客类网站如何在网站上做关键词
  • 博客网站开发流程电商网页设计实训报告
  • 网站建设研究课题移动端开发语言
  • 简书网站开发网页无法访问是怎么回事
  • 太原网站推广只选中联传媒网站的反链要怎么做
  • flash做网站的论文怎能建设个人网站
  • 网站产品推广研究院 网站建设
  • 美橙互联网站打不开凡客诚品失败的主要原因
  • 怎么看一个网站是由哪个公司做的建站用什么工具
  • 校级特色专业建设网站桂林网站设计
  • 苏州做网站公司找苏州聚尚网络网站 用户粘度
  • 不会代码可以做网站维护吗win7自建网站
  • 网站建设现在还有没有市场德阳网站网站建设
  • 长治网站制作一般多少钱wordpress js调用图片
  • 用模板建商城购物网站财经新闻最新消息
  • php做的购物网站系统下载社区文化建设
  • 北京企业官网网站建设报价厦门网站seo建设
  • 如何让网站显示404视频网站做cpa
  • 企业购 网站建设韶山网站建设
  • 网站备案不关站网页设计与制作哪家公司好
  • 网站公告栏代码吉林建设教育协会网站