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

手机网站模块福建厦门工程建设中心网站

手机网站模块,福建厦门工程建设中心网站,网站开发三剑客,html网页的代码大全前景提要#xff1a; 当HWComposer接收到Vsync信号时#xff0c;唤醒DisSync线程#xff0c;在其中唤醒EventThread线程#xff0c;调用DisplayEventReceiver的sendObjects像BitTub发送消息#xff0c;由于在SurfaceFlinger的init过程中创建了EventThread线程#xff0c…前景提要 当HWComposer接收到Vsync信号时唤醒DisSync线程在其中唤醒EventThread线程调用DisplayEventReceiver的sendObjects像BitTub发送消息由于在SurfaceFlinger的init过程中创建了EventThread线程并添加到MQ中进行创建Connection并监听对应的BitTube信息因此最后会在MQ中接收到通知调用Handler的发送消息到SF的主线程中SF的handlerMessage方法去处理该消息并执行对应的绘制流程。 SurfaceFliger绘制流程 第一步 回调每个图层onPreComposition方法 第一步preComposition中获取到所有参与绘制的layer图层信息并回调onPreComposition方法观察是否有图层发生变化通过方法返回值判断 【通过判断MQueuedFrames是否大于0代表图层发生变化在onFrameAvailable中会对这个字段1】 SurfaceFlinger可以控制某些Layer不参与绘制过程比如需要将悬浮按钮图层隐藏。 如果有则向MQ中发送invalidata消息SurfaceFliger的MQ接收到之后会调用 handleMessageTransaction()方法和handleMessageInvalidate() 方法根据是否刷新调用signalRefresh方法。 代码部分 void SurfaceFlinger::preComposition() {     bool needExtraInvalidate false;     const LayerVector layers(mDrawingState.layersSortedByZ);     const size_t count layers.size();     for (size_t i0 ; icount ; i) {         //回调每个图层onPreComposition方法         if (layers[i]-onPreComposition()) {             needExtraInvalidate true;         }     }          //当存在图层有变化则发送invalidate消息     if (needExtraInvalidate) {         signalLayerUpdate();      } } //图层是否发生变化是通过mQueuedFrames字段确定 bool Layer::onPreComposition() {     mRefreshPending false;     return mQueuedFrames 0 || mSidebandStreamChanged; } 当Layer可见时会调用onFrameAvailable方法对mQueuedFrames1 代码部分 void Layer::onFrameAvailable(const BufferItem item) {     { // Autolock scope         Mutex::Autolock lock(mQueueItemLock); if (item.mFrameNumber 1) {             mLastFrameNumberReceived 0;         } while (item.mFrameNumber ! mLastFrameNumberReceived 1) {             status_t result mQueueItemCondition.waitRelative(mQueueItemLock,                     ms2ns(500));         } mQueueItems.push_back(item);         android_atomic_inc(mQueuedFrames); //加1操作 //唤醒所有pending的回调方法         mLastFrameNumberReceived item.mFrameNumber;         mQueueItemCondition.broadcast();     }     //和上面一样的操作通知flinger图层发生更新     mFlinger-signalLayerUpdate();  } handleMessageTransaction方法的主要工作 遍历所有Layer来执行其doTransaction方法处理显示设备的改变处理layers的改变提交transaction并更新光标情况。 doTransaction工作 比较上次Layer的状态宽高和此次Layer的状态宽高判断Layer尺寸是否发生变化当尺寸发生变化时调整Surface的缓冲区大小并调用Layer的invalidate重新计算可见区域大小并接着同步当前Layer状态接着再更新光标情况 handleMessageInvalidate工作 获取所有的layer将更新的图层放入到layerWithQueuedFrames中接着取出调用各个图层的latchBuffer处理。 rebuildLayerStacks 获取每个显示屏中的所有可见图层列表计算每个图层的可见区域根据Z轴的深度把所有图层添加进来 重建所有显示屏的各个可见Layer并重新根据Z轴调整Layer图层的顺序 后续分析 setUpHWcomposer 将Layer添加到HWComposer中 doComposition postComposition HWComposer更新frameBuffer缓冲区通过转换后的屏幕坐标判断是局部区域更新还是整个屏幕都需要更新Display从缓冲区中取出数据进行显示 原文链接SurfaceFliger绘制流程 - 掘金 (juejin.cn)
http://www.hkea.cn/news/14441054/

相关文章:

  • 开发网站建设的问卷调查远洋国际建设有限公司网站
  • 谷歌网站为什么打不开合山网络推广
  • 竞价网站建设制作网站公司哪个好
  • 怎么在网站添加链接襄樊北京网站建设
  • 建公司网站需要多少钱排名第一的手机清理软件
  • 网站模板管理山东网架公司
  • 网站开发一般会使用框架吗电子商务考研最佳方向
  • 定海建设规划网站重庆做网站嘉兴公司
  • wordpress口令字典阳谷聊城网站优化
  • 医疗器械做网站到哪里先备案哪里找网站建设的兼职
  • 产教融合平台建设网站工业互联网平台评价方法
  • 西安做网站的公司手机网站开发者工具
  • 做网站需要学jq吗网站备案完电信
  • 程序员做网站外快网站建设的环境
  • 下载 网站样板网络推广主要做什么
  • 网站搭建php打不开成都小程序开发外包公司
  • 简述网站制作的一般流程莲都区建设局网站
  • 外国网站加速器公司logo设计案例
  • 网站建设费摊销域名解析到wordpress
  • 设计坞太原网站优化步骤
  • wordpress音乐插件百度重庆seo标准
  • 怎样推销网站建设WordPress443端口免备案
  • 需要企业网站开发门牌设计图片
  • 南通网站建设排名公司哪家好零基础学室内设计
  • 网站建设贰金手指下拉贰拾wordpress企业营销主题
  • 江苏建设监理协会官方网站wordpress网站托管
  • 免费的建站平台企业网站开发北京
  • 未来网站发展方向app生成链接
  • 网站飘窗怎么做孝感网站建设孝感
  • 网站托管要求html5 服装网站