diff options
author | Adam Jackson <ajax@redhat.com> | 2016-04-01 22:44:26 -0400 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2016-05-04 10:58:01 -0400 |
commit | 137ac094e7ab8c871f3b36e40ad826ac797f0e26 (patch) | |
tree | 176d84564ba28a563152634d5726ada7ce613969 /Xi | |
parent | ac164e58870d70640381e68b776eb95578c7fbd3 (diff) |
dix: Push UpdateCurrentTimeIf down out of the main loop
This was added in:
commit 312910b4e34215aaa50fc0c6092684d5878dc32f
Author: Chase Douglas <chase.douglas@canonical.com>
Date: Wed Apr 18 11:15:40 2012 -0700
Update currentTime in dispatch loop
Unfortunately this is equivalent to calling GetTimeInMillis() once per
request. In the absolute best case (as on Linux) you're only hitting the
vDSO; on other platforms that's a syscall. Either way it puts a pretty
hard ceiling on request throughput.
Instead, push the call down to the requests that need it; basically,
grab processing and event generation.
Cc: Chase Douglas <chase.douglas@canonical.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'Xi')
-rw-r--r-- | Xi/extinit.c | 2 | ||||
-rw-r--r-- | Xi/xiproperty.c | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/Xi/extinit.c b/Xi/extinit.c index 26c628cbd..75f383238 100644 --- a/Xi/extinit.c +++ b/Xi/extinit.c @@ -406,6 +406,7 @@ ProcIDispatch(ClientPtr client) if (stuff->data >= ARRAY_SIZE(ProcIVector) || !ProcIVector[stuff->data]) return BadRequest; + UpdateCurrentTimeIf(); return (*ProcIVector[stuff->data]) (client); } @@ -425,6 +426,7 @@ SProcIDispatch(ClientPtr client) if (stuff->data >= ARRAY_SIZE(SProcIVector) || !SProcIVector[stuff->data]) return BadRequest; + UpdateCurrentTimeIf(); return (*SProcIVector[stuff->data]) (client); } diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index e3b8f5abe..26d12066a 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -622,6 +622,7 @@ XIDeleteAllDeviceProperties(DeviceIntPtr device) XIPropertyPtr prop, next; XIPropertyHandlerPtr curr_handler, next_handler; + UpdateCurrentTimeIf(); for (prop = device->properties.properties; prop; prop = next) { next = prop->next; send_property_event(device, prop->propertyName, XIPropertyDeleted); @@ -672,6 +673,7 @@ XIDeleteDeviceProperty(DeviceIntPtr device, Atom property, Bool fromClient) } if (prop) { + UpdateCurrentTimeIf(); *prev = prop->next; send_property_event(device, prop->propertyName, XIPropertyDeleted); XIDestroyDeviceProperty(prop); @@ -793,9 +795,11 @@ XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type, dev->properties.properties = prop; } - if (sendevent) + if (sendevent) { + UpdateCurrentTimeIf(); send_property_event(dev, prop->propertyName, (add) ? XIPropertyCreated : XIPropertyModified); + } return Success; } |