Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt WebKit
  4. QPainter hanging when taking webpage snapshot
Forum Updated to NodeBB v4.3 + New Features

QPainter hanging when taking webpage snapshot

Scheduled Pinned Locked Moved Qt WebKit
2 Posts 2 Posters 1.5k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    arvind2111
    wrote on last edited by
    #1

    Hi All,

    We're using the following code to take a screenshot of a webpage:

    @ QWebPage * page = mBrowser.page();
    QImage screenshot(page->viewportSize(), QImage::Format_ARGB32);
    QPainter paint(&screenshot);
    page->currentFrame()->render(&paint);
    paint.end();
    screenshot.save("screenshot.png");@

    However, quite frequently, this block of code hangs. Using gdb, I've done a backtrace as follows. Does anyone have any clues as to why this may be occurring? Some sites this is occurring on include http://wordpress.tv/ and http://octodex.github.com

    @Program received signal SIGINT, Interrupt.
    qt_memfill32_sse2 (dest=0x7fffffff9650, value=4294967295, count=1280) at painting/qdrawhelper_sse2.cpp:269
    269 case 0: do { _mm_stream_si128(dst128++, value128);
    (gdb) up
    #1 0x00007ffff52b92d8 in blend_color_generic (count=206, spans=<value optimized out>, userData=0x112e6e0)
    at painting/qdrawhelper.cpp:3446
    3446 op.funcSolid(dest, l, data->solid.color, spans->coverage);
    (gdb) up
    #2 0x00007ffff525dff7 in flushSpans (this=0xa4f7e0, a=<value optimized out>, b=<value optimized out>,
    width=<value optimized out>, squareCap=<value optimized out>) at painting/qrasterizer.cpp:111
    111 m_blend(m_spanCount, m_spans, m_data);
    (gdb) up
    #3 addSpan (this=0xa4f7e0, a=<value optimized out>, b=<value optimized out>, width=<value optimized out>,
    squareCap=<value optimized out>) at painting/qrasterizer.cpp:105
    105 flushSpans();
    (gdb) up
    #4 QRasterizer::rasterizeLine (this=0xa4f7e0, a=<value optimized out>, b=<value optimized out>,
    width=<value optimized out>, squareCap=<value optimized out>) at painting/qrasterizer.cpp:882
    882 Q16Dot16ToInt(Q16Dot16Multiply(rowHeight, coverage[i])));
    (gdb) down
    #3 addSpan (this=0xa4f7e0, a=<value optimized out>, b=<value optimized out>, width=<value optimized out>,
    squareCap=<value optimized out>) at painting/qrasterizer.cpp:105
    105 flushSpans();
    (gdb) up
    #4 QRasterizer::rasterizeLine (this=0xa4f7e0, a=<value optimized out>, b=<value optimized out>,
    width=<value optimized out>, squareCap=<value optimized out>) at painting/qrasterizer.cpp:882
    882 Q16Dot16ToInt(Q16Dot16Multiply(rowHeight, coverage[i])));
    (gdb) up
    #5 0x00007ffff529877e in QRasterPaintEngine::fillRect (this=0x139c6f0, r=..., data=0x112e6e0)
    at painting/qpaintengine_raster.cpp:1899
    1899 d->rasterizer->rasterizeLine(a, b, nr.height() / nr.width());
    (gdb) up
    #6 0x00007ffff5221037 in QPainter::fillRect (this=0x7fffffffcb50, r=..., brush=...)
    at painting/qpainter.cpp:6961
    6961 d->extended->fillRect(r, brush);
    (gdb) up
    #7 0x00007ffff67c6aab in ?? () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #8 0x00007ffff678b7cc in ?? () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #9 0x00007ffff66f3b11 in ?? () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #10 0x00007ffff6746880 in ?? () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #11 0x00007ffff6747414 in ?? () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #12 0x00007ffff663c17e in ?? () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #13 0x00007ffff6811c46 in ?? () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #14 0x00007ffff6811e76 in QWebFrame::render(QPainter*) () from /usr/lib64/libQtWebKit.so.4
    (gdb) up
    #15 0x0000000000411c20 in bricolage::WebCrawler::takeScreenshot (this=0x7fffffffe0f0)
    at /data/bricolage/Code/Applications/Database/WebCrawlerCPP/src/WebCrawler.cpp:231
    231 page->currentFrame()->render(&paint);@

    1 Reply Last reply
    0
    • A Offline
      A Offline
      AcerExtensa
      wrote on last edited by
      #2

      Have tested http://wordpress.tv/ and http://octodex.github.com with my thumb-crawler on Linux x86_64 with Qt 4.7.1 & 4.8.2, no problem at all...

      Are you using ubuntu? have you compiled Qt by yourself or is it default SDK installation?

      God is Real unless explicitly declared as Integer.

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved