QtWebkit Status update

QtWebkit Status update

  • Simon and Jasmin went through the API of QtWebKit. Most of the changes where changing names and parameters of methods, signals and slots. And some minor but important behaviour changes. The Plugin API is probably the only remaining feature for Qt4.4 and Lars and Simon have already progressed nicely.
  • Simon went ahead and integrated QtWebKit into the Assistant on the way finding/marking of text was added to the QWebView and QWebPage API.
  • Benjamin (icefox) continues adding the basic features to our demo browser. It is an awesome testbed to test QtWebKit, see what APIs is missing and what pages need work.
  • We (this means mostly Simon) have fixed some rendering bugs of control/form elements with certain styles. Interesting remark. QCommonStyle::drawComplex is drawing PE_FrameLineEdit if you ask it to draw PE_PanelLineEdit, but only if your lineedit has a frame. Most of the styles assume a pristine/virgin QPainter when painting. In QtWebKit this is not true so we have created a StylePainter which will set a Qt::NoBrush and probably other things in the future. We know that painting scrollbars need a tweak when topLeft() is not equal to (0,0) on some styles. Note to myself if you see a drawRect call, the rect will be filled with the brush…
  • We (see above for the actual meaning of we) have enabled the PageCache. The result is that you can go back and forth without waiting minutes. At least I had to wait minutes as I’m on a GPRS line. For other the effect is not too noticable as they will have broadband and because we are likely to not properly cache the ResourceRequest/ResourceHandle and do a real request on going back. More investigation is needed.
  • I have been doing some cosmetic changes, I liked the Safari3 feature to resize multiline text edits. I made sure that it is working in QtWebKit as well. I didn’t see the sizegrip icon and started to poke WebCore, RenderLayer and wondered why I can’t resize. After a while I found a call to WebCore::Settings (each WebCore::Page has a WebCore::Settings and we wrap around it with QWebSettings) in the CSSParser which defines if certain things are resizable, so I set this to true in QWebSettings and still didn’t see the icon (after adding a bunch of them to our WebKit qrc). It turned out that the way we used BitmapImage to show PlatformResources wasn’t too clever, we stuffed a QPixmap in there but didn’t use the size or the content of it.
  • I have started to look into image usage, both QPixmap and QImage in WebKit and started to look for other areas where we leak, keep a reference too many and such things. Candidates of memory waste are keeping both a QPixmap and QImage of the same image, caching the downloaded data (in the WebCore::DocumentLoader). At this point I would like to find a guide to script gdb, I want to print the last three frames everytime ::ref and ::deref of a DocumentLoader or SharedBuffer gets called. Alternatively I will have to toy with VirtualBox to install Solaris, or get OSX Server and try to legally run it in a VM to get access to DTrace.
  • Memory usage. I have started to profile QtWebKit. I have used examp console of o-hand.com and massif a valgrind tool. I have to get used to the new reporting of massif. It is not generating a postscript file anymore but you have to use a tool called ms_print to look at the snapshots. I hope some one is writing a cool gui for it soon(tm).
Comments are closed.