summaryrefslogtreecommitdiff
path: root/Xi
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2016-04-01 22:44:26 -0400
committerAdam Jackson <ajax@redhat.com>2016-05-04 10:58:01 -0400
commit137ac094e7ab8c871f3b36e40ad826ac797f0e26 (patch)
tree176d84564ba28a563152634d5726ada7ce613969 /Xi
parentac164e58870d70640381e68b776eb95578c7fbd3 (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.c2
-rw-r--r--Xi/xiproperty.c6
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;
}