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

公司网建设单位百度优化是什么

公司网建设单位,百度优化是什么,贵州黔序科技有限公司,做网站难还是app难前景提要: 当HWComposer接收到Vsync信号时,唤醒DisSync线程,在其中唤醒EventThread线程,调用DisplayEventReceiver的sendObjects像BitTub发送消息,由于在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 i=0 ; i<count ; i++) {
        //回调每个图层onPreComposition方法
        if (layers[i]->onPreComposition()) {
            needExtraInvalidate = true;
        }
    }
    
    //当存在图层有变化,则发送invalidate消息
    if (needExtraInvalidate) {
        signalLayerUpdate(); 
    }
}

//图层是否发生变化是通过mQueuedFrames字段确定
bool Layer::onPreComposition() {
    mRefreshPending = false;
    return mQueuedFrames > 0 || mSidebandStreamChanged;
}

当Layer可见时会调用onFrameAvailable方法,对mQueuedFrames+1

代码部分

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.yidumall.com/news/5083.html

相关文章:

  • seo网站优化教程找一个免费域名的网站
  • 罗湖区网站公司西地那非片的功能主治和副作用
  • 做网站销售提成怎么算seopc流量排名官网
  • 甘肃省人民政府网站首页优化营商环境条例全文
  • 怎么查询网站是什么时候做的微信营销软件群发
  • 做网站推销手表阿里云建站费用
  • 云阳网站建设网站首页布局设计模板
  • 公关公司是干嘛的seo搜索引擎招聘
  • 网站建设套模板东莞做网络推广的公司
  • 网站建设付款方式苏州seo公司
  • 网站附件下载表格怎么做杭州网站推广找哪家
  • 怎么做网站不被发现职业技能培训网
  • seo教程自学seo关键词排名注册价格
  • 企业做网站被骗太原网站推广公司
  • 做黄网站有哪些福州seo扣费
  • 重庆营销型网站开发公司电话最简单的营销方案
  • 如何制作外贸网站 wordpress百度用户服务中心人工电话
  • 南京行业网站建设互联网广告联盟
  • 在国外网站做中国旅游推广全网营销一站式推广
  • 打折网站建设教程下载网络销售就是忽悠人
  • 做网站衡水百度一下百度主页
  • 用dw做音乐网站系统的代码软文例文 经典软文范例
  • 免费推广网站入口202旺道seo系统
  • 网站建设wix樱桃bt官网
  • 购物网站建设投资预算电商seo是什么意思
  • 旅游产业网站app建设的市场分析seo搜索引擎优化人员
  • 企业网站建设的思路域名批量查询系统
  • 网站备案域名还是空间查网站域名
  • 厦门旋挖建筑公司网站网站推广是什么
  • 深喘旋磨做紧夹断妖精网站搜索引擎营销经典案例