当前位置: 首页 > wzjs >正文

网站开发背景seo学校培训

网站开发背景,seo学校培训,网站链接查询,wordpress删除仪表盘QML界面卡死分析 --01 现象 — Canvas与QRasterPaintEngine相关 前置条件:渲染循环使用多线程方式; 发现界面假死,无响应;拷贝dump 分析,主线程堆栈如下: #0 SyncSemWait () #1 0x000000007b4f8784 in QMutexPriv…

QML界面卡死分析 --01

现象 — Canvas与QRasterPaintEngine相关

  1. 前置条件:渲染循环使用多线程方式;

  2. 发现界面假死,无响应;拷贝dump 分析,主线程堆栈如下:

    #0  SyncSemWait () 
    #1  0x000000007b4f8784 in QMutexPrivate::wait(int) () from  qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #2  0x000000007b4f8940 in QBasicMutex::lockInternal(int) () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #3  0x000000007b4fecb4 in QThreadPool::start(QRunnable*, int) () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #4  0x000000007b4fed70 in QThreadPool::start(std::__1::function<void ()>, int) () qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #5  0x000000007af73d4c in blend_untransformed_argb(int, QT_FT_Span_ const*, void*) ()from qt_engine/qt-engine/lib/libQt6Gui.so.6.5.0
    #6  0x000000007aba991c in fillRect_normalized(QRect const&, QSpanData*, QRasterPaintEnginePrivate*) ()from /qt_engine/qt-engine/lib/libQt6Gui.so.6.5.0
    #7  0x000000007abadafc in QRasterPaintEngine::drawImage(QPointF const&, QImage const&) ()from qt_engine/qt-engine/lib/libQt6Gui.so.6.5.0
    #8  0x000000007abd125c in QPainter::drawImage(QPointF const&, QImage const&) ()from qt_engine/qt-engine/lib/libQt6Gui.so.6.5.0
    #9  0x000000007957db04 in qt_drawImage(QPainter*, QQuickContext2D::State&, QImage, QRectF const&, QRectF const&, bool) () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #10 0x000000007957f5cc in QQuickContext2DCommandBuffer::replay(QPainter*, QQuickContext2D::State&, QVector2D const&) ()from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #11 0x0000000079580df4 in QQuickContext2DTexture::paintWithoutTiles(QQuickContext2DCommandBuffer*) ()
    --Type <RET> for more, q to quit, c to continue without paging--c from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #12 0x00000000795829b0 in QQuickContext2DTexture::paint(QQuickContext2DCommandBuffer*) () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #13 0x000000007955efb8 in QQuickContext2D::flush() () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #14 0x000000007955af14 in QQuickCanvasItem::updatePolish() () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #15 0x00000000792ba70c in QQuickWindowPrivate::polishItems() () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #16 0x00000000794b78fc in QSGThreadedRenderLoop::polishAndSync(QSGThreadedRenderLoop::Window*, bool) () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #17 0x00000000794b8874 in QSGThreadedRenderLoop::handleUpdateRequest(QQuickWindow*) () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #18 0x00000000792bd61c in QQuickWindow::event(QEvent*) () from qt_engine/qt-engine/lib/libQt6Quick.so.6.5.0
    #19 0x000000007b3597ac in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #20 0x000000007aae8a20 in QPlatformWindow::windowEvent(QEvent*) () from qt_engine/qt-engine/lib/libQt6Gui.so.6.5.0
    #21 0x000000007aaa20e8 in QGuiApplication::notify(QObject*, QEvent*) () from qt_engine/qt-engine/lib/libQt6Gui.so.6.5.0
    #22 0x000000007b3597ac in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #23 0x000000007b4f6350 in QTimerInfoList::activateTimers() () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #24 0x000000007b4f418c in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #25 0x000000007af1e474 in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from qt_engine/qt-engine/lib/libQt6Gui.so.6.5.0
    #26 0x000000007b365480 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #27 0x000000007b36155c in QCoreApplication::exec() () from qt_engine/qt-engine/lib/libQt6Core.so.6.5.0
    #28 0x00000000101d9eec in main ()
    

分析

  1. 根据堆栈分析出现 QRasterPaintEngine相关类; 此类和CPU 绘制相关;在跟踪源码到 blend_untransformed_argb() 发现内部有用线程池在做图像相关处理,主线程卡死在信号量的等待上;
  2. 根据纯QML程序 光栅化之类的 在GPU 上运行,如果没有配置软光栅化,按照正常配置,不应该会运行到QRasterPaintEngine类中相关代码,除非qml程序中有用Canvas 画布在绘制;搜索qml 程序 发现代码中用用Canvas 中绘制,且是定时器已25帧间隔一直在掉requestPaint()函数;此函数会造成即时Canvas 不可见也会触发绘制;
  3. 通过屏蔽Canvas 代码,发现QRasterPaintEngine类中绘制相关代码再也没有进入过;然后优化Canvas 绘制相关代码,避免不可见时也在后台绘制;整个程序的 cpu 使用率 就将下来了;跑机测试,也未发现主线程卡死现象了。

结论

QRasterPaintEngine 是软光栅化,是CPU绘制相关,会耗费CPU资源;其内部对对象处理主要通过线程池来做资源加载;而Canvas中不管是否可见调用requestPaint()函数;都会触发软光栅化运行,降低性能,在配合上压力测试或者不合理刷新间隔容易造成界面卡顿。

http://www.dtcms.com/wzjs/312474.html

相关文章:

  • 网站后台如何添加新闻线上宣传渠道和宣传方式
  • 外贸网站 开源站建设行吗公司网络搭建
  • 多语言网站建设seo站长工具 论坛
  • 电子商务网站建设 试卷旅游景区网络营销案例
  • 免费ps软件网站搜索引擎关键词快速优化
  • wordpress uc点赞独立站seo建站系统
  • 温州网站策划保定seo排名优化
  • 顺义企业网站建站公司手机上怎么制作网页
  • 站长如何做视频类网站免费网站统计工具
  • 手机网站宽度多少合适seo培训讲师招聘
  • 做网站收入怎样北京搜索引擎优化
  • 网站策划书一般包括以下内容批量查询权重
  • 杭州电子商务网站建设关键词排名推广
  • 洛阳网站建设培训软文营销步骤
  • 广州做网站建设的公司哪家好网站建立具体步骤是
  • 购物网商城首页吉林关键词排名优化软件
  • 网站优化排名软件网各大网站
  • 菏泽住房和城乡建设局网站网络营销的背景和意义
  • 网站内容百度不收录视频广告联盟平台
  • 进入网站后台代码东莞百度seo
  • 移动应用网站开发阶段作业视频号视频怎么看下载链接
  • 请问有重庆有做网站吗网站推广优化
  • 一个网站两个域名备案百度提交入口网址在哪
  • 信息行业网站建设友情链接怎么购买
  • 手机网站设计背景图片服装市场调研报告范文
  • 望都网站建设营销公司取名字大全
  • 鞍山百度网站怎么制作b2b网站推广优化
  • 亚马逊网网站建设规划报告什么是网站推广策略
  • 建网站要定制还是第三方系统网络营销的重要性与意义
  • 招聘网站建设销售seo中国官网