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

快手评论点赞网站建设专业分站seo优化seo外包

快手评论点赞网站建设专业分站,seo优化seo外包,阿里云域名注册企业邮箱,温州 网站建设在《Android图形显示系统》没有介绍到帧同步的相关概念,这里简单介绍补充一下。 在图形显示系统中,图形缓存GraphicBuffer可以被不同的硬件来访问,如CPU、GPU、HWC都可以对缓存进行读写,如果同时对图形缓存进行操作,有…

       在《Android图形显示系统》没有介绍到帧同步的相关概念,这里简单介绍补充一下。

     在图形显示系统中,图形缓存GraphicBuffer可以被不同的硬件来访问,如CPU、GPU、HWC都可以对缓存进行读写,如果同时对图形缓存进行操作,有可能出现意想不到的效果。由于GPU的执行是异步的,向GPU发命令,CPU是不知道命令什么时候执行完的,如果GPU渲染的内容还没完成,图形缓存的内容可能是空的或者不完整的,此刻CPU就开始对它进行消费,读取出来的图形数据是有问题的。因此需要协商一种机制,保证同一时间只有一个硬件对图形缓存进行访问,如果GPU正在使用,CPU只能同步等待。

    在图层合成的过程中,也使用了同步机制,否则也不能正常显示。使用的是Fence的同步机制,Fence,是栅栏的意思,在CPU使用缓存的地方设置一个栅栏挡住,等GPU对该缓存的操作完成后,再通知把栅栏撤了,CPU就可以开始对缓存进行操作。下面以图层的合成过程来说明栅栏的使用:

下面以时间轴从左到右来说明Fence是如何防止同时对缓存进行访问的:
1)生产者通过dequeue申请到一个缓存,获得缓存的所有权和使用权
2)生产者通过GPU开始生产内容
3)生产者通过queue把缓存放进队列,不再拥有所有权,但是GPU还在使用,仍然拥有使用权。
4)消费者通过acquire获得缓存的所有权,但是生产者还拥有使用权,消费者不能对缓存进行操作。
5)GPU完成了所有工作,生产者释放使用权,消费者获得使用权。

    通过上面的流程可以看到,生产者和消费者对于缓存的操作在时间轴上是没有重叠的,并且相隔很近。为了体现Fence同步机制的优势,下面再看不通过Fence来进行同步的情况:

同步过程如下:
1)生产者通过dequeue申请到一个缓存,生产者获得所有权和使用权。
2)生产者通过GPU开始生产内容。
3)生产者等待GPU完成工作,释放使用权,通过queue释放所有权。
4)消费者通过acqure获得所有权和使用权,可以开始对缓存进行操作。

 通过上面的对比可以看到:
使用fence进行同步,生产者生产完图形缓存,消费者立刻能够消费;
不使用fence进行同步,生产者在渲染的过程中,CPU要等待GPU完成工作后才把缓存的所有权和使用权交给消费者,中间有一个比较大的时间差,正是这个时间差可能导致缓存不能及时显示出来,导致显示的不够流畅。

下面再结合图层合成的源码看Fence是如何进行同步的:

void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip,bool useIdentityTransform) const {status_t err = mConsumer->bindTextureImage();
}status_t BufferLayerConsumer::bindTextureImage() {return bindTextureImageLocked();
}
status_t BufferLayerConsumer::bindTextureImageLocked() {mRE.bindExternalTextureImage(mTexName, mCurrentTextureImage->image());// Wait for the new buffer to be ready.return doFenceWaitLocked();
}status_t BufferLayerConsumer::doFenceWaitLocked() const {if (!mRE.isCurrent()) {return INVALID_OPERATION;}if (mCurrentFence->isValid()) {if (SyncFeatures::getInstance().useWaitSync()) {base::unique_fd fenceFd(mCurrentFence->dup());if (!mRE.waitFence(std::move(fenceFd))) {}} }
}bool RenderEngine::waitFence(base::unique_fd fenceFd) {EGLint attribs[] = {EGL_SYNC_NATIVE_FENCE_FD_ANDROID, fenceFd, EGL_NONE};EGLSyncKHR sync = eglCreateSyncKHR(mEGLDisplay, EGL_SYNC_NATIVE_FENCE_ANDROID, attribs);(void)fenceFd.release();eglWaitSyncKHR(mEGLDisplay, sync, 0);EGLint error = eglGetError();eglDestroySyncKHR(mEGLDisplay, sync);return true;
}

    图形缓存绑定到纹理时并不马上返回,而是通过waitFence进入等待。Fence可以看成一个文件句柄,通过eglCreateSyncKHR创建同步对象,eglWaitSyncKHR开始等待。GPU完成所有指令,发出通知,eglWaitSyncKHR收到通知后返回,绘制流程可以继续往下走了。

http://www.hkea.cn/news/904344/

相关文章:

  • 如何用腾讯云主机做网站株洲发布最新通告
  • 中国建设银行官网站下载信息流广告投放公司
  • 合肥建站平台网络平台推广是干什么
  • 黄冈工程建设标准造价信息网优化工作流程
  • 怎么做服装外贸网站怎么去推广一个产品
  • 和各大网站做视频的工作总结软件推广赚佣金渠道
  • asp.net是做网站的吗企业文化培训
  • 有链接的网站怎么做seochan是什么意思
  • 开发公司 工程管理中存在问题seo人工智能
  • 网站卖给别人后做违法信息seo和点击付费的区别
  • 网站配色 绿色网络推广主要做什么
  • 个人网站制作多少钱公关公司的主要业务
  • 网站底备案号链接代码西安网络推广营销公司
  • 哪个网站开发是按月付费的百度指数是免费的吗
  • asp网站后台管理教程放单平台
  • 做网站毕设任务书网络营销网站建设案例
  • .net 企业网站 模版关键词seo深圳
  • 网站建设优化价格网站seo诊断
  • 网站设计详细设计有没有好用的网站推荐
  • 没有货源可以开网店吗网站更新seo
  • 淄博有做网站的吗百度搜索排名怎么收费
  • wordpress页面添加自定义字段木卢seo教程
  • 长寿网站制作保定seo排名外包
  • 域名和网站一样吗电商运营推广怎么做
  • css个人简介网站怎么做b2b网站免费推广平台
  • 网站建设中企动力上海百度广告投诉电话客服24小时
  • 深圳靠谱的电商公司正版搜索引擎优化
  • 自己如何做团购网站腾讯云建站
  • 怀化招标网站磁力狗bt
  • 佛山网站建设服务公司培训机构查询网