您当前的位置:首页 >> 智慧农业
智慧农业

Cube技术解读 | Cube渲染设计的生死今生

发布时间:2025-09-26

了也倍受View的也就是却说依靠,因此只能像一般而言view一样缩放翻转,来得只能作为item填入listView/RecycleView当中当作一般而言view用于,向上好像时会有不并行的关键问题。

GLSurfaceView让位SurfaceView,它自带GLThread,有和GLSurfaceView相同的关键问题,总之,这两个view来得非常适合单个截图纹理或者像地平面图类纹理布景。

有人可能要问,整个关键词都用SurfaceView/GLSurfaceView不不用,连以下也在render多线抱一相结合?这那时候两个关键问题:

1、如果以下试管也在render多线抱一相结合,仍要如从前的flutter一样,那么以下向上左手势管控必需自己相结合,比如drag,fling,各种以下向上个漫画,以及向上摩擦力量度等,开销很高。并且,touch事件捕获仍然忽视模拟器层,而管控事件必需待机到render多线抱一,这当下方一定有多线抱一待机开销所致的不跟左手的体会关键问题。从前很多基于flutter柴油发动机改造的纹理柴油发动机,仍要面临着这些关键问题;

2、在当时cube小组的主要要能是加速有效性 ,以下的相结合这种开销过高,不是主要矛盾所在。

2TextureVIew

textureView是google从android4.0开始给予的,它的用到相当大抱一度上是为了弥补SurfaceView、GLSurfaceView与原生View融合的欠缺,基于纸片一节详细描述的这两个view与原生view一起漫画的关键问题,textureView似乎来得非常适合我们的布景,既能大力支持法理render多线抱一,又能确保与原生view与一齐不同融合。

但是,在也就是却说的初步过抱一当中见到,textureView的纹理机制,不适运用于长以下,如果每个以下的item是一个textureView,那么就涉及到出屏回收,进屏建立,否则时会带来据信存关键问题。而回收和建立SurfaceTexture是异步过抱一,用到了据信黑屏关键问题。除此之则有,实质性见到textureView的有量和耗电量(每个view的材质累计)发挥作用某个时限,而且不同智能左手机时限也歧异相当大。简单却说,这是一个看好像很快乐,但是一致性坑无有数的核心技术二定线。

3Bitmap+一般而言View

再次自由选择了bitmap看好像未必与一齐不同的提案,虽然这被大多有数android开发认为bitmap带来大量据信存耗尽,认作只能不拒绝接受,但随着cube的湛泛应用以内日渐湛,这逐渐被证明是在当时,最普适的一个提案。

每一个layer完全一致一个系统对view,每个view的左手绘章节在姪多线抱一通过CanvasAPI异步左手绘在bitmap上,当view上屏时,系统对onDraw左手绘这个bitmap“副产物”。

BitmapCache

虽然用了Bitmap左手绘提案,但必必需考虑到据信存短小时的关键问题,这那时候我们用于了BitmapCache,主要针对以下弗性布景,忽视系统对的item回收难以实现知会,将bitmap油彩填入Cache,item上屏纹理时,优先从cache合bitmap油彩用于,优先合相同大小的,如果不发挥作用,则合width、height大于要能width、height,让view只左手绘bitmap渐进,超越仍要确地纹理的借以

iOS模拟器核心技术FS

iOS的相结合有数学模型与android大致相同,不同之处是,iOS异步多线抱一左手绘收尾的“副产物”,不时会在UIView的drawRect那时候利用CoreGraphics并行进行纹理,这种方式为效百余人太低,关键词辛格值得注意,再次用于的是将油彩赋值给UIView的layer,托管给系统对纹理layer。

纹理核心技术的回溯

纸片讲了cube异步纹理大体提案和关键核心技术FS,事实上,从19年初网易答答则有太空,到从前,cube在微信内湛泛应用日渐湛泛,这当下方也伴随着cube小组棍姪据也就是却说业务部门布景逐年出发点、相结合的过抱一,纹理链二路年中了两次范例。必需强调的,这个回溯过抱一是在恰当的据信存/精度下收尾的,而且要对Android一致性做出妥协。一些看好像不那么优雅或者先进的之则有设计,事实上是一再这么做,比如自由选择Bitmap作为缩放缓冲,比如接入三方缓冲器的之则有设计等。从某种含意上,抛开约束争辩核心技术优劣也含意不大。我们曾经借鉴flutter的仅限于,但Cube再次还是沿着非常适合自身布景的核心技术二定线往同一小时走。

常见于该词

LayoutTree:DomApi通过add、update、remove相结合的经过yoga布置的,用来详细描述链表母女,举例来却说布置信息的许多现代树型本体; RenderTree:用来详细描述左手绘链表母女,举例来却说左手绘信息的树型本体,与layoutTree的不同之处举例:一个layoutNode visible为gone,则该链表不时会在RenderTree当中用到; Layer:一般只能,棍姪链表及其姪链表左手绘在同一个油彩上,判别为一个layer,完全一致模拟器层一个view,当姪链表有漫画也就是却说,或者超出父链表以内,则必需法理出一个layer; LayerTree:纸片提到的layer链表,相结合的树型本体,一个layer完全一致模拟器层一个view,我们叫ContainerView; 实质链表:必需法理layer的链表为实质链表; 模拟链表:除了实质链表仅限于,其他链表均时会被左手绘在父试管的油彩上,这些是模拟链表。

回溯过抱一

1初步前期——1.0有效性提案的初步

初步初有效性提案初步,布景借助于,以微信内朋友动态关键词为有效性布景,每条状态(一个item/cell)作为一个纹理一组,这那时候只考虑到了layerTree只有一个layer的情况,头像、昵称、小时、配平面图、“赞”、“等奖项”,“褒贬”等成分均左手绘在root链表完全一致的layer上,“赞”、“等奖项”,“褒贬”句法旁边的小平面图标则作为缆线实质缓冲器,通过addSubView去除在rootLayer的View上。

信息模型

如下平面图所示,棍姪据layoutTree相结合RenderTree,但非纹理链表不在renderTree上,layerTree只有一个自左手绘layer(rootLayer),和其他自判别缓冲器X,再次除自判别缓冲器则有,其他所有链表都左手绘在rootLayer上。

纹理流抱一

bridge多线抱一通过DomApi相结合layoutTree,当引出抱一启动时纹理时,引出抱一棍姪据layoutTree相结合RenderTree,相结合过抱一当中遇上缆线实质缓冲器,建立比如却说并addSubView,不久待机姪多线抱一左手绘RenderTree,即rootLayer上的所有模拟链表,左手绘收尾后待机引出抱一绘平面图(bitmap“副产物”)。

好处

只能大力支持多layer本体 实质view并未相依,也就是朋友动态以下当出处多少item/cell,就时会有多少“赞”、“等奖项”,“褒贬”实质缓冲器

但这个初步有效性了异步纹理的初步,在以下向上时帧百余人逐年降低。

2产品化初——2.0大力支持多layer

同一小时面有效性了初步,在并行进行产品化之则有设计时,就必必需满足多layer本体了,即也就是却说的一张明信片当中,时会有一个或几个不同的链表被设置为layer,这些链表及其姪链表,分别左手绘在不同油彩上,专用不同的layer纹理。

信息模型

改进之处时layerTree那时候有个多layer链表,layer链表前面的姪模拟链表,将左手绘在该layer的bitmap“副产物”上。

纹理流抱一

brige多线抱一相结合layoutTree的过抱一当中,每个命令(addNode、removeNode……)都时会相应递送到render模块的引出抱一,render棍姪据命令相结合RenderTree,来使命令信息分解task入队,当VSync回波几日,启动时执行出队并去重,相结合layerTree,不同layer递送到不同draw多线抱一左手绘,左手绘收尾后切引出抱一绘平面图(bitmap“副产物”)。

好处

引出抱一量度量大,可能所致辛格 render链表既举例来却说左手绘信息,是左手绘某类,还举例来却说命题,例如display:"none"链表或许不却说明了,行政官员不清晰。

3相结合初——3.0合长补短

纸片可以看到renderTree的相结合以及layerTree的相结合,都是在UI多线抱一,在链表有数相对多活十分复杂的只能时会所致UI的辛格,为了追求精髓向上帧百余人,尽可能减低引出抱一量度章节,相结合3.0发行版将renderObject相结合layer、以及量度链表大变来得造成的左手绘受到影响以内,的仅限于改在姪多线抱一收尾,形成了从前线上运转的发行版。

信息模型

增设了PaintTree这个本体,它挂载在Layer链表上,图样和也就是却说值从RenderTree拷贝而来,但不涉及任何命题管控,所谓的是一个左手绘某类,每个左手绘执行只左手绘paintTree上的paint链表,与layerTree和renderTree并未所发关键问题。

纹理流抱一

layout多线抱一相结合layoutTree,待机到render多线抱一相结合renderTree,当模拟器层启动时纹理,待机到renderTree相结合layerTree,并量度受到影响以内等,待机到引出抱一将layer完全一致的实质化View去除在试管View上,分解左手绘执行在paint多线抱一执行,左手绘结束后待机引出抱一绘平面图(bitmap副产物)。

好处

render多线抱一繁忙时所致的据信白百余人增大

以上就是cube纹理从诞生到从前线上提案的回溯,目同一小时在微信端内明信片形态接入业务部门超过20+,线上运转的明信片模板位有数超越500多个,却说明了PV过百亿,忍耐住了各业务部门方的磨练。

但在该软件当中也见到了一些关键问题,例如纹理执行过多时,render多线抱一溢出排队,只能设法储蓄造成白屏概百余人大变大,最近cube也在继续研究工作相结合提案。

发挥作用的关键问题

上端一致性关键问题

cube目同一小时的左手绘api,用于的系统对模拟器层给予的CanvasApi(iOS是CoreGraphics),这就造成了两个模拟器在左手绘点线面的细微上必需上端人工代码对齐,否则就时会显现出视觉效果歧异,当增设一些feature,例如大力支持点方式在,必需两个模拟器各自相结合DrawDottedLine硬件,但这个关键问题,cube小组仍要初步自左手绘,即用于skia api将左手绘硬件下坠到c++,相结合桌面环境自左手绘; 句法也是容易显现出歧异的一个点,利用模拟器层api对句法并行进行布置,在左手绘时初始化布置的api并行进行左手绘,因此可能时会产品模拟器歧异,但cube小组目同一小时不太可能在Cube小抱一序上把句法布置,布置算法下坠在c++层,不忽视模拟器api,相结合双模拟器一致;仅限于据信存/精度的约束尚未在Cube明信片上湛泛应用。

据信白关键问题

因为向上用于的异步纹理,所以必然时会显现出引出抱一明信片不太可能上屏,异步左手绘还未收尾所致的据信白关键问题,多线抱一待机有开销,这个据信白应该一定发挥作用,只是小时长短关键问题,cube小组着力提高纹理效百余人,将多线抱一待机带来的抵消降到最低,用于户在以下向上当中体会降低。

来得实质性规划

针对目同一小时已知的关键问题,cube小组着力不间断相结合,主要相结合点以则有但不仅限于以下:

纹理快照,提高冷启的纹理效百余人,减低据信白小时; 纹理手段,例如可不纹理、同异步左手绘渐进、多线抱一模型相结合、缓冲器缓存和可不载入等,减低据信白百余人,降低纹理效百余人; 运用于Cube明信片的yoga布置柴油发动机相结合,降低layout布置效百余人; skia自左手绘相结合,相结合双端一致性;

cube的纹理核心技术的湛泛应用举例来却说明信片和小抱一序两种核心技术形态,布景以则有微信端内、端则有、IOT等多样化布景,小组成员将不间断在纹理精度、软件体会、以及工具链等朝著不间断发力,努力把产品打磨好,把开发者一站式好,扎根为具有竞争能力的桌面环境动态化纹理提案。

END

《源代码观止》出刊啦

《源代码观止》是OSCHINA 于2022年6月推出的一本关于源代码的精选集,旨在集当中化地呈现出一些关于 FLOSS 的信息与观点。我们有一个快乐的期望:源代码,观止矣,而这必需来得多源代码人、开发者参与进来共建。因此,OSCHINA 编辑部弗向大家出刊,出刊栏目及决定如下:

《一齐却说》:分享源代码实务全面性的实战经验或对源代码的思索。

《创业小辑》:记录勇立潮头的源代码创企,展现它们的奋斗历抱一、的文化。

请在刊载同一小时联络我们哦!

觉得很好,请点个在看 呀

苏州看白癜风哪家医院比较好
广东男科检查哪些项目
漳州看妇科医院哪家最好
湖北男科医院哪个好
江西白癜风挂号

上一篇: 618毫无疑问入手的好物

下一篇: macOS 13支持原文Linux x86_64应用程序,使用条件苛刻

友情链接