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

网站界面设计需要首先做市场研究吗腾讯云wordpress优化

网站界面设计需要首先做市场研究吗,腾讯云wordpress优化,北京建设网站合同下载,建筑公司企业理念SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候#xff0c;SurfaceFlinger是如何构建对应的Layer的主要工作有那些#xff01; 这里参考的Android源码是Android 13 aosp#xff01; app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,fo…SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候SurfaceFlinger是如何构建对应的Layer的主要工作有那些 这里参考的Android源码是Android 13 aosp app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,format等参数调用SurfaceComposerClient::createSurface createSurface调用SurfaceComposerClient::createSurfaceCheckedcreateSurfaceChecked调用mClient-createSurfacemClient是surfaceflinger client的代理mClient的初始化还没介绍后面单独写一篇介绍。 mClient-createSurface会调用到android12\frameworks\native\services\surfaceflinger\Client.cpp 中Client::createSurface Client::createSurface调用mFlinger-createLayer 核心逻辑代码如下: surfaceComposerClient-createSurface(String8(SurfaceTestDemo), resolution.getWidth(),resolution.getHeight(), PIXEL_FORMAT_RGBA_8888,ISurfaceComposerClient::eFXSurfaceBufferState,/*parent*/ nullptr);spSurfaceControl SurfaceComposerClient::createSurface(const String8 name, uint32_t w, uint32_t h,PixelFormat format, uint32_t flags,const spIBinder parentHandle,LayerMetadata metadata,uint32_t* outTransformHint) {spSurfaceControl s;createSurfaceChecked(name, w, h, format, s, flags, parentHandle, std::move(metadata),outTransformHint);return s; }status_t SurfaceComposerClient::createSurfaceChecked(const String8 name, uint32_t w, uint32_t h,PixelFormat format,spSurfaceControl* outSurface, uint32_t flags,const spIBinder parentHandle,LayerMetadata metadata,uint32_t* outTransformHint) {status_t err mStatus;if (mStatus NO_ERROR) {spIBinder handle;spIGraphicBufferProducer gbp;err mClient-createSurface(name, w, h, format, flags, parentHandle, std::move(metadata),handle, gbp, id, transformHint);*outSurface new SurfaceControl(this, handle, gbp, id, w, h, format, transformHint, flags);}return err; }SurfaceFlinger端创建layer过程 SurfaceFlinger构建Layer的核心流程如下: 根据app的flags确定创建layer类型createBufferStateLayercreateEffectLayer还是createContainerLayer目前尚不清楚不同layer之间的区别以createBufferStateLayer为例 将传入参数放入LayerCreationArgs args调用getFactory().createBufferStateLayer(args)创建BufferStateLayer获取layer handle并返回 调用SurfaceFlinger::addClientLayer创建LayerCreatedState放入mCreatedLayers[handle-localBinder()]使用handle等参数创建composerState并传入SurfaceFlinger::setTransactionState 创建TransactionState state并将其放入mTransactionQueue.emplace(state) 这里我们重点看下SurfaceFlinger::addClientLayer的实现因为后面会用到它。 status_t SurfaceFlinger::addClientLayer(const spClient client, const spIBinder handle,const spLayer layer, const wpLayer parent,bool addToRoot, uint32_t* outTransformHint) { ... {std::scoped_lockstd::mutex lock(mCreatedLayersLock);mCreatedLayers.emplace_back(layer, parent, addToRoot);} // attach this layer to the clientif (client ! nullptr) {client-attachLayer(handle, layer);mLayers.add(handle, layer); } setTransactionFlags(eTransactionNeeded) //提交eTransactionNeeded... }//这个什么时候会触发这个transaction呢大概流程如下:MessageQueue::Handler::handleMessage(...)//frameworks/native/services/surfaceflinger/Scheduler/MessageQueue.cppcompositor.commit()//这里的compositor指向SurfaceFlingerif (clearTransactionFlags(eTransactionFlushNeeded)) {needsTraversal | commitCreatedLayers();needsTraversal | flushTransactionQueues(vsyncId);}bool SurfaceFlinger::commitCreatedLayers() {for (const auto createdLayer : createdLayers) {handleLayerCreatedLocked(createdLayer);} }void SurfaceFlinger::handleLayerCreatedLocked(const LayerCreatedState state) {spLayer layer state.layer.promote();if (!layer) {ALOGD(Layer was destroyed soon after creation %p, state.layer.unsafe_get());return;}spLayer parent;bool addToRoot state.addToRoot;if (state.initialParent ! nullptr) {parent state.initialParent.promote();if (parent nullptr) {ALOGD(Parent was destroyed soon after creation %p, state.initialParent.unsafe_get());addToRoot false;}}if (parent nullptr addToRoot) {layer-setIsAtRoot(true);mCurrentState.layersSortedByZ.add(layer);//注意这里对应的Layer是BufferStateLayer} else if (parent nullptr) {layer-onRemovedFromCurrentState();} else if (parent-isRemovedFromCurrentState()) {parent-addChild(layer);layer-onRemovedFromCurrentState();} else {parent-addChild(layer);}layer-updateTransformHint(mActiveDisplayTransformHint);mInterceptor-saveSurfaceCreation(layer); } 其中SurfaceFlinger端各种Layer的关系如下: 这里需要注意的点是 SurfaceFlinger::setTransactionState中比较复杂容易忽略将TransactionState state放入mTransactionQueue的过程mTransactionQueue在后面创建hwc layer的时候会用到 遗留思考问题 在Android 11中添加了一个彩蛋就是增加了BLASTBufferQueue这个我们要怎么理解它呢它的核心作用就是将Android GraphicBuffer的管理全部交由App应用端处理而不经过SurfaceFlinger处理。这里我存在的疑问就是: App端渲染完成之后怎么将这些buffer提交给SurfaceFlinger进行继续处理呢!App端申请的Surface Buffer怎么和SF端对应的Layer关联起来呢 App端构建的SurfaceControl在App端和SurfaceFlinger的交互中的作用是什么
http://www.zqtcl.cn/news/576599/

相关文章:

  • 任县网站建设公司北京网站开发网站开发公司
  • 重庆seo网站策划网站的tdk指的是什么
  • 自做刷赞网站山东东成建设咨询有限公司网站
  • 泉州网站制作推广网站建设一年多少
  • 超大型网站建设公司网站打开显示建设中
  • 惠东县网站建设建设方案
  • 怎么把做的网站发布长春建网站
  • 织梦网站手机端郑州网站制作公司名单
  • 如何建设网站安全网站桥页也叫
  • 南浔网站建设昆山智能网站开发
  • 阿里云可以做电商网站吗杭州网站建设浙江
  • 查询网站备案进度网站建设推广
  • 怎么做公司网站需要什么科目高端网站建设教学
  • 资讯平台网站模板中企中立做的网站好吗
  • 网站开发人员配备山西省吕梁市简介
  • 网站注销主体注销中国建设教育协会培训报名网站
  • 电商网站设计思想建设化妆品网站的成本
  • 做房产网站能赚钱吗深圳龙华区邮政编码
  • 网站开发素材代码手机网站 win8风格
  • 免费推广网站软件班级网站怎么做ppt模板
  • 在线做任务的网站有哪些wordpress ui 插件
  • 竣工验收备案表查询网站优化大师win10能用吗
  • php 网站管理系统做生鲜管理系统的网站
  • 昆山建设工程招聘信息网站业绩显示屏 东莞网站建设技术支持
  • 百度我的网站广东广州网站建设
  • 怎么提高网站流量沈阳有资质做网站的公司有哪些
  • 内蒙古住房与城乡建设厅网站网址微信可以上网
  • 如何网站seo中国化工第九建设公司网站
  • 无锡网站推广优化公司单位网站建设必要性
  • 网站建设丶金手指花总12网站建设是怎么挣钱