[PATCH weston 0/6] ivi-shell proposal
nobuhiko_tanibata
nobuhiko_tanibata at xddp.denso.co.jp
Tue Sep 10 08:49:42 PDT 2013
2013-09-10 20:13 に Michael.Schuldt at bmw.de さんは書きました:
> Hi Jason, Tanibata-san
>
>> Hi Jason,
>>
>> Thank you very much for feedback.
>>
>>> Michale & Nobuhiko,
>>>
>>> First of all, thank you for the clarification and thank you for
>>> sending this to the list and being willing to work with the FOSS
>>> community to try and make a standard. I'm sorry that this reply is
>>> not
>>> inline. I think that would get disorganized and more confusing but
>>> I'll try to hit everything I saw.
>>>
>>> The first distinction that needs to be made (and I think Pekka was
>>> trying to hint at this) is what should be standardized. If you look
>>> at
>>> the current [wayland core protocol][1] there is only one shell
>>> protocol called wl_shell. I have proposed another which will probably
>>> get called [wl_fullscreen_shell][2]. Both of these have something in
>>> common: they are purely client-side. There is nothing whatsoever in
>>> the standard about managing surfaces. I think that we should focus on
>>> what you have designated ivi_client.
>
> Ok, now I got it. No we do not want to push it to the core protocol. We
> want
> to define a IVI-Shell like desktop shell and want to use weston for
> the reference
> implementation. The ivi-shell extension should be the minimum subset
> which shall provided
> by each ivi-compositor. But in terms of the genivi compliance we are
> able to define
> a shell protocol and say this is the minimal subset which is
> supported, and therefore
> we need a reference implementation too. Maybe we have mixed something
> here from our side.
> We will clarify that
>
Hi Jason,
The motivation from me is the same as the above as MichaelSchuldt says.
It would not be pushed to core protocol.
Best regards,
Tanibata
>>> What about the controller? If you look in the [weston protocol
>>> folder][3] you will find a number of different protocol files. Some
>>> of
>>> these are for experimental extensions such as subsurfaces which have
>>> not yet made it into wayland core. However, a number of them such as
>>> desktop-shell, screenshooter, etc. will *never* be standardized in
>>> the
>>> wayland core. These protocols are completely internal to weston and
>>> are considered implementation details. The primary example is
>>> desktop-shell. This protocol exists for the purpose of allowing the
>>> out-of-process shell controller manage surfaces similar to what you
>>> propose with ivi_shell. There are other shell plugins for weston
>>> (hawaii & orbital) that each have their own shell plugin and can have
>>> their own protocol for talking to an out-of-process controller.
>
> Yes this is our focus too, like I have described above.
>
>>> How does this impact your proposed protocol? Unless you are convinced
>>> that every single IVI system manufacturer will want to manage
>>> surfaces
>>> the same way, the controller should be left as a private
>>> implementation detail. You are free to do it out-of-process and talk
>>> the wayland protocol to do so (desktop-shell does) but there is no
>>> need to expose it as part of a standard protocol. By only
>>> standardizing the client interface you leave app developers (GPS,
>>> Media players, etc.) free to design their apps however they want and
>>> you leave IVI system manufacturers free to handle those clients and
>>> surfaces in whatever way they want.
>>>
>>> Ok, now on to actual suggestions. >From this point forward, I am
>>> going
>>> to completely ignore the controller side of things.
>>>
>>> First, I would propose to follow the pattern of wl_shell and make two
>>> interfaces for clients to talk to the compositor. For now, I am going
>>> to call them wl_ivi_shell and wl_ivi_surface. We can come up with
>>> different names if you'd like, but those seem reasonable. If we
>>> follow
>>> the pattern of wl_shell, wl_ivi_shell will probably exist for the
>>> sole
>>> purpose of creating wl_ivi_surface objects. This pattern is common in
>>> the protocol (wl_shell, wl_subcompositor, wl_compositor, etc.).
>>>
>>> The main question, then, becomes what to put in wl_ivi_surface. I'm
>>> not 100% sure what you intend with some of this surface and layer
>>> stuff, so I'm afraid I don't have a whole lot of specific suggestions
>>> on that for now. I do, however have some general thoughts and
>>> questions:
>>>
>>> First, I agree with Pekka that you can probably avoid the layers
>>> thing by simply using subsurfaces.
>>>
>> I see. However, we have a use case that several application, different
>> process share a layer. E.g. Navigation map and Route guidance are
>> separated into other application. It may kind of grouping parent
>> surfaces.
>>
>>> Second, Why are you specifying pixel formats in ivi_surface? Is the
>>> compositor supposed to tell the client what format to render in?
>>>
>>> Third, concerning the "visibility" flag. The wayland protocol as it
>>> currently stands tries to avoid telling clients specifically whether
>>> or not they are visible and where they are on screen. This is
>>> because,
>>> when clients abuse this information, compositors lose the freedom to
>>> throw surfaces around how they want. Instead of a visibility flag,
>>> the
>>> wl_surface interface provides a "frame" callback that the clients can
>>> use to know when was the last time they were drawn to the screen. A
>>> client should throttle rendering based on these frame events. If the
>>> surface is offscreen and the compositor wants the client to stop
>>> rendering it simply stop sending it frame events and the client will
>>> stop drawing.
>>>
>>
>> I have two concerning to use "frame" for realizing invisible.
>> - To set invisible, application needs to call clear color by itself. I
>> think it might be overhead for GPU. If we can realize it in shell, it
>> simply skips it to be composite. Of course, application shall stop
>> drawing as well.
>> - Invisible shall be conrolled by cetral controller due to safy
>> reason.It shall be done in lower part as much as possible. Ideally, if
>> we can allocate it to another physical plane, it may be best. If
>> Display
>> contoller doesn't support it, next is compositor.
>
> Here I am full inline with the post from Tanibata-san
>
> Regards
>
> Michael.
>>> Once again, thank you for mailing the list. I hope my thoughts above
>>> are helpful and can clear a few things up.
>>> Thanks,
>>> --Jason Ekstrand
>>>
>>> [1]:
>>> http://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml
>>> [2]
>>> [2]:
>>> http://lists.freedesktop.org/archives/wayland-devel/2013-
>>> August/010720.html [3]
>>> [3]: http://cgit.freedesktop.org/wayland/weston/tree/protocol [4]
>>> On Mon, Sep 9, 2013 at 7:59 PM, Nobuhiko Tanibata
>>> <NOBUHIKO_TANIBATA at xddp.denso.co.jp> wrote:
>>>
>> ppaalanen at gmail.com> wrote on o: "nobuhiko_tanibata"
>> <nobuhiko_tanibata at localhost.xddp.denso.co.jp>:
>>> Subject: Re: [PATCH weston 0/6] ivi-shell proposal
>>> On Sun, 08 Sep 2013 00:13:55 +0900
>>> nobuhiko_tanibata <nobuhiko_tanibata at localhost.xddp.denso.co.jp>
>>> wrote:
>>>
>>> 2013-09-06 19:16 に Pekka Paalanen さんは書きました:
>>>> On Fri, 6 Sep 2013 08:39:24 +0900
>>>> "Nobuhiko Tanibata" <NOBUHIKO_TANIBATA at xddp.denso.co.jp> wrote:
>>>>
>>>> "Pekka Paalanen" <ppaalanen at gmail.com> wrote on o: "Nobuhiko
>>>> Tanibata" <NOBUHIKO_TANIBATA at xddp.denso.co.jp>:
>>>>> Subject: Re: [PATCH weston 0/6] ivi-shell proposal
>>>>>
>>>>>
>>>>>> On Wed, 4 Sep 2013 09:08:26 +0900
>>>>>> "Nobuhiko Tanibata" <NOBUHIKO_TANIBATA at xddp.denso.co.jp> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> This series implements ivi-shell to fulfill use cases of
>>>>>>> In-Vehicle
>>>>>>> Infotainment, IVI. Such use cases are well overviewed in a
>>>>>>> project;
>>>>>>> Genivi IVI layer management.
>>>>>>> http://projects.genivi.org/ivi-layer-management/node/13 [5]
>>>>>>>
>>>>>>> A motivation of this series and basis idea are introduced by
>>>>>>> Ossama
>>>>>>> at Automotive Linux Summit 2012 spring. The series implements
>>>>>>> ivi-shell part. Additionally, GENIVI LM Client Library at slide
>>>>>>> 20
>>>>>>> >> >> is contributed to ivi-layer-management project to support
>>>>>>> compatible interfaces for Genivi Layer management users.
>>>>>>>
>>>
>>> http://events.linuxfoundation.org/images/stories/pdf/als2012_othman.pdf
>>> [6]
>>>>>>>
>>>>>>> Before I start implementation of ivi-shell, Core members of
>>>>>>> Genivi
>>>>>>> IVI layer management defined draft of ivi-shell.xml to fulfill
>>>>>>> requirements of IVI layer management, inviting Kristian. The
>>>>>>> series
>>>>>>> also includes the ivi-shell.xml with updates I faced in actual
>>>>>>> implementation.
>>>>>>>
>>>>>>> Please give me any suggestions.
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I have understood that the whole design has been cut deep into
>>>>>> stone
>>>>>> >> > a long time ago. What are you able to change now? I do not
>>>>>> think it is worth commenting on things you can no longer change,
>>>>>> so
>>>>>> what aspects >> > are you looking suggestions for?
>>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> I would like to get feedback about that if somebody has a similar
>>>>> motivation to support ivi as well as desktop and tablet. So it is
>>>>> not
>>>>> a stone, just a proposal. If somebody has good idea, I would like
>>>>> to
>>>>> use it or collaborate it.
>>>>
>>>> Ok, I just had the understanding that the layer manager simply has
>>>> to
>>>> be a separate process and not built into the compositor. If that is
>>>> not the case, then that is very good news indeed. Everything that
>>>> manages surfaces, layers, windows, or whatever belongs into the
>>>> compositor process, where they are much easier to implement and you
>>>> don't need to introduce interfaces and IPC which are later hard to
>>>> develop further and cause latencies. Roundtrips and synchronous
>>>> calls
>>>> between processes can become a difficult bottle-neck, as X11 has
>>>> taught us. Also having too many processes becomes a real mess when
>>>> trying to avoid deadlocks but still keep things coherent and
>>>> glitch-free (see X11 server vs. window manager vs. ...). So I'm
>>>> roughly on the same track as Andreas Pokorny.
>>>>
>>>> Weston should become the window manager and layer manager, while
>>>> weston backends deal with the hardware details of compositing. For
>>>> example, the Raspberry Pi backend of Weston forwards all
>>>> compositing to the VideoCore firmware, unlike any other backend
>>>> who actually render a composite themselves. However, the rpi
>>>> backend does not forward all surfaces to VideoCore all the time,
>>>> but only the visible ones as needed. And Weston is the only
>>>> component that *can* know what is visible at any time, since Weston
>>>> contains the complete scene graph. Weston's internal architecture
>>>> is also well-suited for *automatically* deciding how to use the
>>>> limited hardware resources like overlays efficiently, and fall back
>>>> as necessary, per each output frame. You cannot do that, if you
>>>> tell applications about specific hardware resources.
>>>>
>>> Yes, my understind is the same as yours.
>>>
>>> Great. :-)
>>> And I expects Weston backend
>>> you mentioned next paragraph is ideally released as reference from
>>> SoC
>>> vender. For exmple, some SoC vendor supports 2D blit engine which
>>> can
>>> effciently composite surfaces and relese weston backend as
>>> reference.
>>>
>>> Tbh, I doubt vendor's abilities in producing a proper Weston
>>> backend, and maintaining it as Weston changes. But yeah, something
>>> like that.
>>>
>>>> I suspect there might be some terminology differences here.
>>>> Something like what IVI calls a "compositor" is a "weston backend"
>>>> when talking about Weston and Wayland, and IVI layer manager is
>>>> actually a window manager which is just a shell plugin to Weston.
>>>> Or am I completely off?
>>>>
>>>>
>>> Yes, you are correct. And I focus on shell part to realize ivi
>>> requirements.
>>>
>>> Shell is usually the part which is primarily used by applications,
>>> not
>>> supporting components of a graphical environment (see wl_shell vs.
>>> desktop_shell protocol interfaces). I mean the public part of shell,
>>> like the wl_shell interface for desktop applications.
>>>
>>> Which brings me to another question: how likely is it that you
>>> actually want to support PC desktop applications unmodified
>>> directly on an IVI system? And I mean on the main compositor of an
>>> IVI system, which I would imagine to be quite a critical component.
>>>
>>> I think native IVI applications could be different enough to PC
>>> desktop applications, that creating a new shell interface to
>>> *replace*
>>> wl_shell (or whatever shell interface we will be using in the future
>>> for PC desktop) would be a right choice.
>>>
>>> If you actually do want to support PC desktop applications, I could
>>> see you having another, nested compositor just for supporting PC
>>> applications, which could run on a more restricted environment and
>>> maybe access to a more complex GPU which would be too risky for
>>> the main compositor in IVI. A sort of "untrusted" domain.
>>>
>>> Well, Genivi probably has already designed all that, so I'm just
>>> reinventing the wheel badly here.
>>>
>>>> Have you tried to map your IVI concepts of surface/layer/display to
>>>> Wayland wl_surface, wl_subsurface, and wl_output? I don't really
>>>> see what kind of interfaces your applications (Wayland clients?)
>>>> expect to use.
>>>>
>>> Yes. As you comment, some use case; visibility and crop/scaling is
>>> not
>>> supported now. So I thought starting new set of protocal to cover
>>> ivi
>>> requiremnts would be better. But I will re-consider them and mail it
>>> back.
>>>
>>> Right. I replied from purely FOSS point of view. You probably have
>>> time and money deadlines which you must meet while creating a
>>> self-standing product, and in that case, I do understand going with
>>> a big re-invention. I understand it, but I'm not happy about it,
>>> although if you can publish your ad hoc approach like you do here,
>>> you are contributing valuable experience to the community.
>>> Especially, if you say something about the shortcomings of the
>>> design and use experiences.
>>>
>>> I'm very happy to see this proposal on the mailing list, even when
>>> I do not agree with it.
>>>
>>>> When I look at the protocol in ivi-shell.xml, I get the feeling
>>>> that:
>>>> - Interfaces ivi_layer, ivi_controller_surface,
>>>> ivi_controller_layer,
>>>> ivi_controller_screen, and ivi_controller should be internal
>>>> implementation details inside the weston process, not protocol.
>>>> Having
>>>> these as interfaces looks like the X architecture, where the X
>>>> server
>>>> process and window manager process continuously struggle to keep
>>>> each
>>>> other up-to-date, and carefully try to keep state in sync (and
>>>> fail),
>>>> which also makes races and glitches practically unavoidable.
>>>>
>>> I have basic question to the above; strugling. wl_subsurface
>>> supports
>>> set_poistion now.
>>>
>>> set_position for sub-surfaces is *always* relative to the parent
>>> surface. The sub-surface position is given as a point on the parent
>>> surface. You still have no control where on the output any surface
>>> will appear, because you cannot control where the root surface of a
>>> tree of sub-surfaces will appear.
>>>
>>> If a parent surface is moved on screen, all its sub-surfaces stay
>>> glued to it automatically without any client interaction.
>>> I thought it implies positioning from a windowmanger is allowed on
>>> weston basic concept.
>>>
>>>> From a window manager, yes, but this assumes that the window manager
>>>> is in-process with weston; the window manager must be a compositor
>>>> plugin. Making it an external process will be a huge amount of
>>>> trouble and performance loss.
>>>>
>>> And the protocol you propose seems to be for an external window
>>> manager process, from my understanding.
>>> Each other up-to-date may occurs from window manager and weston
>>> internl
>>> decision.
>>> Or positioning of sub surfaces is out of scope of weston and it just
>>> composite them according to attributes.
>>> I may be wrong. Please let me know history.
>>>
>>> The first thing is that in Wayland core protocol, there is no
>>> global positioning system. There are no global coordinates in the
>>> protocol. All coordinates that clients deal with, are relative to
>>> some wl_surface. (This also allows the compositor to do arbitrary
>>> transformations on surfaces, because there is no need for clients
>>> to know about them, and so no need to express transformations in
>>> the protocol.)
>>>
>>> Sub-surfaces do not change that design.
>>>
>>> Another thing is that with sub-surface positioning, the information
>>> flows strictly into one direction, and we use wl_surface.commit
>>> request on the parent surface to synchronize everything. That means
>>> that a client can manipulate a whole tree of sub-surfaces, and
>>> *guarantee* an atomic, flicker-free, glitch-free update on screen.
>>>
>>> If one needed IPC between a compositor and a window manager, you
>>> would either risk visual glitches as compositor first draws one
>>> thing before the window manager says otherwise, or jerky compositor
>>> performance as it needs to wait for the window manager to respond
>>> before it can draw anything. I don't see any way around that.
>>>
>>>> - Interface ivi_client is just a reinvention of wl_compositor and
>>>> wl_subcompositor.
>>>> - Interface ivi_surface is a reinvention of wl_surface.
>>>>
>>>> Yes, I see there are some details to may want to control like
>>>> surface opacity, that the current Wayland protocols do not support,
>>>> but I don't think that replacing everything is a good way to start.
>>>>
>>>> It is also very hard to see how objects from all these interfaces
>>>> are created, and how (if?) they associate to any other protocol
>>>> objects.
>>>>
>>>> Btw. if you need support for surface scaling and cropping, there
>>>> have been discussion on the Wayland mailing list to bring a crop &
>>>> scale protocol extension to Wayland. It is actually necessary for
>>>> efficient video playback etc., so pushing that forward would be
>>>> nice.
>>>>
>>>>
>>> Thank you. I will check.
>>>
>>> Search for "wl_scaler", that was the working name of a proposal.
>>>
>>>> After looking through the two links you gave, the ivi-shell.xml,
>>>> and what you have wrote in the emails, I still have no clue what is
>>>> the big picture here.
>>>>
>>>>
>>> I will draw a pciture to explain them. I will mail it back later.
>>> Hi,
>>>
>>> I am enclosing a pdf to show relationship compositor, surface,
>>> layer,
>>> and controller.
>>>
>>> As Michael Schuldt says in reply, only a process will control
>>> attribute of surfaces and layers like position, visivility, order,
>>> and
>>> so on.
>>> The controller process is kind of central one to manage policy of
>>> layout and status of surfaces and layers by taking account into
>>> infomation in vehicle. For example, when gear position is rear, rear
>>> view camera would be set to the top of order and visible. When I see
>>> your comment,
>>> I think wl_subsurface can be applied to layer and parent can be
>>> mapped to layer. Now I am considering it. However, I have one use
>>> case
>>> for ivi to control attribute of wl_surface from outside, e.g set
>>> invisible to TV screen when speed is e.g 10km/s for safty. it is not
>>> welcome for users but I have to consider it. Each application can do
>>> it but on the safty point of view, it shall be handle in cetranl
>>> controller.
>>>
>>> Addtionally, As Michael Schuldt says in reply as well, for debugging
>>> purpose, controlling wl_surface would be required.
>>>
>>> When I see my picture by myself, ivi-shell will be window manager in
>>> side of weston. So it might not be conflict be concept of shell.
>>>
>>> Please give me your feedback.
>>>
>>> Best regards,
>>> Tanibata
>>>
>>>> Cool, thanks.
>>>>
>>>> I saw the terms surface, layer, etc. in the IVI docs but I didn't
>>>> really get what they are used for.
>>>>
>>>>> - What processes are going to use which interfaces? It looks to me
>>>>> like some interfaces are not meant for all Wayland clients, but
>>>>> how is it supposed to work?
>>>>>
>>>>> - What components are in a whole IVI system, from the point of view
>>>>> of Wayland protocol? What are the responsibilities of each
>>>>> component
>>>>> and how are these distributed into processes?
>>>>>
>>>>> - What does a typical IVI application do in terms of Wayland
>>>>> protocol? Are you using wl_compositor at all? Or any other
>>>>> Wayland core interfaces?
>>>>>
>>>>> These are just few questions to get you oriented on what kind of
>>>>> things puzzle me here. Obviously, I have never been in touch with
>>>>> Genivi stuff before, and I would assume most here have not either.
>>>>>
>>>>> The protocol you propose seems to have many references to
>>>>> "id_native" and "native content", what is all this "native" stuff
>>>>> about? Or all the integer id's you seem to be sending back and
>>>>> forth, why can't you use real protocol objects to refer to those?
>>>>>
>>>>>
>>>>> The above is the first impression from someone, who does not know
>>>>> anything about the IVI architecture, but is fairly familiar with
>>>>> Wayland. Sorry if it came out harsh, but I feel like I totally
>>>>> missed the whole background of this proposal: why design it like
>>>>> that?
>>>>>
>>>>
>>>> Thank you again for good feedback. They are very helpfull for me.
>>>>
>>>> Thank you,
>>>> pq
>>>> _______________________________________________
>>>> wayland-devel mailing list
>>>> wayland-devel at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel [1]
>>>>
>>> _______________________________________________
>>> wayland-devel mailing list
>>> wayland-devel at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel [1]
>>>
>>>
>>> Links: ------ [1]
>>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel [2]
>>> http://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml
>>> [3] http://lists.freedesktop.org/archives/wayland-devel/2013-
>>> August/010720.html [4]
>>> http://cgit.freedesktop.org/wayland/weston/tree/protocol [5]
>>> http://projects.genivi.org/ivi-layer-management/node/13 [6]
>>>
>> http://events.linuxfoundation.org/images/stories/pdf/als2012_othman.pdf
>> _______________________________________________ wayland-devel mailing
>> list wayland-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> -------------------------------------------------------
> BMW Group
> Michael Schuldt
> Plattformtechnol. Infotainment-Kompon.
> Max-Diamand-Straße 13
> 80788 München
>
> Mailto: michael.schuldt at bmw.de
> URL: http://www.bmwgroup.com
> -------------------------------------------------------
> Bayerische Motoren Werke Aktiengesellschaft
> Vorstand: Norbert Reithofer, Vorsitzender,
> Milagros Caiña Carreiro-Andree, Herbert Diess,
> Klaus Draeger, Friedrich Eichiner, Harald Krüger,
> Ian Robertson, Peter Schwarzenbauer.
> Vorsitzender des Aufsichtsrats: Joachim Milberg
> Sitz und Registergericht: München HRB 42243
> --------------------------------------------------------
>
>
> _______________________________________________
> 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