码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • QtWebEngine性能问题


    目录
    • 1. 概述
    • 2. 详论
      • 2.1. 图形属性设置
      • 2.2. 硬件加速设置
      • 2.3. Qt6
    • 3. 参考

    1. 概述

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

    2. 详论

    2.1. 图形属性设置

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

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

    可以看到两者的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后端:
    figure3

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

    具体的代码为:

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

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

    这时的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]中,提到了一些信息:

    figure6
    figure7

    似乎目前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 渲染的问题的解决
  • 相关阅读:
    基于单片机的智能交通灯系统的设计
    接口测试经典面试题:Session、cookie、token有什么区别?
    java代码审计-SpEL表达式注入
    【离散数学】图论
    请求传参.
    【网站项目】学习资料销售平台 小程序
    java毕业设计《EE开发技术》课程学习网站Mybatis+系统+数据库+调试部署
    Spring Security常见过滤器
    Linux 网络请求和下载
    【Opencv450】HOG+SVM 与Hog+cascade进行行人检测
  • 原文地址:https://www.cnblogs.com/charlee44/p/16211355.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号