app_server

WebKit weekly report #38

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

Hello there,

As mentioned 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.

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 #23

Blog post by PulkoMandy on Thu, 2014-03-13 15:04

Hello everyone!

The report is a bit early this week, because I will not be available tomorrow (in case you wonder, I will be at the Forever Party). So, here it is.

WebKit weekly report #18

Blog post by PulkoMandy on Fri, 2014-02-07 10:17

Hi there!
As you can read on the frontpage, I'll continue working for Haiku in february.This will be the 5th month of this contract. Thanks to everyone who donated to Haiku, Inc for making this possible!

So, I've sorted out my filesystem issues over the week-end (no important data was lost), and I'm back to full-speed work. As I was saying last week, we had a problem with gcc4.7 not compiling the most recent WebKit code. I expected an update to gcc4.8 to solve this, but it didn't. What was needed is an extra configure option to enable C++11 threads support, as WebKit started using that and gcc doesn't autodetect the required OS support.

So, I rebuilt gcc with the needed option, and could get WebKit updated again, merging the work done at WebKit in december and january. As usual, not much crazy new features, but a lot of refactoring and cleanup. The API to manage the mouse cursor was changed to a simpler one that wastes less time and memory allocating stuff, some compile-time options were removed as all ports used the same value, and some custom classes were replaced with C++11 standard equivalents. This is made possible because of the release of a new version of Visual Studio, which still lacked some of these features. Of interest to us is the use of C++11 override. This comes from Java and allows to tell the compiler that a given method in a class should replace one from a base class. If it doesn't, you get a compile error. This is very useful in WebKit, as it allows detecting when the base class API changed (method removed or renamed, parameters added or removed, types changed, ...). I started adding the "override" keyword to some of the Haiku specific classes, and could remove a dozen of useless methods. This is one little change that will make further upgrades much easier. Another change is the deprecation of the history API we were using. This was the occasion to clean up our old code for this and get the back/forward buttons to work more reliably.

So, I started testing the new WebKit and noticed it was very crashy, with testsuite results as low as 4000 passing tests out of 32000 (ouch!). At least part of this was found to be caused by stricter stack alignment requirements on gcc side. gcc4.8 started using more x86 instructions that need 16-byte stack alignment. Before this only happened in some well-defined parts of the code, and I could fix this on a function-by-function basis. Now, all the code using floating point numbers is potentially affected. I can work around this by compiling all of WebKit with the -mstackrealign option, however this is something that should be fixed on Haiku side. Fortunately, the fix shouldn't be too complicated, it's just a change of the alignment constraint we have to do when creatign a new thread. If the initial alignment is correct, gcc generates code that always preserves it, unless you have some non-gcc compiled code in your function call stack (hand-written assembly code is one possible case of this).

There is apparently another crash related to the new mouse cursor code, which I haven't investigated yet. With these two out of the way, I'll have to run the testsuite again and see if there are other problems. With so few passing tests, the result html page (which list everything that failed) is too slow to browse and barely useable.

On to the new features now: it was more than time we fix the drawing glitches known as "border bleeding". You probably have noticed this problem on the side menu of this very website. There are some other places affected by this. Anyway, stippi did an amazing job of implementing ClipToPicture the right way. We now have a very fast implementation that also supports antialiasing. Bridging the gap between old and new apps, this improves the situation for both Gobe Productive (one of the few apps to use this API in BeOS days) and WebKit.

I had the code using ClipToPicture mostly ready in WebKit, waiting for the working implementation in Haiku. I could finally test it this morning and... well it doesn't work perfectly, yet. While it fixes the border bleeding, and we get our gradients where they should be again, when scrolling the page too fast (with pageup/pagedown buttons for example), the text above the gradients isn't drawn at all. Other websites also get new drawing problems in similar situations. I'm not sure what happens yet.

While stippi was working in app_server internals again, he also started implementing arbitrary view transforms. We had most of the API ready, with the BAffineTransform class available but only used to transform BPolygons. You can now set a transformation on a view and arbitrary rotate, scale, translate and otherwise distort all the drawing. This is all new and not yet completely tested (and in fact, there are some known bugs). But, it will allow a huge improvement of WebKit SVG rendering once it gets plugged in WebKit's GraphicsContext class.

I'm also trying to get some other devs into WebKit development, as working alone isn't fun. I've opened one "easy" issue on our bugtracker. It's about implementing Web Sockets support. There are some other things I would like to see done by others, for example support for web notifications using the BNotification API. Wouldn't it be nice to have a pop-up showing messages from gmail web page show next to the deskbar? Send in your patches!

WebKit weekly report #17

Blog post by PulkoMandy on Fri, 2014-01-31 08:50

Hello everyone!

The work started last week on ClipToPicture made some progress this week. We discussed this further with Stippi and now have a solution that doesn't involve rewriting half of app_server code, and is also a bit simpler and faster than what I tried to do first. I wrote a test application and some boilerplate code, then Stippi jumped in and implemented the missing bits. There are still some missing features like the ability to stack multiple clippings using PushState/PopState, and some problems when scaling and translating the view, as expected. We also met a drawing glitch when moving or resizing the window, however, we're not sure what's happening yet.

With Haiku switched to gcc4.8, I tried updating our WebKit to a newer version again. But, this doesn't work yet, and it seems the problem is a missing option in our gcc configure script invocation. I wanted to rebuilt gcc with the proper options, but I hit some filesystem corruption on my data partition. I'm now trying to backup everything, but a bug in Haiku makes this incredibly slow. Of course, I paused my contract since wednesday, and until I can get this issue sorted out and resume working. No data was lost, but touching some files on that partition triggers a KDL. So, it's time I reformat it and put the data back on it.

As a result of these FS problems, I haven't got much work done this week. So, this report is short.

WebKit weekly report #16

Blog post by PulkoMandy on Wed, 2014-01-22 11:33

Hello world!

As I said last week, the remaining drawing glitches are because of BView limitations. Well, it's time to solve those as well!

I'll start with what is now known as the "border bleeding" bug. You have encountered it if you tried opening the Haiku website, or the bugtracker, in Web+. You will easily notice that some items are completely filled with the border color, instead of the expected background one. To understand what's going on, let's have a look at the way WebKit draws things.

Syndicate content