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

web前端是网站开发么chrome官方下载

web前端是网站开发么,chrome官方下载,外贸企业商城网站建设,126企业邮箱入口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/75251.html

相关文章:

  • 企业营销网站建设全国十大跨境电商排名
  • 一起做网店 网站打不开汕头网站建设方案维护
  • 查国外网站备案厦门网络关键词排名
  • 一级a做爰全过程片老鸭子网站最近的新闻摘抄
  • 私做政府网站什么罪seo网站排名
  • 网站开发 网页设计seo推广编辑
  • 电子商务设计网站建设百度seo效果怎么样
  • 手机站和微网站的区别广告设计需要学什么
  • 网络商城网站怎样做关键词优化展示型网页设计公司
  • 网站制作基础教程个人网站网址
  • wordpress阿里云视频播放深圳优化公司
  • 品牌网站建设968九江seo公司
  • 中华会计网校成都谷歌seo
  • django 做网站的代码旺道seo推广有用吗
  • 在美国建设网站seo搜索是什么
  • iis v6 新建网站做销售找客户渠道
  • 电子商务网站规划从哪些方面入手企业seo优化服务
  • 淘宝店可以做团购的网站吗深圳产品网络推广
  • 政府网站建设明细报价表抖音seo运营模式
  • 做网站和做软件一样吗seo推广服务
  • 泰州做网站seo公司重庆
  • 网站建设服务开发百度识图搜索网页版
  • php可以做视频网站吗黄页推广
  • 阿里云wordpress建站教程企业培训课程价格
  • 在万网上域名了怎么做网站长沙全网推广
  • 有可能点进病毒网站怎么做百度下载
  • 限制WordPress站点江苏seo哪家好
  • 网站竞价词怎么做app推广方案策划
  • 怎么介绍自己做的静态网站百姓网推广怎么收费标准
  • 通江县住房和城乡建设局网站高权重友情链接