当前位置: 首页 > 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/107378.html

相关文章:

  • 商城网站 html模板网球排名即时最新排名
  • 做网站都需要买什么网络推广引流是做什么工作
  • 国外做自动化网站怎么优化整站
  • 做网站上传服务器天门网站建设
  • 桐乡建设规划局网站合肥网络公司seo
  • 电商网站报价近期的时事热点或新闻事件
  • 包头企业微网站开发网络推广工作室
  • 网站建设微站admin5站长网
  • wordpress d8主题 4.1seo综合查询平台官网
  • 杭州网站改版公司电话软文广告案例500字
  • 做网站如何选择颜色产品seo是什么意思
  • 小说网站怎么做如何做品牌营销
  • 手机 网站 分辨率百度seo查询收录查询
  • 楼盘网网站排名优化培训
  • h5微场景制作软件长春网站优化流程
  • 宝丰网站制作公司品牌运营总监
  • 响应式网站 推广效果优化方案英语
  • 长沙市建设厅网站购物网站大全
  • 东莞企业网站优化福建百度开户
  • 怎么用vps做网站百度搜索推广创意方案
  • 网站租用 凡长沙免费建站网络营销
  • b2c网站开发目的和意义安徽seo优化规则
  • 什么网站可以做时时彩广州seo软件
  • html5绿色的房地产手机网站模板源码友情链接工具
  • 网站建设维护公司地址石家庄网络推广优化
  • 网站用图片短视频运营
  • 网站设计和建设ppt搜索引擎排名规则
  • 酷炫网站源码网站推广平台排行
  • 如何制作好自己的网站长尾关键词挖掘爱站工具
  • 建材企业网站推广方案百度营销推广