WebKit weekly report #38

Blog post by PulkoMandy on Fri, 2014-07-25 07:37

Hello there,

As mentionned in the previous report, two weeks ago I attended the RMLL conference. As usual this was quite interesting, and an occasion to show Haiku to more people in the free software community. We got only about 10 persons attending our conference and 4 attending our workshop on making Haiku packages. However the main event was the "Libre Village" where we got to meet people and try to get as much of them as possible to try Haiku. I played Critical Mass with some people there, and also helped porting PyTouhou to Haiku.

Last week I worked only 3 days (back on WebKit) so I'll be reporting about the changes made in these two weeks now.

First of all, there was a problem in the 1.4.1 release not working in the nightlies. olta, js and jessicah worked on sorting out the issues with our cross compiler and things should be working fine now. This new build of WebKit makes use of Elf TLS support which was added by pdziepak. This should slightly improve performance and startup time.

However, the performance drop in 1.4.1 is very noticeable, and most people have complained that it is very slow, especially on virtual machines. Moreover, there are some severe drawing bugs that I thought were fixed, but that are in fact still there, and a few new problems were reported.

So, during these two weeks I worked on many small fixes and improvements to the drawing code in order to improve the situation.


The first fix is a more correct implementation of BLOB support. Blobs are used when uploading data in html forms and are a data structure allowing a mix of files and raw data to be uploaded. We didn't handle this properly, and websites trying to use it would crash.

Support for the Content-Disposition header was improved, so websites can now use it to force a file to be downloaded instead of shown inline.

I fixed a bug when converting a POST to GET when following HTTP redirects. Some headers were left in the request when they should have been removed, confusing some websites.

I modified the WebKit drawing code to more properly handle transparent drawing in some cases, leading to improved performance and more support for transparent images.

I fixed an important memory leak of BUrlRequest objects in WebKit. It should use less memory over time now. I also fixed some minor issues with the BUrlContext, but this only allows running Web+ with a debug mode BReferenceable.


I fixed a bug in Web+ "open containing folder". It will work more safely now and select the downloaded item in the opened window.

I made a change to the service kit to send all the HTTP headers in one go instead of splitting them into many small packets (one for each header). This shouldn't be needed, but some buggy HTTPd didn't work otherwise.

I fixed an issue with chunked gzipped HTTP, where flushing the received data wouldn't work and pages would get truncated.

Our libbind will now allow underscores in domain name, as used by many CDNs over the internet. This may improve your ability to listen online radios or watch videos on some websites.

Finally, I fixed two app_server issues with gradients. Gradients with an alpha channel would not work, and the radius of radial gradients was not actually used.

So, these two weeks I worked only on small things, but the overall result is a much improved browser on both the rendering and networking sides. I will continue to hunt the bugs and add missing features (next up is dashed lines support and gradients on text to make our SVG rendering even better).

WebKit weekly report #37

Blog post by PulkoMandy on Fri, 2014-07-04 10:47

Hello there!

Few things to mention this week.

The 1.4.1 version of HaikuWebkit with the new drawing code is available in the nightlies. While it seems to work better in many cases, there will likely be a few regressions, please give it a test run and report any rendering problem you get.

With this released, I started the work on getting WebKit2 to build. Following the advise from one of the webkit-gtk developers in last week update comments, I'm starting with a port that will use UNIX Domain Sockets. Once that compiles, and I have studied the code a bit more, I will have a try at switching to BMessages. I noticed that the Apple ports are not using domain sockets but a darwin/XNU-specific IPC, so I think the same should be possible for us. The IPC is only one of the many small changes, fixes and cleanups we will have to work on for WebKit2 to compile. And then there's the work needed to also get it to run in an useful way.

Finally, I will be at the RMLL (http://2014.rmll.info) with mmu_man and oco next week, showing Haiku to all the people gathering there. This means there will probably be little time for coding on the WebKit port, but maybe we'll meet people from other projects and help them port their code to Haiku.

WebKit weekly report #36

Blog post by PulkoMandy on Fri, 2014-06-27 07:37

Hello everyone,

Things are rather quiet on the WebKit side this week. I'm reviewing and fixing the remaining bugs with the new drawing code, which is now working rather well. On the WebKit side, I have implemented a limited form of transform support for regions (only handling translation and scaling, not shear and rotations), which has very good results. As a consequence, we now have mostly correct drawing and quite good performance. Before I do a release (I know the version in current nightlies is quite outdated now), I want to fix one more bug, which is the lack of video display on youtube. This is probably a simple fix once I understand why the current code isn't working anymore.

WebKit weekly report #35

Blog post by PulkoMandy on Fri, 2014-06-20 07:56

Hello world, another update!

The most exciting news this week is that I enabled the CSS JIT on Haiku. This is a new feature in WebKit that applies the same optimization techniques used for JavaScript, to CSS. CSS is becoming a complex language, and matching elements in the page with CSS rules and selectors can take a lot of time with complex stylesheets. WebKit will now use a JIT to compile CSS rules, which allows faster matching, and thus faster layout and rendering of the page. Since this uses mostly the same code as JS, enabling it was just a matter of switching the flag on in the webkit compile-time configuration.

WebKit weekly report #34

Blog post by PulkoMandy on Fri, 2014-06-06 06:53

Hello there,

app_server optimizations

Work on WebKit continued this week. In the previous report, I mentioned several issues with the new tiled rendering. Most of them turned out to be either problems in app_server or misuse of the APIs in the WebKit code. The most important part was that WebKit used region clipping and expected the region to be transformed when using SetTransform; however, with the current design, region clipping isn't affected by the view transform.

WebKit weekly report #33

Blog post by PulkoMandy on Fri, 2014-05-23 06:28

Hello everyone!

Work on the new drawing code for WebKit continues this week. We have scrolling support again (this was a bug in app_server, which stippi helped to fix), the scrollbars are drawn in the view thread (we are still using the fake scrollbars from WebKit), and the screen is updating as it should, so we get animations to work much better (for example the 2048 game plays with animations now).

WebKit weekly report #32

Blog post by PulkoMandy on Fri, 2014-05-16 12:04

Hello everyone,

I spent most of the week working on the texture mapper drawing code. I spent a lot of time tweaking the options (each change requires a complete build of Web+, so this added up to a lot of time...