wiki:Webkit2Innards

Version 6 (modified by kbalazs@webkit.org, 10 years ago) (diff)

--

What is WebKit2 ?

WebKit2 is a substantial architectural enhancement to WebKit that allows clients/embedders of the framework to harness operating system (OS) level "features" for a more responsive and secure application. The "UI Process" is the application that uses the WebKit2 API C API to render web views. The "Web Process" are the one of the many processes that primarily run the web engine responsible for the downloading, parsing and rendering of content.

The main upsides of WebKit2 for client applications are :

  • more responsive application UIs that farm out CPU intensive web processing to a worker process
  • improved crash tolerance by isolating crash-prone code outside the UI process
  • better OS enforced security for memory accesses, file access, sensor access

The multi-process browser landscape

Microsoft's IE8 and Google's Chromium Browser was the pioneers in separating the UI process from the engine process. WebKit2 is Apple's fully public domain implementation of the same essential architectural concepts.

The UI Process and its APIs

Debugging tips (gdb)

Multiprocess architecture needs multiprocess debugging. Usually we are interested about what is happening in the web process. To debug the web process you need a way to attach to it. The simplest way is gdb --pid=$web_process_pid. It won't work if you need to see what's going on at program startup (for example you are debugging an initialization crash). That is the motivation behind http://trac.webkit.org/changeset/70760. Read the Changelog and follow the instructions if you need to stop execution at startup. (Tip: use the -s switch of pidof at the end of the command to restrict the output to the main thread pid.) Another way of attaching is the "set follow-fork-mode" command of newer gdb-s. By setting it as "set follow-fork-mode child" the debugger automatically attaches to the child process. Unfortunately there is a minor issue with it: you cannot interrupt the program and return to the debugger with C because it will immediately terminate (due to how we set up the web process). To work around this behavior see http://trac.webkit.org/changeset/81507.