QtWebEngine性能问题

简介: QtWebEngine性能问题

QtWebEngine性能问题

目录

1. 概述

Qt的Qt WebEngine模块是基于Chromium项目,但是本人在使用QWebEngineView进行Web端的三维渲染(WebGL)时,经过测试发现性能比不上Chrome。查阅了一些资料,记录一下对这个问题的尝试。

2. 详论

2.1. 图形属性设置

在Chrome中通过地址chrome://gpu查看使用的GPU的情况:

而在Qt的QWebEngineView中同样打开chrome://gpu查看:

可以看到两者的GL_RENDERER是不一样的,原生的Chrome采用的是ANGLE渲染的,而不是像Qt WebEngine那样采用显卡驱动中OpenGL4.6渲染。

根据参考[1],ANGLE是Google的一个开源项目,目的是将OpenGL ES API调用映射到 Vulkan、桌面OpenGL、OpenGL ES、Direct3D 9 和 Direct3D 11中。文中还提到了ANGLE是Windows平台上Google Chrome和Mozilla Firefox的默认WebGL后端:

那么问题可能在于这里,一般会认为使用D3d的性能比OpenGL要高。按照参考[2]中所述,我们可以将Qt的图形属性设置成ANGLE:

具体的代码为:

QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
//...
QApplication a(argc, argv);
//...

根据参考[2]中所述,这样会让ANGLE自动选择最合适的图形接口。这时通过chrome://gpu查看如下:

这时的ANGLE已经启用了,并且调用了D3d11。不过很可惜,经过测试,我这边性能并没有提高,并且在后台会报错。

更进一步的,参考[2]中还提到了可以通过环境变量QT_ANGLE_PLATFORM来选择d3d11、d3d9或者warp,来选择具体的图形接口实现。可惜这三种配置对我都没什么效果。

2.2. 硬件加速设置

参考[3]和参考[4]提到了Chromium有一些命令行参数,用于进行硬件加速。例如"--ignore-gpu-blacklist", "--enable-gpu-rasterization", "--enable-native-gpu-memory-buffers", "--num-raster-threads=4"。参考[5]中提到了具体的设置方法:

qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blacklist");
//...
QApplication a(argc, argv);
//...

但是很可惜,经过测试,我这边性能还是并没有提高。

2.3. Qt6

在Qt的一篇官方博客,也就是参考[6]中,提到了一些信息:

似乎目前Qt的ANGLE并没有真正渲染到D3D上,相应的硬件加速也没有作用。如果可以,尽量跟进Qt6的最新版,可能会解决这个性能问题。

3. 参考

  1. ANGLE - Almost Native Graphics Layer Engine
  2. Qt for Windows - Requirements
  3. Investigate Chromium GPU flags
  4. Enable hardware acceleration with QtWebEngine
  5. Setting arguments for QtWebEngineProcess
  6. Qt WebEngine in Qt 6
  7. Qt5: can WebGL work with ANGLE on Windows via QtWebEngine?
  8. qt QWebEngineView 和 quick 渲染的问题的解决

分类: QT

标签: QT , QtWebEngine , Chrome , Chromium


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
6月前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
1004 0
|
1月前
|
缓存 监控 固态存储
如何优化磁盘性能?
【10月更文挑战第4天】如何优化磁盘性能?
65 4
ly~
|
1月前
|
缓存 中间件 数据库
FileRun 的性能如何?
FileRun 的性能受网络环境、硬件配置等因素影响。在网络和硬件条件优越的情况下,文件传输速度快,系统响应迅速,资源占用低。面对大量文件或高并发访问,需注意资源分配与系统优化,以维持稳定性和可扩展性。支持插件扩展,可与第三方应用集成,提升文件管理效率。
ly~
52 3
|
29天前
|
存储 缓存 监控
数据库优化:提升性能与效率的关键策略
【10月更文挑战第21】数据库优化:提升性能与效率的关键策略
|
29天前
|
存储 分布式计算 监控
数据库优化:提升性能与效率的全面策略
【10月更文挑战第21】数据库优化:提升性能与效率的全面策略
ly~
|
1月前
|
存储 监控 Linux
如何确定 FileRun 性能的瓶颈所在?
监控服务器资源使用情况,包括CPU使用率、内存使用量、磁盘I/O性能和网络带宽占用,确保FileRun运行顺畅。同时,分析数据库性能,如查询执行时间和连接数,以及检查FileRun内部操作日志,评估用户行为和并发访问对系统的影响。
ly~
38 4
|
3月前
|
存储 缓存 弹性计算
解读大模型时代的数据加速:性能、稳定性与一致性一个都不能少
本文探讨了在大模型时代,如何在数据加速中平衡性能、稳定性和一致性,通过阿里云ACK Fluid的实例,详细解析了优化策略与最佳实践,旨在帮助用户高效应对数据管理挑战。
|
6月前
|
存储 机器学习/深度学习 固态存储
提高性能!硬件调优技巧大揭秘
提高性能!硬件调优技巧大揭秘
102 0
|
JSON 数据库 数据格式
性能和可测试性的选择
性能和可测试性的选择
|
Java 测试技术 BI
一文告诉你CPU分支预测对性能影响有多大
CPU分支预测本身是为了提升流水线下避免流水线等待的手段,其实本质上是利用了局部性原理,因为局部性的存在,大多数情况下这个技术本身给性能带来的是正向的(要不然它今天也不会存在了),所以我们大多数情况下都不需要关注它的存在,还是放心大胆的写代码吧,不要因为我们这篇博客就把所有的if改成?:三目运算,可能对代码可读性的影响远大于性能提升的收益。再次强调下,我今天只是构造了一个极端的数据来验证其性能差异,因为局部性的存在大多数情况下分支预测都是对的。
122 0
下一篇
无影云桌面