RESOLVED FIXED 91075
[Qt] Increase the drawing performance by merging dirty rects.
https://bugs.webkit.org/show_bug.cgi?id=91075
Summary [Qt] Increase the drawing performance by merging dirty rects.
Dongseong Hwang
Reported 2012-07-12 05:12:36 PDT
QWebFramePrivate calls FrameView::paintContents as many as the number of dirty rects, so it causes too many redundant render tree traversals. I changed it to merge dirty rects and call FrameView::paintContents only once. The algorithm to merge rects is copied from GTK.
Attachments
Patch (3.46 KB, patch)
2012-07-12 05:14 PDT, Dongseong Hwang
noam: review+
noam: commit-queue-
Dongseong Hwang
Comment 1 2012-07-12 05:14:35 PDT
Dongseong Hwang
Comment 2 2012-07-12 05:15:53 PDT
Martin did on GTK port at Bug 70213.
Kwang Yul Seo
Comment 3 2012-07-12 05:22:51 PDT
When parallel image decoders are in use, each image is independently repainted when decoding is finished. This creates a lot by repaint requests. So by merging these repaint requests appropriately, we can improve rendering performance.
Dongseong Hwang
Comment 4 2012-07-12 05:25:07 PDT
(In reply to comment #3) > When parallel image decoders are in use, each image is independently repainted when decoding is finished. This creates a lot by repaint requests. So by merging these repaint requests appropriately, we can improve rendering performance. I tested parallel image decoders on http://www.dorothybrowser.com/test/webkitTest/imgdecode/Pinterest.html . QWebFramePrivate called FrameView::paintContents 165 times after parallel image decoders decoded all the images. It took about 120ms. This patch decreases painting time from 120ms to 30ms.
Zoltan Horvath
Comment 5 2012-07-12 08:32:09 PDT
Nice improvement! I'd also include the improvement numbers into the changelog, otherwise looks cool!
Noam Rosenthal
Comment 6 2012-07-12 09:08:43 PDT
Comment on attachment 151917 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151917&action=review Awesome! > Source/WebKit/qt/Api/qwebframe.cpp:363 > + const unsigned int cRectThreshold = 10; > + const float cWastedSpaceThreshold = 0.75f; We can do without the c prefix.
Kwang Yul Seo
Comment 7 2012-07-12 14:37:44 PDT
Kwang Yul Seo
Comment 8 2012-07-12 14:39:25 PDT
Thanks. I landed the patch after updating the ChangeLog and removing c prefix from constant names.
Note You need to log in before you can comment on or make changes to this bug.