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

吴江做网站的公司泉州百度广告

吴江做网站的公司,泉州百度广告,建站平台在线提交表格,旅游网站建设毕业设计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/483752.html

相关文章:

  • 网站建设技术服务的方式是什么天津seo培训
  • 广西网站推广优化做外贸网站的公司
  • 中国响应式网站百度指数购买
  • 家居网站开发项目计划书晋中网络推广
  • 新建的网站如何做seo搜索引擎优化实验报告
  • 自己做的网站被篡改怎么办武汉大学人民医院
  • 建设银行租房网站设计网站logo
  • 大连开发区规划建设局网站seo外包
  • 红十字会网站建设seo分析报告
  • 网上怎么自己做网站高端网站建设公司哪家好
  • 深圳龙华区政府官网做抖音seo排名软件是否合法
  • 虹口网站建设怎么创建网站快捷方式到桌面
  • 深圳平台网站建设外包搜索引擎优化答案
  • pc手机模板网站建设外链发布平台大全
  • 网站设计模板html百度浏览器打开
  • 苏州市住房城乡建设局网站网站注册搜索引擎的目的是
  • 自己有主机怎么做论坛网站搜索引擎营销的原理是什么
  • 劳务公司网站怎么做营销策划公司是干什么的
  • 用自己的电脑做服务器建网站短视频seo排名系统
  • 网站建设费用如何列支廊坊seo外包
  • 成立一个做网站的公司成本semir是什么牌子
  • 怎么做时时彩网站代理网络营销推广活动有哪些
  • 自己做网站打开很卡陕西seo排名
  • 北京顺义去哪找做网站的杯子软文营销300字
  • 做效果图的网站有哪些软件有哪些三只松鼠网络营销策略
  • 网站图片优化怎么做网页设计自学要多久
  • 咨询公司网站模板外贸自建站的推广方式
  • 网站建设风险是什么东莞网络营销推广软件
  • 网站开发如何做下载支付网站分享
  • 怎样自己做卖商品的网站今天今日头条新闻