<p dir="ltr"><br>
On Sep 13, 2013 8:35 AM, "nobuhiko_tanibata" <<a href="mailto:nobuhiko_tanibata@xddp.denso.co.jp">nobuhiko_tanibata@xddp.denso.co.jp</a>> wrote:<br>
><br>
> Hi Michael-san,<br>
><br>
> As Pekka and Jason suggests in feedback, shall we clearly explain two topics before stepping in details.<br>
> - what ivi-shell tries to standardizes<br>
> - why ivi-controller tries to conrol surfaces and layers in separated process from a compositor.<br>
><br>
> @Pekka and Jason,<br>
> Thank you for many feedbacks. does it make sense about two topics to be clarified at first?</p>
<p dir="ltr">Yes, I think that sounds like a good idea.<br>
--Jason Ekstrand</p>
<p dir="ltr">><br>
> Best regards,<br>
> Tanibata<br>
><br>
><br>
> 2013-09-12 20:13 に Pekka Paalanen さんは書きました:<br>
><br>
>> On Mon, 9 Sep 2013 08:01:51 +0000<br>
>> <<a href="mailto:Michael.Schuldt@bmw.de">Michael.Schuldt@bmw.de</a>> wrote:<br>
>><br>
>>> Hi all,<br>
>>><br>
>>> let me give some technical background on the extension, and why we<br>
>>> have decided to design the first approach of the extensions like it<br>
>>> is published from Tanibata-san. In general, we would like to get the<br>
>>> feedback on the extensions, to get it fitting in the FOSS approach,<br>
>>> fulfilling the ivi requirements. See my comments in line.<br>
>><br>
>><br>
>> Jason Ekstrand had an excellent point asking which parts you are<br>
>> actually looking for to standardize.<br>
>><br>
>>> >> Hi,<br>
>>> >><br>
>>> >> I would like to get feedback about that if somebody has a similar<br>
>>> >> motivation to support ivi as well as desktop and tablet. So it is<br>
>>> >> not a stone, just a proposal. If somebody has good idea, I would<br>
>>> >> like to use it or collaborate it.<br>
>>> ><br>
>>> > Ok, I just had the understanding that the layer manager simply has<br>
>>> > to be a separate process and not built into the compositor.<br>
>>><br>
>>> Not really. Currently in the compliance from genivi, we have the<br>
>>> separation of Graphic Backend Server and LayerManagement. But this<br>
>>> should now change we want to skip that approach and want define a<br>
>>> protocol + ivi extensions, including a reference compositor. We have<br>
>>> decided to use wayland + ivi extension as compositor protocol and<br>
>>> weston as the reference implementation for that.<br>
>><br>
>><br>
>> Very cool!<br>
>><br>
>>> > If that is<br>
>>> > not the case, then that is very good news indeed. Everything that<br>
>>> > manages surfaces, layers, windows, or whatever belongs into the<br>
>>> > compositor process, where they are much easier to implement and you<br>
>>> > don't need to introduce interfaces and IPC which are later hard to<br>
>>> > develop further and cause latencies.<br>
>>><br>
>>> Sure that is the technical best fitting solution for that, we<br>
>>> do not want to use separate IPC for the composition approach.<br>
>>> > So I'm roughly on the same track as Andreas Pokorny.<br>
>>><br>
>>> We too, but unfortunately it is not possible all the time to get<br>
>>> the complete user interface included in the compositor itself. We<br>
>>> have to guarantee fast startup time to get early video running in 2<br>
>>> seconds. On different systems we can not achieve that with complete<br>
>>> HMI-UI is up.<br>
>><br>
>><br>
>> Oh, no, I am not suggesting to put user interfaces in the compositor,<br>
>> not at all. Only the window management, which means window positioning,<br>
>> z-order, etc. For instance, in Weston virtual desktops are implemented<br>
>> in the compositor, and not by an external process juggling window lists<br>
>> via IPC and setting visibilities and positions.<br>
>><br>
>> Proposing just like with weston and desktop-shell, there is the weston<br>
>> plugin called desktop-shell.so which does window management, and then<br>
>> there is the helper program weston-desktop-shell, that does all the UI<br>
>> drawing in a separate process.<br>
>><br>
>> Like Jason Ekstrand explained, desktop-shell.so and<br>
>> weston-desktop-shell communicate with each other not only using the<br>
>> core Wayland protocol, but also using a private (or proprietary)<br>
>> protocol extension.<br>
>><br>
>> While the basic IPC mechanism is all the same (Wayland), there are<br>
>> different parts: extensions. The desktop-shell extension is actually a<br>
>> protected one, only weston-desktop-shell as started by desktop-shell.so<br>
>> can access it.<br>
>><br>
>>> > Have you tried to map your IVI concepts of surface/layer/display to<br>
>>> > Wayland wl_surface, wl_subsurface, and wl_output? I don't really<br>
>>> > see what kind of interfaces your applications (Wayland clients?)<br>
>>> > expect to use.<br>
>>> ><br>
>>> > When I look at the protocol in ivi-shell.xml, I get the feeling<br>
>>> > that:<br>
>>> > - Interfaces ivi_layer, ivi_controller_surface,<br>
>>> >   ivi_controller_layer, ivi_controller_screen, and ivi_controller<br>
>>> > should be internal implementation details inside the weston<br>
>>> > process, not protocol. Having these as interfaces looks like the X<br>
>>> > architecture, where the X server process and window manager process<br>
>>> > continuously struggle to keep each other up-to-date, and carefully<br>
>>> > try to keep state in sync (and fail), which also makes races and<br>
>>> > glitches practically unavoidable. - Interface ivi_client is just a<br>
>>> > reinvention of wl_compositor and wl_subcompositor.<br>
>>> > - Interface ivi_surface is a reinvention of wl_surface.<br>
>>><br>
>>> Let me explain, why this separation occurs.<br>
>>> From the ivi perspective we have separated the different applications<br>
>>> in ivi-client, ivi-control.<br>
>>><br>
>>> ivi-client: Is just a client, like browser, navigation which is<br>
>>> embedded in the browser. That belongs to the ivi-surface. These<br>
>>> process have really limited access the can just create the surface<br>
>>> and that's all. The only important point which the want to know is if<br>
>>> the visibility has changed and the size to adapt the rendered<br>
>>> content.  A navigation should not render the content if it is not<br>
>>> visible or assigned to a layer.<br>
>><br>
>><br>
>> That is actually very well fitting to what we already have in Wayland.<br>
>> Just replace ivi-client with a wl_client (that's not a protocol<br>
>> object, it represents a display connection from a client process), and<br>
>> ivi-surface with wl_surface+wl_shell_surface.<br>
>><br>
>> The limited access is already there: in Weston, clients are free to<br>
>> create any number of wl_surfaces. However, no surface is shown<br>
>> anywhere on screen, unless it is assigned a suitable role. Examples of<br>
>> roles are: "pointer cursor", "top-level window", "drag icon", and<br>
>> "popup (menu)". Without a role, the compositor cannot know what to do<br>
>> with a surface.<br>
>><br>
>> "top-level window" and "popup menu" are shell concepts. If you replace<br>
>> wl_shell with your own ivi_shell, you could have roles like: "TV<br>
>> output", "rear camera", "speedometer". I'm totally pulling these out of<br>
>> my hat, I don't know what actually makes sense for you.<br>
>><br>
>> Then, your shell module in weston could handle such surfaces as you<br>
>> want. For example, if you get a surface with the role "TV output", the<br>
>> shell plugin could show that surface cloned on all entertainment<br>
>> monitors. Or whatever.<br>
>><br>
>> Or if something signals that now would be a /really/ good time to show<br>
>> the rear view camera, then your shell plugin can make it so, if there<br>
>> is a surface with such role assigned.<br>
>><br>
>> Now, something like a "rear view camera" sounds like a pretty important<br>
>> role for a surface, so you may want to make it privileged. You don't<br>
>> want any random application to claim to be a rear view camera. In that<br>
>> case, you can simply add whatever authentication you need to do in the<br>
>> shell plugin. For example, only this one process started directly by<br>
>> the shell plugin is allowed to claim the rear view camera role. Anyone<br>
>> else trying that will get killed. On the protocol design, such<br>
>> protection is pretty irrelevant. All you need is for the shell plugin<br>
>> to know who is authorized for what, and it can then enforce the<br>
>> restriction, whether the privileged role is requested by a method in a<br>
>> otherwise public protocol extension or in its own extension.<br>
>><br>
>>> ivi-controller : This is the main application which is controlling<br>
>>> the compositor like the UI. That could be the hmi, but it can also<br>
>>> some debug applications and application which is triggering a screen<br>
>>> shot of surfaces, layer, displays. If you driving a car during the<br>
>>> development you want to get some screenshots which are normally<br>
>>> triggered by an external application like the log and trace framework.<br>
>><br>
>><br>
>> Ok. I am proposing to have window management in the compositor plugin.<br>
>> But, you can offer additional debugging interfaces in the protocol.<br>
>><br>
>> For example, Weston does not allow clients to control *any* input<br>
>> devices. Clients simply cannot feed fake input events to other clients.<br>
>> But for testing and debugging, we need a way to fake input from a<br>
>> client. The solution: a test plugin.<br>
>><br>
>> The test pluging, which is loaded by the compositor only for testing<br>
>> (in your case debugging) purposes registers a new protocol extension:<br>
>> the test interface. That test interface then allows to do all kinds of<br>
>> ugly things from clients.<br>
>><br>
>> I'm not sure what you mean by "UI", but we separate controlling windows<br>
>> from drawing content, like I explained of the desktop shell.<br>
>><br>
>> As a recap, the shell plugin is what enforces and executes policies.<br>
>> Clients only indicate intent or purpose, like "This surface is a menu,<br>
>> and I want it to pop up right there on my window." A menu is an<br>
>> interesting example, since it is more than just a surface role: it<br>
>> comes with an input device grab. While the menu is up, input is<br>
>> directed to it. But, it is the shell plugin that can decide, that ok,<br>
>> you're done now, grab is broken, the menu surface hidden, and the<br>
>> client is signalled that something dismissed the menu. Also, clients<br>
>> cannot put up a menu at random times, it has to be done as a response<br>
>> to an input event. All this prevents many kinds of client misbehaviour.<br>
>><br>
>>> > Yes, I see there are some details to may want to control like<br>
>>> > surface opacity, that the current Wayland protocols do not support,<br>
>>> > but I don't think that replacing everything is a good way to start.<br>
>>> > It is also very hard to see how objects from all these interfaces<br>
>>> > are created, and how (if?) they associate to any other protocol<br>
>>> > objects.<br>
>>><br>
>>> On goal is to get setup a complete scenery during the startup of the<br>
>>> compositor. Therefore the compositor is able to just initialize the<br>
>>> main visible attribute during startup. That implies too that it<br>
>>> should be possible, without the final application is running (like<br>
>>> navigation). Therefore we need some logical objects like ivi-surface,<br>
>>> ivi-layer. Which can be already controlled, whithout a application<br>
>>> which holds the content is already running.<br>
>><br>
>><br>
>> But if all layer and window management is internal to the compositor<br>
>> process, then you don't need any of this control protocol.<br>
>><br>
>> Just create some internal data structures, and when a client comes up<br>
>> with a surface and requests a particular role, you can plug that<br>
>> surface into the slot you prepared in advance.<br>
>><br>
>> So, yes, this does imply that the compositor or the shell plugin knows<br>
>> the scenegraph, but... isn't that exactly the compositor's purpose, to<br>
>> gather the scenegraph and get it on screen? Clients "only" provide<br>
>> content.<br>
>><br>
>> For example, the desktop-shell protocol extension has special surface<br>
>> roles "background" and "panel". When weston-desktop-shell client<br>
>> assigns these roles to its surfaces, the compositor (shell plugin) will<br>
>> immediately plug them into the correct places on screen. If the shell<br>
>> plugin wanted to reserve screen space for them in advance, it could.<br>
>> After all, the shell plugin is responsible for arranging everything on<br>
>> (and off) screen.<br>
>><br>
>>> > Btw. if you need support for surface scaling and cropping, there<br>
>>> > have been discussion on the Wayland mailing list to bring a crop &<br>
>>> > scale protocol extension to Wayland. It is actually necessary for<br>
>>> > efficient video playback etc., so pushing that forward would be<br>
>>> > nice.<br>
>>><br>
>>> Yeah I see that, and we will consider it. I think we can redesign the<br>
>>> approach like source and destination region to the crop and scale<br>
>>> instead.<br>
>>><br>
>>> > After looking through the two links you gave, the ivi-shell.xml,<br>
>>> > and what you have wrote in the emails, I still have no clue what is<br>
>>> > the big picture here.<br>
>>> ><br>
>>> > - What processes are going to use which interfaces? It looks to me<br>
>>> >   like some interfaces are not meant for all Wayland clients, but<br>
>>> >   how is it supposed to work?<br>
>>> > - What components are in a whole IVI system, from the point of view<br>
>>> >   of Wayland protocol? What are the responsibilities of each<br>
>>> >   component and how are these distributed into processes?<br>
>>><br>
>>> ivi-control : Is the only process which is allowed to control the<br>
>>> compositor itself. But they need some informations about other<br>
>>> applications which are running. In the ivi-domain, each graphical<br>
>>> application has a unique ID which is defined by the OEM or platform<br>
>>> provider. ivi-client :  are just other applications like browser or<br>
>>> navigation.<br>
>><br>
>><br>
>> Ok, so you probably need a protocol interface to tell the compositor<br>
>> the unique ID, and perhaps an authentication/authorization interface,<br>
>> so that a shell plugin has all the needed information to do the<br>
>> controlling.<br>
>><br>
>>> > - What does a typical IVI application do in terms of Wayland<br>
>>> >   protocol? Are you using wl_compositor at all? Or any other<br>
>>> >   Wayland core interfaces?<br>
>>><br>
>>> We were focused on just using the wayland core interface. But we are<br>
>>> open to extend this approach.<br>
>><br>
>><br>
>> For the record, "Wayland core" is everything in<br>
>> <a href="http://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml">http://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml</a><br>
>> except wl_shell and wl_shell_surface, which are specific to desktop<br>
>> applications. But you are free to pick and choose individual global<br>
>> interfaces.<br>
>><br>
>>> > The protocol you propose seems to have many references to<br>
>>> > "id_native" and "native content", what is all this "native" stuff<br>
>>> > about? Or all the integer id's you seem to be sending back and<br>
>>> > forth, why can't you use real protocol objects to refer to those?<br>
>>><br>
>>> This is a little bit confusing, the initial set of these objects like<br>
>>> it is defined here :<br>
>>><br>
>>> <a href="http://git.projects.genivi.org/?p=layer_management.git;a=blob;f=wayland-ivi-extension/protocol/ivi-shell.xml;h=6092b13ef31e55f3db338be2e471d0e956be5b9e;hb=ivi-extension">http://git.projects.genivi.org/?p=layer_management.git;a=blob;f=wayland-ivi-extension/protocol/ivi-shell.xml;h=6092b13ef31e55f3db338be2e471d0e956be5b9e;hb=ivi-extension</a><br>

>>><br>
>>> Is focused on using the ivi-surface instead of the native id. The<br>
>>> rational behind that is to define unique ids over the complete<br>
>>> process space. Therefore the HMI is able to control the different<br>
>>> ivi-surface properties.<br>
>><br>
>><br>
>> Ok, you are inventing global names for these protocol objects, so you<br>
>> could do "window management" in a separate process, right? If you made<br>
>> the HMI controller a compositor plugin, these global names would not be<br>
>> needed, perhaps?<br>
>><br>
>> Perhaps I still do not fully grasp what the HMI controller is. And I<br>
>> have more of your emails to read still.<br>
>><br>
>> You may have a very good reason to keep the HMI controller separate,<br>
>> but the thing I am questioning is, is the interface towards the<br>
>> compositor the right one. Should the controller really be responsible<br>
>> for window management, or should it just send simple messages like<br>
>> "rear view camera on/off" or even "gear: reverse".<br>
>><br>
>> Even if the HMI controller was one big block in your architecture<br>
>> diagrams, you could split it into a compositor plugin and an external<br>
>> process. Then the private Wayland protocol extension they use to<br>
>> communicate with each other will be just an implementation detail of<br>
>> the whole block, which you might not need to standardize.<br>
>><br>
>> There actually exists examples of such a design: most of the<br>
>> Wayland-enabled EGL implementations use a private protocol extension to<br>
>> communicate between the server and the client. The trick is, both the<br>
>> server and the clients load the same libEGL, so the protocol becomes a<br>
>> completely hidden implementation detail.<br>
>><br>
>>> In the end we are very lucky about any input to get a final best<br>
>>> fitting solution for both the ivi aspects and the final<br>
>>> implementation for that in the FOSS domain.<br>
>><br>
>><br>
>> I am very glad you came forward. :-)<br>
>><br>
>><br>
>> Thanks,<br>
>> pq<br>
><br>
> _______________________________________________<br>
> wayland-devel mailing list<br>
> <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</p>