QPainter hanging when taking webpage snapshot
Hi All,
We’re using the following code to take a screenshot of a webpage:
- 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=...)
- 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
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?
You must log in to post a reply. Not a member yet? Register here!

