HarmonyOS Web页面卡死后,全端使用Web组件的页面都会卡死

app中所有的Web组件会共用同一个 浏览器进程/线程吗 ? 所以,一旦一个卡死了,所有的都卡死?

HarmonyOS
2024-12-27 15:24:08
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

H5相关的在渲染进程中运行,其他的在主进程运行。

WebView的渲染进程与应用主进程是跨进程通信的。

Web组件中的js代码运行在render进程中。

一些线程的相关介绍:

主线程:render主线程。负责Paint,将各种html元素生成生成cc::Layer树。

渲染线程:Chrome_InProcRendererThread,运行Blink模块,负责页面的DOM解析,样式渲染,排版,执行JS。通过委托渲染机制,收集和整理渲染网页所需信息和资源,生成网页渲染帧,并不直接渲染网页,而是发送给主进程的合成进程中合成。

合成线程:合成线程,运行CC模块,负责Layer的管理,调用光栅化线程池,绘制Layer,调用GPU线程合成。Render进程中,负责生成渲染离屏页面需要的GPU命令,请求GPU线程渲染。

GPU线程:InProcessGpuThread,负责Texture数据的合成。在Render进程中,负责执行离屏渲染页面的GPU命令。

光栅化线程:CompositorTileWorker,负责将layer分块好的Tile进行光栅化。

IO线程:IO线程,负责与其他进程/线程进行IPC通信。

Web组件整体渲染流程具体描述:

创建初始化。当hap应用声明使用了web组件时,ArkUI会进行web组件的创建及初始化,其中渲染相关的主要流程有:

1.1 为web组件创建SurfaceNode作为图形后端。

1.2 创建NWeb对象,并从SurfaceNode中获取Surface对象传递给NWeb对象,保存在NWeb对接层中。该Surface对象为producerSurface,NWeb对象则是该Surface内容的生产者。同时将完成web内核的初始化。

网页加载。当NWeb对象创建完成,web组件会获取开发者提供的src属性值作为URL,并调用NWeb对象进行网页加载和渲染输出。主要流程为:

2.1 Web组件调用NWeb对象的LoadURL接口开始网页加载。

2.2 NWeb对象在内核中实现网页的解析、渲染、合成等一系列操作。

2.3 NWeb对接层调用Surface的RequestBuffer获取到SurfaceBuffer,将渲染结果拷贝到SurfaceBuffer中,再调用Surface的FlushBuffer接口将渲染结果上传到相应SurfaceNode当中。至此图形侧收到了NWeb的网页渲染结果。

送显。图形侧接收到vsync信号时,将根据SurfaceNode之间的相互关系,对相应的Surface中的内容进行合成渲染,此时将消费保存在Surface中的NWeb网页渲染结果,进而完成送显。这样得到的hap应用渲染结果中,就实现了web内容与其它ArkUI组件内容的合成渲染。

分享
微博
QQ
微信
回复
2024-12-27 17:56:32
相关问题
HarmonyOS 使用Web组件加载页面示例
622浏览 • 1回复 待解决
HarmonyOS web组件 加载web页面异常
406浏览 • 1回复 待解决
HarmonyOS Web组件打不开线上web页面
75浏览 • 1回复 待解决
HarmonyOS Web组件打开pdf页面
149浏览 • 1回复 待解决
HarmonyOS Web组件无法加载页面
219浏览 • 1回复 待解决
HarmonyOS web组件加载页面空白
345浏览 • 1回复 待解决
HarmonyOS flutter hls seek进度卡死
69浏览 • 1回复 待解决
HarmonyOS web页面闪烁
13浏览 • 1回复 待解决
Web组件拦截页面请求响应
1084浏览 • 1回复 待解决
可以脱离页面创建web组件,指的是?
873浏览 • 1回复 待解决
HarmonyOS 摄像头切换时卡死
211浏览 • 1回复 待解决