Skip to content
Snippets Groups Projects
Commit 9516e255 authored by Mark Charlebois's avatar Mark Charlebois Committed by Julian Oes
Browse files

Changes to improve performance


The work queue processing was causing too much overhead so a more
efficient check was implemented.

Signed-off-by: default avatarMark Charlebois <charlebm@gmail.com>
parent fea910d4
No related branches found
No related tags found
No related merge requests found
......@@ -287,6 +287,7 @@ uORB::DeviceNode::ioctl(device::file_t *filp, int cmd, unsigned long arg)
case ORBIOCSETINTERVAL:
sd->update_interval = arg;
sd->last_update = hrt_absolute_time();
return PX4_OK;
case ORBIOCGADVERTISER:
......@@ -426,31 +427,17 @@ uORB::DeviceNode::appears_updated(SubscriberData *sd)
break;
}
/*
* If the interval timer is still running, the topic should not
* appear updated, even though at this point we know that it has.
* We have previously been through here, so the subscriber
* must have collected the update we reported, otherwise
* update_reported would still be true.
*/
if (!hrt_called(&sd->update_call)) {
// If we have not yet reached the deadline, then assume that we can ignore any
// newly received data.
if (sd->last_update + sd->update_interval > hrt_absolute_time()) {
break;
}
/*
* Make sure that we don't consider the topic to be updated again
* until the interval has passed once more by restarting the interval
* timer and thereby re-scheduling a poll notification at that time.
*/
hrt_call_after(&sd->update_call,
sd->update_interval,
&uORB::DeviceNode::update_deferred_trampoline,
(void *)this);
/*
* Remember that we have told the subscriber that there is data.
*/
sd->update_reported = true;
sd->last_update = hrt_absolute_time();
ret = true;
break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment