当前位置: 首页 > 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.pierceye.com/news/752286/

相关文章:

  • 网站建设内容保障制度什么网站权威评价搜索引擎优劣
  • 中国建设局网站东莞市路桥收费所
  • 那个网站上有做婚礼布场样图的公司网站排名
  • 凡客资源东莞市seo网络推广服务机构
  • 网站的安全维护wordpress 文章 定时
  • 网上做题扣分在哪个网站上做网站建设微信商城运营
  • 外贸英文商城网站建设微信公众帐号开发
  • 上海做网站运维的公司用手机制作自己的网站
  • 西安做网站朋朋网络花都区建设网站
  • 国外的贸易网站wordpress 不会编程
  • 设计网页作业seo如何优化网站推广
  • 黑龙江建设网官方网站特种作业电脑网站策划书
  • 系统开发和网站开发厦门专业网站营销
  • 网站在线交谈wordpress信息填写
  • 服饰网站建设微网站建设 合同
  • dede网站 远程生成wordpress后台不能登陆
  • word如何做网站链接湖南省绿色建筑信息平台
  • v9网站模板网站建设六道
  • php网站开发原理企业门户网站费用
  • 白银市建设管理处网站定制网站建设和运营
  • 免费音乐网站建设新闻资讯建站服务商
  • 佛山市建设企业网站服务机构普通网站建设计入什么科目
  • 阿里虚拟机建设网站网络科技有限公司营业执照
  • 如何申请建设网站首页培训机构怎么做线上推广
  • 网站维护升级访问中做网站工单
  • 如何用ae做模板下载网站电脑网站建设规划
  • 北京京水建设集团有限公司网站西青做网站
  • 自己建的网站可以用笔记本做服务器吗网站建设后台系统有哪些
  • 做的asp网站手机号码网站开发软件手机版
  • android 做电子书下载网站网络热词作文