grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Higher resolution timers


From: Colin D Bennett
Subject: Re: Higher resolution timers
Date: Tue, 20 May 2008 10:20:47 -0700

On Sun, 18 May 2008 19:27:05 +0300
Vesa Jääskeläinen <address@hidden> wrote:

> Colin D Bennett wrote:
> > I think that using the TSC (w/ RDTSC instruction) and calibrating it
> > with a quick 2-3 RTC tick loop at startup might be the easiest
> > option.
> 
> Hi Colin,
> 
> What kind of accuracy would you need?
> 
> I am just wondering if you just define function like:
> 
> grub_uint64_t
> grub_timer_[nu]time(void);
> 
> This could return time in nanoseconds, or microseconds from epoch.
> 
> Then during grub init you would call some platform function to 
> initialize time (calibrate when using rdtsc), and set proper offset 
> value so you get correct time when asking for time. On every system
> it would return time in this format, but granularity would be
> different.
> 
> This could be:
> 
> void
> grub_timer_init(void)
> 
> What do you think?

Vesa,
It sounds good.  Actually, for the kind of the situations I am
thinking of, high resolution timing is not required to be based on any
absolute real time, so we would not necessarily need to base it on RTC
time. Synchronizing it to RTC time would probably not be difficult, but
I thought I would mention what my requirements will be.

Here is the kind of situation I envision, in an event loop that handles
accepting user input and updating the screen at regular intervals
(possibly at 30 to 60 frames/sec, hence the need for higher resolution
timers) to support the user interface:

 /* Event loop */
 grub_uint32_t nextframe_time = 0;
 grub_uint32_t now;
 while (1)
 {
   now = grub_timer_utime();
   if (now >= nextframe_time)
   {
     /* Schedule the next frame. */
     nextframe_time = now + 1000000 / FRAMES_PER_SEC;
     do_animation_step();
   }
   if (key_is_pressed())
   {
     /* Handle key presses... */
   }
 }

So all I care about is the value relative to other calls to
grub_timer_utime() during a particular runtime of grub. It could start
at 0 if that is easier, but either way is fine.

Colin




reply via email to

[Prev in Thread] Current Thread [Next in Thread]