Skip to content

Conversation

@dengzhongyuan365-dev
Copy link
Contributor

  • Changed the environment variable for QWebEnginePage to use --js-flags=--jitless instead of disabling the sandbox.
  • This adjustment aims to improve stability on the sw_64 platform.

Log: as title

bug: https://pms.uniontech.com/bug-view-347387.html

- Changed the environment variable for QWebEnginePage to use --js-flags=--jitless instead of disabling the sandbox.
- This adjustment aims to improve stability on the __sw_64__ platform.

Log: as title

bug: https://pms.uniontech.com/bug-view-347387.html
@deepin-ci-robot
Copy link

deepin pr auto review

这段代码主要针对 __sw_64__ 平台(通常指国产申威架构)上的 Qt WebEngine 运行环境进行了配置调整。以下是对该 diff 的详细审查和改进建议:

1. 语法逻辑

  • 现状:语法上没有错误。qputenvqDebug 使用正确,条件编译指令 #ifdef 使用得当。
  • 逻辑变更
    • 原逻辑:使用 --no-sandbox 禁用沙箱。
    • 新逻辑:使用 --js-flags=--jitless 禁用 JavaScript JIT(即时编译)。
  • 潜在问题:这是一个功能性回退。禁用沙箱是为了解决权限或系统调用兼容性问题,而 --jitless 是为了解决 CPU 指令集(特别是 JIT 编译器所需的特定指令)兼容性问题。
    • 如果原代码崩溃的原因是沙箱机制拦截了某些系统调用,改为 --jitless 可能无法解决问题,甚至可能导致新的崩溃(如果 JIT 本身不是崩溃的唯一原因)。
    • 如果原代码崩溃的原因是JIT 生成的机器码在申威 CPU 上执行非法,那么这个改动是正确的。

2. 代码质量

  • 日志信息不匹配
    • qDebug 输出的是 "Running on __sw_64__ platform, --js-flags=--jitless"
    • 实际设置的环境变量是 "QTWEBENGINE_CHROMIUM_FLAGS", "--js-flags=--jitless"
    • 建议:日志信息应更清晰地描述正在进行的操作,例如:"Running on __sw_64__ platform, disabling JIT via --js-flags=--jitless"
  • 硬编码:平台特定的标志直接硬编码在代码中。虽然对于这种特定架构的修补尚可接受,但建议添加注释说明为什么需要这个标志(例如:申威架构不支持 Chromium 的 V8 JIT 特性)。

3. 代码性能

  • 严重性能下降
    • --jitless 会禁用 JavaScript 引擎的 JIT 编译器。
    • 后果:JavaScript 的执行速度将显著变慢(通常相差 5-10 倍甚至更多)。对于包含大量 JS 动画或复杂逻辑的网页,页面加载和交互会有明显的卡顿感。
    • 权衡:这是为了换取稳定性(不崩溃)而必须付出的代价,但在文档或注释中应注明此性能影响。

4. 代码安全

  • 安全性提升
    • 相比于之前的 --no-sandbox--jitless 在安全性上是一个巨大的提升
    • --no-sandbox 完全移除了浏览器的安全隔离层,使得渲染进程中的任何漏洞都可以直接攻击宿主操作系统。
    • --jitless 保留了沙箱机制,只是禁用了 JIT。由于许多浏览器漏洞利用依赖于 JIT 喷射堆内存,禁用 JIT 实际上增加了攻击者的难度。
  • 结论:从安全角度看,只要 --jitless 能解决崩溃问题,它远优于 --no-sandbox

5. 改进建议代码

    // 解决__sw_64__平台使用QWebEnginePage崩溃的问题
    // 原因:申威架构可能不支持V8引擎JIT所需的特定指令,导致非法指令崩溃。
    // 副作用:禁用JIT会导致JS执行性能显著下降,但保留了沙箱安全性。
#ifdef __sw_64__
    qDebug() << "Running on __sw_64__ platform, applying workaround: disabling JIT (--js-flags=--jitless)";
    // 注意:这里替换了之前的 --no-sandbox,以在解决崩溃的同时保持沙箱安全防护
    qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--js-flags=--jitless");
#endif

总结

如果该改动确实解决了申威平台上的崩溃问题,那么这是一个非常积极的改动,因为它在解决兼容性问题的同时,避免了引入严重的安全隐患(即 --no-sandbox)。唯一的代价是 JavaScript 运行性能的降低,这通常在该架构的特定使用场景下是可以接受的。请务必在代码中添加注释说明性能影响。

@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: dengzhongyuan365-dev, lzwind

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@dengzhongyuan365-dev
Copy link
Contributor Author

/forcemerge

@deepin-bot deepin-bot bot merged commit 6538d0a into linuxdeepin:master Jan 20, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants