On Wed, Aug 04, 2010 at 02:23:01PM -0700, Jamey Sharp wrote: > I found the spriteTrace and focus trace arrays weird and confusing, so I > put some thought into killing them with minimal performance impact. I > haven't managed to do that, but I did find some code improvements along > the way. Those follow. Peter, please pull these into your input-next > tree if you like them.
thanks, they looked good to me until ./../dix/events.c: In function ‘CheckDeviceGrabs’: ./../dix/events.c:3638: error: ‘checkFirst’ undeclared (first use in this function) ./../dix/events.c:3638: error: (Each undeclared identifier is reported only once ./../dix/events.c:3638: error: for each function it appears in.) I couldn't see anything obviously wrong with them and I did try to reproduce the changed if conditions on paper. I'm guessing the above is just a bad rebase but I'd appreciate it if you could fix this and test again. Reviewed-by: Peter Hutterer <[email protected]> > CheckDeviceGrabs currently walks down the window hierarchy from the > root to the window containing the pointer, or for keyboard events to the > focus window if that's nested deeper, and activates the first passive > grab it finds along the way. I think it should be possible to walk > upward instead, activating the last passive grab found. Then we only > need to cache the window that contains the pointer, not any of its > ancestors, so the storage requirement is constant instead of > proportional to the depth of the window hierarchy. > > Is that insane and/or impossible? So far all I can tell is I haven't got > it right yet. I don't think it's impossible though as you've noticed the current grab code could serve as an advertisement for a pasta maker. there are always side-effects and they're hard to track down and not easy to test. especially grab replaying on thawing devices. but in principle - yes, should be possible. Cheers, Peter > > The following changes since commit 7e0575baf14ec4a89492fd2780f9ab5b9244afbd: > Matt Turner (1): > ddc: Fix memory leak in GetEDID_DDC1 > > are available in the git repository at: > > git://people.freedesktop.org/~jamey/xserver input > > Jamey Sharp (4): > Let CheckPassiveGrabsOnWindow callers check if device is already > grabbed. > CheckDeviceGrabs: Delete redundant pWin->optional test. > Move replay-window check from ComputeFreezes to CheckDeviceGrabs. > Use GetCurrentRootWindow or equivalent instead of spriteTrace[0]. > > dix/devices.c | 2 +- > dix/enterleave.c | 13 +++------ > dix/events.c | 73 +++++++++++++++++++++++------------------------------ > include/dix.h | 2 +- > 4 files changed, 38 insertions(+), 52 deletions(-) _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
