码农知识堂 - 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 渲染的问题的解决
  • 相关阅读:
    “errcode“:40164,“errmsg“:“invalid ip ...微信公众号开发调用失败的解决办法
    Web 安全:PKI 扫盲
    【Linux练习生】进程信号(深度理解)
    SpringBoot 整合多数据源的事务问题
    jetson 裁剪之后从sd卡版本移植到emmc版本
    机器学习-(手推)线性回归3-正则化-岭回归(Ridge)-频率角度&贝叶斯角度
    【C语言】详解函数(下)(庖丁解牛版)
    Vue3表单组件el-form校验规则rules属性
    SIEMENS S7-1200 汽车转弯灯程序 编程与分析
    Git-01-基础使用
  • 原文地址:https://www.cnblogs.com/charlee44/p/16211355.html
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号