On Wed, 26 Mar 2014 06:47:50 +0000
"Wang, Quanxian" <quanxian.w...@intel.com> wrote:

> Hi, Pq
> 
> In weston randr v2, I don't include the following question. I am still in 
> confused. Sorry about that.
> 
> >-----Original Message-----
> >From: Pekka Paalanen [mailto:ppaala...@gmail.com]
> >Sent: Saturday, March 22, 2014 8:20 PM
> >To: Wang, Quanxian
> >Cc: wayland-devel@lists.freedesktop.org
> >Subject: Re: weston: weston randr protocol for testing and configuration
> >
> >
> >Talking about threads here is misleading. Such threaded operations do not 
> >make
> >sense to begin with. The question is more about ambiguity between operations
> >and acknowledgements, and preferring explicit correspondence than relying on
> >protocol message ordering.
> >So the goal is good, but the rationale is slightly wrong.
> >
> [Wang, Quanxian] For this issue, I am still confused Supposed that case, the 
> first client is doing the randr without commit, however the second commit his 
> request. This will breakdown the first client if they works on the same 
> output. 
> My suggestion is that allocating a request id for every request set. (first 
> client request set, second client request set, .. etc), everyone could not 
> break down others operation before commit. Otherwise clients will not control 
> his actions.
> Even in callback, you must don't want to get the callback done event when you 
> are doing the action without commit.
> 

Hi,

clients cannot and must not ever interfere with each other. On the
protocol level, they simply cannot interfere, because all protocol
objects are private to a client (connection).

As long as you keep all uncommitted state as per protocol object
(wl_resource in the server), there cannot happen any mixups. In other
words, the not yet committed state should not be stored in struct
weston_output, but in some new struct that is created per wl_output
protocol object. This seems to require replacing
weston_output::resource_list with a new list, maybe.

There is no reason to create "request ids" at all.

The only thing you need, is that the commit request creates a
protocol object, that will then deliver the result of the commit. This
is very similar to how wl_surface.frame creates a new object, that then
delivers the 'done' event. The difference to wl_surface is only that
the commit creates the object, not a separate request, and the
delivered event is different.

Even that is not strictly necessary, but it makes a nicer API for
clients than just relying on the order of received events when the
result event was just in the global interface.

I don't really understand what your concerns are, so maybe I didn't
reply to them?

> >>
> >> For example
> >> In client:
> >> randr_resource =
> >> wl_randr_set_transform(randr.randr,wayland_output,argument.transform);
> >> wl_randr_add_listener(randr_resource, &randr_transform_listener,
> >> &randr);
> >>
> >> In compositor:
> >> randr_resource = wl_resource_create(client,&wl_randr_interface,1,
> >> action); ...
> >> wl_randr_send_action_done(randr_resource,
> >> 1<<WL_RANDR_ACTION_TRANSFORM, ret, action);
> >> wl_resource_destroy(randr_resource);
> >
> >I do not want a reply for every single part of output state, I want a reply 
> >for the
> >final commit request that applies all the state updates gathered so far. 
> >That will
> >also solve the atomicity problem.
> >
> >See how wl_surface works, and add a reply object only to the commit request.
> [Wang, Quanxian] Yes, when surface get a commit, it will applies all the 
> state updates gathered so far. And then inform user that (frame callback 
> called after weston_output_repaint), If client is updating the surface and 
> without commit. Suddenly when he got an reply event that surface has update 
> his previous changes. But he didn't run surface_commit at that time. Here I 
> don't understand if there are some conflict. (The reply callback is created 
> by surface_frame to keep tuning of his update.)
> That means compositor does the update when client don't run surface commit. 
> Sorry, I am really confused here. Actually it is the same as above question 
> to avoid the conflict.
> 

The wl_callback from a wl_surface.frame request will never deliver an
event, if the client has not also sent wl_surface.commit following that
particular request.

If there were earlier wl_surface.frame requests that were followed by
wl_surface.commits, then those events can be delivered, of course. The
point is, the client has a unique wl_callback object from every
wl_surface.frame request it did, and so it will explicitly know
for which request it is getting a reply to. That is what I'd like to
see in the randr protocol, too.

Sorry I haven't had the time to look at your latest series yet.


Thanks,
pq
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to