client side decorations

Mike Paquette paquette.mj at
Sat May 7 09:30:22 PDT 2011

On May 7, 2011, at 8:40 AM, microcai wrote:

>> I know some basic theory of compositor.  But I still have concern about
>> client window decorations. I think it is very likely an application
>> becomes unresponsive during resizing. Or a user tires to resize a
>> unresponsive window. In that case, I don't know if compositor can draw an
>> updated title bar or just stretch the outdated window context to the new
>> size. At same time how the compositor calculate rectangles' size and
>> position for title bar and buttons?
>> Peng
> Like I said, the compositor can call the client unconditional via
> signal. No matter it is live or dead lock.

I'm not entirely sure this is a workable idea.   Signals are not a reliable inter-process communications mechanism.  There are also limits as to what state can be safely modified from within a signal handler. Non-async-signal-safe functions cannot be invoked from a signal handler.   That would include functions that alter graphics state.  A normal thread of execution within a client may not be coded to anticipate asynchronous modification of the current graphics state.

The use of a lock to guard the graphics state is insufficient here.  If the graphics state is guarded by a lock, common when multiple asynchronous threads are sharing a graphics state, then the signal handler must also honor that lock.  This can lead to a contention problem should the signal handler be invoked on the thread already holding the lock.  

An application becoming unresponsive during app window resizing is an application design problem, and is best addressed at the application level, not as pat of the window server and compositor design.  The window server design should provide mechanisms, but strive to be as free of policy as possible.  Usability issues such as an unresponsive application are better handled as part of the user interface policy mechanisms, implemented as part of the toolkits and desktop management logic.

The window server can provide the mechanisms to move, hide, show, and resize windows.  Decisions as to how to handle unresponsive applications and present UI regarding these applications is best done at a higher level.

Mike Paquette

More information about the wayland-devel mailing list