Multiprocess rendering in wayland - webkitgtk+
Iago Toral
itoral at igalia.com
Tue Jul 9 23:47:55 PDT 2013
El 2013-07-10 03:21, yan.wang at linux.intel.com escribió:
>> Hi Yan,
>> Is this code available somewhere?
>
> If you could get the code of webkit0-efl from tizen.org, you could
> find
> them on shared-surface branch. Kalyan integrated my implementation
> into
> it.
> Thanks.
I can only find these two webkit-efl repositories in tizen.org:
https://review.tizen.org/git/?p=framework/web/webkit-efl.git;a=summary
https://review.tizen.org/git/?p=profile/ivi/webkit-efl.git;a=summary
and they don't have a shared-surface branch.
how do I get to that webkit0-efl repository you mentioned?
Iago
> Yan Wang
>
>>
>> Cheers,
>> Daniel
>>
>> On 9 July 2013 09:13, <yan.wang at linux.intel.com> wrote:
>>> Hi,
>>> I have implemented Wayland buffer sharing mechanism in
>>> WebKit2-efl
>>> based
>>> on nested client example. Nested client share buffer from one
>>> nested
>>> client to nesting client which is the Wayland server of nested
>>> client
>>> and Wayland client of Weston at the same time.
>>> For WebKit2, there may be no only only one buffer which need be
>>> shared.
>>> So the basic idea is implementing a simple Wayland
>>> compositor/server (I
>>> called as Mini server.) like Weston on UI process Which could
>>> maintain a
>>> main loop to accept the link request from Web Process by another
>>> Wayland
>>> socket (E.g. wayland-10) because Weston use wayland-0 by default.
>>> This simple Wayland server only need implement
>>> wl_compositor_interface
>>> and wl_surface_interface.
>>> After web process creates a Wayalnd EGL window surface (Wayland
>>> hasn't
>>> Pixmap like X), we need call eglSwapBuffers twice. In the 1st
>>> swapping,
>>> surface_attach callback of wl_surface_interface will give you a
>>> wl_buffer pointer from graphics driver. You could use this
>>> wl_buffer to
>>> create EGL image / texture on UI process which includes the web
>>> content
>>> drawn by Web process. The 2nd swapping will swap your previous
>>> wl_buffer
>>> to back buffer of EGL window surface in graphics driver for drawing
>>> on
>>> Web process. Just ignore wl_buffer of 2nd swapping.
>>> About keeping the pair of wl_buffer/EGL window surface, we could
>>> have
>>> several method. One is add a event into wl_surface_interface
>>> protocol.
>>> It si simple. Another method to use id of compositorCreateSurafce
>>> callback of wl_compositor_surface.
>>> In general, the idea use wl_egl_window instead of X pixmap on Web
>>> process, and use EGL image/texture from wl_buffer to do compositing
>>> on
>>> UI process.
>>> Hope the above idea useful for you.
>>> Thanks.
>>>
>>> Yan Wang
>>>
>>>
>>>> On Mon, Jul 8, 2013 at 3:40 PM, Iago Toral <itoral at igalia.com>
>>>> wrote:
>>>>> El 2013-07-08 08:38, Jonas Ådahl escribió:
>>>>>
>>>>>> On Mon, Jul 8, 2013 at 8:05 AM, Iago Toral <itoral at igalia.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I am working on porting WebKitGTK+ to Wayland and we are having
>>>>>>> some
>>>>>>> difficulties figuring out the proper way to deal with the
>>>>>>> multiprocess
>>>>>>> architecture introduced with WebKit2.
>>>>>>>
>>>>>>> In WebKit2 we have two processes that are responsible for
>>>>>>> rendering
>>>>>>> the
>>>>>>> contents of a webpage. The WebProcess takes care of parsing
>>>>>>> HTML,
>>>>>>> identifying the various layers that are part of that HTML (that
>>>>>>> will
>>>>>>> be
>>>>>>> rendered separately) and the composition of all these layers to
>>>>>>> create
>>>>>>> the
>>>>>>> final view of the page. This composition stage is done with
>>>>>>> OpenGL.
>>>>>>> Once
>>>>>>> the
>>>>>>> composition is done, the other process (UIProcess) needs a way
>>>>>>> to
>>>>>>> access
>>>>>>> the
>>>>>>> results of the composition and paint them on the screen.
>>>>>>>
>>>>>>> In X11, this is achieved by having the WebProcess render the
>>>>>>> composition
>>>>>>> results to an offscreen XWindow and sharing the XWindow ID
>>>>>>> between
>>>>>>> the
>>>>>>> two
>>>>>>> processes. XComposite is used to redirect the XWindow to a
>>>>>>> pixmap.
>>>>>>> The
>>>>>>> pixmap is painted in the UIProcess.
>>>>>>>
>>>>>>> As far as we know, there is no API in Wayland to allow two
>>>>>>> different
>>>>>>> processes to share a surface, so we are not sure if the
>>>>>>> architecture
>>>>>>> I
>>>>>>> describe above is currently supported in Wayland.
>>>>>>>
>>>>>>> So I guess my questions are:
>>>>>>> - Is there a way to share a surface between two processes?
>>>>>>> - If not, is there a way to implement this architecture in
>>>>>>> Wayland
>>>>>>> as
>>>>>>> it
>>>>>>> is
>>>>>>> now?
>>>>>>> - Would it be possible/interesting to add surface sharing API
>>>>>>> to
>>>>>>> Wayland
>>>>>>> so
>>>>>>> that it supports this type of architectures naturally?
>>>>>>
>>>>>>
>>>>>> I proposed an extension[0] for solving this a while back, but
>>>>>> since
>>>>>> then as far as I know the general consensus has been to use
>>>>>> nested
>>>>>> compositing[1] for sharing surfaces between processes. The
>>>>>> nested
>>>>>> compositing is possible now, but if I remember correctly, it
>>>>>> will
>>>>>> require an extra draw, as there is no Wayland EGL API for
>>>>>> directly
>>>>>> providing buffers from a nested client to a surface of the host
>>>>>> client. Regarding the mentioned extension, I had a hacked up
>>>>>> proof-of-concept working, but have not continued working on it
>>>>>> considering that it nested compositing and added EGL API is
>>>>>> supposed
>>>>>> to be the way forward. If I have understood the situation wrong,
>>>>>> I'd
>>>>>> be happy to continue with the previously proposed protocol
>>>>>> extension.
>>>>>>
>>>>>> [0]
>>>>>>
>>>>>>
>>>>>> http://lists.freedesktop.org/archives/wayland-devel/2013-March/008093.html
>>>>>> [1]
>>>>>> http://cgit.freedesktop.org/wayland/weston/tree/clients/nested.c
>>>>>>
>>>>>> Jonas
>>>>>
>>>>>
>>>>> Thanks Jonas, that is useful, I will look into it. The need for
>>>>> an
>>>>> extra
>>>>> draw is suboptimal though, do I understand correctly that this
>>>>> extra
>>>>> Wayland
>>>>> EGL API you mention is intended to fix this?
>>>>
>>>> Yes, at least that is my understanding of it. I don't think I've
>>>> seen
>>>> any patches for it though, except this[0] which has some
>>>> similarities.
>>>>
>>>> Jonas
>>>>
>>>> [0]
>>>>
>>>> http://lists.freedesktop.org/archives/wayland-devel/2013-March/007746.html
>>>>
>>>>>
>>>>> Iago
>>>> _______________________________________________
>>>> wayland-devel mailing list
>>>> wayland-devel at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>>>>
>>> _______________________________________________
>>> wayland-devel mailing list
>>> wayland-devel at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>> _______________________________________________
>> wayland-devel mailing list
>> wayland-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>>
More information about the wayland-devel
mailing list