summaryrefslogtreecommitdiff
path: root/frontends/kolibrios/fb
diff options
context:
space:
mode:
authorAshish Gupta <ashmew2@gmail.com>2017-09-22 00:28:30 +0200
committerAshish Gupta <ashmew2@gmail.com>2017-10-25 22:04:55 +0200
commit8a94c69a80c18a2226e512a8c2628582476dc6a2 (patch)
treed419dc17991427c358e8893283fcbb1ee62d9b33 /frontends/kolibrios/fb
parent2e26f10be9901e1675ff9f41e5125e164a2057d4 (diff)
downloadnetsurf-8a94c69a80c18a2226e512a8c2628582476dc6a2.tar.gz
netsurf-8a94c69a80c18a2226e512a8c2628582476dc6a2.tar.bz2
Fix polling
Diffstat (limited to 'frontends/kolibrios/fb')
-rw-r--r--frontends/kolibrios/fb/schedule.c121
1 files changed, 43 insertions, 78 deletions
diff --git a/frontends/kolibrios/fb/schedule.c b/frontends/kolibrios/fb/schedule.c
index 703c14d48..044899a21 100644
--- a/frontends/kolibrios/fb/schedule.c
+++ b/frontends/kolibrios/fb/schedule.c
@@ -15,41 +15,13 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#if defined(_TARGET_IS_KOLIBRIOS)
-
-#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
-#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
-#define timercmp(tvp, uvp, cmp) \
- (((tvp)->tv_sec == (uvp)->tv_sec) ? \
- ((tvp)->tv_usec cmp (uvp)->tv_usec) : \
- ((tvp)->tv_sec cmp (uvp)->tv_sec))
-#define timeradd(tvp, uvp, vvp) \
- do { \
- (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
- (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
- if ((vvp)->tv_usec >= 1000000) { \
- (vvp)->tv_sec++; \
- (vvp)->tv_usec -= 1000000; \
- } \
- } while (0)
-#define timersub(tvp, uvp, vvp) \
- do { \
- (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
- (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
- if ((vvp)->tv_usec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_usec += 1000000; \
- } \
- } while (0)
-
-#endif
#include <time.h>
#include <stdlib.h>
#include "utils/sys_time.h"
#include "utils/log.h"
-
+#include <kos32sys.h>
#include "kolibrios/fb/schedule.h"
#ifdef DEBUG_SCHEDULER
@@ -67,9 +39,9 @@ static struct nscallback *schedule_list = NULL;
struct nscallback
{
struct nscallback *next;
- struct timeval tv;
- void (*callback)(void *p);
- void *p;
+ uint32_t tv;
+ void (*callback)(void *p);
+ void *p;
};
/**
@@ -128,7 +100,6 @@ static nserror schedule_remove(void (*callback)(void *p), void *p)
nserror framebuffer_schedule(int tival, void (*callback)(void *p), void *p)
{
struct nscallback *nscb;
- struct timeval tv;
nserror ret;
/* ensure uniqueness of the callback and context */
@@ -137,22 +108,16 @@ nserror framebuffer_schedule(int tival, void (*callback)(void *p), void *p)
return ret;
}
- SRLOG("Adding %p(%p) in %d", callback, p, tival);
-
- tv.tv_sec = tival / 1000; /* miliseconds to seconds */
- tv.tv_usec = (tival % 1000) * 1000; /* remainder to microseconds */
+ LOG("Adding %p(%p) in %d", callback, p, tival);
nscb = calloc(1, sizeof(struct nscallback));
-
- gettimeofday(&nscb->tv, NULL);
- timeradd(&nscb->tv, &tv, &nscb->tv);
-
+ nscb->tv = get_tick_count() + tival / 10;
nscb->callback = callback;
nscb->p = p;
- /* add to list front */
- nscb->next = schedule_list;
- schedule_list = nscb;
+ /* add to list front */
+ nscb->next = schedule_list;
+ schedule_list = nscb;
return NSERROR_OK;
}
@@ -160,26 +125,26 @@ nserror framebuffer_schedule(int tival, void (*callback)(void *p), void *p)
/* exported function documented in framebuffer/schedule.h */
int schedule_run(void)
{
- struct timeval tv;
- struct timeval nexttime;
- struct timeval rettime;
- struct nscallback *cur_nscb;
- struct nscallback *prev_nscb;
- struct nscallback *unlnk_nscb;
+ uint32_t tv;
+ uint32_t nexttime;
+ uint32_t rettime;
+ struct nscallback *cur_nscb;
+ struct nscallback *prev_nscb;
+ struct nscallback *unlnk_nscb;
- if (schedule_list == NULL)
- return -1;
+ if (schedule_list == NULL)
+ return -1;
/* reset enumeration to the start of the list */
- cur_nscb = schedule_list;
- prev_nscb = NULL;
+ cur_nscb = schedule_list;
+ prev_nscb = NULL;
nexttime = cur_nscb->tv;
- gettimeofday(&tv, NULL);
+ tv = get_tick_count();
- while (cur_nscb != NULL) {
- if (timercmp(&tv, &cur_nscb->tv, >)) {
- /* scheduled time */
+ while (cur_nscb != NULL) {
+ if (tv > cur_nscb->tv) {
+ /* scheduled time */
/* remove callback */
unlnk_nscb = cur_nscb;
@@ -206,39 +171,39 @@ int schedule_run(void)
/* if the time to the event is sooner than the
* currently recorded soonest event record it
*/
- if (timercmp(&nexttime, &cur_nscb->tv, >)) {
- nexttime = cur_nscb->tv;
- }
- /* move to next element */
- prev_nscb = cur_nscb;
- cur_nscb = prev_nscb->next;
- }
- }
+ if (nexttime > cur_nscb->tv) {
+ nexttime = cur_nscb->tv;
+ }
+ /* move to next element */
+ prev_nscb = cur_nscb;
+ cur_nscb = prev_nscb->next;
+ }
+ }
/* make rettime relative to now */
- timersub(&nexttime, &tv, &rettime);
+ rettime = tv - nexttime;
- SRLOG("returning time to next event as %ldms",(rettime.tv_sec * 1000) + (rettime.tv_usec / 1000));
+ /* SRLOG("returning time to next event as %ldms",(rettime.tv_sec * 1000) + (rettime.tv_usec / 1000)); */
/* return next event time in milliseconds (24days max wait) */
- return (rettime.tv_sec * 1000) + (rettime.tv_usec / 1000);
+ return rettime * 10;
}
void list_schedule(void)
{
- struct timeval tv;
- struct nscallback *cur_nscb;
+ uint32_t tv;
+ struct nscallback *cur_nscb;
- gettimeofday(&tv, NULL);
+ tv = get_tick_count();
- LOG("schedule list at %ld:%ld", tv.tv_sec, tv.tv_usec);
+ LOG("schedule list at %u", tv);
- cur_nscb = schedule_list;
+ cur_nscb = schedule_list;
- while (cur_nscb != NULL) {
- LOG("Schedule %p at %ld:%ld", cur_nscb, cur_nscb->tv.tv_sec, cur_nscb->tv.tv_usec);
- cur_nscb = cur_nscb->next;
- }
+ while (cur_nscb != NULL) {
+ LOG("Schedule %p at %ld", cur_nscb, cur_nscb->tv);
+ cur_nscb = cur_nscb->next;
+ }
}