Bug 32122

Summary: [Qt] Preparation for tiling support
Product: WebKit Reporter: Kenneth Rohde Christiansen <kenneth>
Component: WebKit QtAssignee: Nobody <webkit-unassigned>
Status: RESOLVED DUPLICATE    
Severity: Normal CC: benjamin, commit-queue, girish, hausmann, joseph.ligman, koivisto, laszlo.gombos, luiz, skyul, tonikitoo, webkit.review.bot, xhiloh
Priority: P3 Keywords: Qt
Version: 528+ (Nightly build)   
Hardware: PC   
OS: All   
Bug Depends on:    
Bug Blocks: 31552    
Attachments:
Description Flags
Split out the renderPrivate method to two, one for absolute coords, and one relative to the viewport
none
Receive invalidate events for areas changed outside the viewport, if ScrollView::setPaintsEntireContents is true
none
Add tiling to QGraphicsWebView
none
Basic benchmark for the scrolling support
none
Offscreen rendering of the mainframe at the QWebFrame level
none
Slides from a presentation about the work none

Description Kenneth Rohde Christiansen 2009-12-03 09:38:05 PST
Tiling has the ability to improve the scrolling performance and experience for the two Qt web views.

We will use this bug to track and discuss this work.
Comment 1 Kenneth Rohde Christiansen 2009-12-03 09:39:33 PST
Created attachment 44249 [details]
Split out the renderPrivate method to two, one for absolute coords, and one relative to the viewport
Comment 2 WebKit Review Bot 2009-12-03 09:39:55 PST
style-queue ran check-webkit-style on attachment 44249 [details] without any errors.
Comment 3 Kenneth Rohde Christiansen 2009-12-03 09:47:35 PST
Created attachment 44251 [details]
Receive invalidate events for areas changed outside the viewport, if ScrollView::setPaintsEntireContents is true
Comment 4 WebKit Review Bot 2009-12-03 09:50:33 PST
style-queue ran check-webkit-style on attachment 44251 [details] without any errors.
Comment 5 Kenneth Rohde Christiansen 2009-12-03 10:00:10 PST
Created attachment 44253 [details]
Add tiling to QGraphicsWebView
Comment 6 Kenneth Rohde Christiansen 2009-12-03 10:04:04 PST
Comment on attachment 44251 [details]
Receive invalidate events for areas changed outside the viewport, if ScrollView::setPaintsEntireContents is true

We might want to do this at the frame level instead, removing r?
Comment 7 Kenneth Rohde Christiansen 2009-12-03 10:11:17 PST
Benjamin did a simple test (can you upload it Benjamin?) that automatically scrolls on offline webpages.

Here are the preliminary results:

QWebView (not tiles, xcopyregion):

RESULT : Test::benchWebView():"simplest painting":              
     2.1 msec per iteration (total: 35, iterations: 16)          
RESULT : Test::benchWebView():"slashdot page":                  
     16 msec per iteration (total: 33, iterations: 2)            
RESULT : Test::benchWebView():"amazon book page":                
     12 msec per iteration (total: 24, iterations: 2)            
RESULT : Test::benchWebView():"wikipedia Qt page":              
     12 msec per iteration (total: 24, iterations: 2)            

QGraphicsWebView (no tiling, should fall back to x copy region as it uses GraphicsView infrastructure for scrolling):

RESULT : Test::benchGraphicsWebView():"simplest painting":      
     8.8 msec per iteration (total: 71, iterations: 8)          
RESULT : Test::benchGraphicsWebView():"slashdot page":          
     100 msec per iteration (total: 100, iterations: 1)          
RESULT : Test::benchGraphicsWebView():"amazon book page":        
     88 msec per iteration (total: 88, iterations: 1)            
RESULT : Test::benchGraphicsWebView():"wikipedia Qt page":      
     137 msec per iteration (total: 137, iterations: 1)           

QGraphicsWebView (with my above tiling patch):

RESULT : Test::benchGraphicsWebView():"simplest painting":
     2.6 msec per iteration (total: 42, iterations: 16)
RESULT : Test::benchGraphicsWebView():"slashdot page":
     1.2 msec per iteration (total: 41, iterations: 32)
RESULT : Test::benchGraphicsWebView():"amazon book page":
     0.71 msec per iteration (total: 23, iterations: 32)
RESULT : Test::benchGraphicsWebView():"wikipedia Qt page":
     0.84 msec per iteration (total: 27, iterations: 32)
Comment 8 Antti Koivisto 2009-12-04 07:42:09 PST
Looks good, r=me
Comment 9 WebKit Commit Bot 2009-12-04 09:43:38 PST
Comment on attachment 44249 [details]
Split out the renderPrivate method to two, one for absolute coords, and one relative to the viewport

Clearing flags on attachment: 44249

Committed r51698: <http://trac.webkit.org/changeset/51698>
Comment 10 WebKit Commit Bot 2009-12-04 09:43:45 PST
All reviewed patches have been landed.  Closing bug.
Comment 11 Kenneth Rohde Christiansen 2009-12-04 09:46:45 PST
Reopening, as the bug report has uncommitted patches who are not yet up for review.
Comment 12 Benjamin Poulain 2009-12-07 03:07:49 PST
Created attachment 44395 [details]
Basic benchmark for the scrolling support

Basic benchmark used for testing the tiling support on real use cases.
A proper benchmark needs to be created for the integration in the source.
Comment 13 Benjamin Poulain 2009-12-07 03:12:29 PST
Created attachment 44396 [details]
Offscreen rendering of the mainframe at the QWebFrame level

This patch render the frame offscreen on a pixmap and always paint the pixmap in paint event.

The advantage of storing the pixmap at the frame level are:
 - improve the speed of graphics web view && qweb view
 - we can avoid completely GraphicsContext in some cases
 - we can have support for multi-frame

This is preliminary work, not meant to be integrated. It does not yet integrate the work of Kenneth
Comment 14 Kenneth Rohde Christiansen 2009-12-15 05:47:11 PST
Created attachment 44870 [details]
Slides from a presentation about the work
Comment 15 Antti Koivisto 2009-12-16 06:33:44 PST
The work for this is going on here: http://gitorious.org/~akoivisto/webkit/anttis-webkit/commits/tile-cache
Comment 16 Simon Hausmann 2010-03-08 08:15:18 PST
Work is now proceeding in 35146 as far as I can see.

*** This bug has been marked as a duplicate of bug 35146 ***