annotate sched/HRTimer.java @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents 7357e1dc2ad6
children
rev   line source
samer@0 1
samer@0 2 package saml.sched;
samer@0 3
samer@0 4 public class HRTimer {
samer@0 5
samer@2 6 private static long min_sleep=1200000; // 1.2 ms
samer@2 7 private static long wake_before=500000; // 0.5ms
samer@0 8
samer@0 9 public static void setMinimumSleepTime(long t) { min_sleep=t; }
samer@0 10 public static void setWakePrealarm(long t) { wake_before=t; }
samer@0 11
samer@0 12 public static long now() { return System.nanoTime(); }
samer@0 13 public static long sleepUntil(long t1) throws Exception {
samer@0 14 long t0=System.nanoTime();
samer@0 15 long dt=t1-t0;
samer@0 16 // System.out.println("need to wait for " + dt +"ns");
samer@0 17 if (dt>min_sleep) {
samer@0 18 long sleep_time=dt-wake_before;
samer@0 19 long millis=sleep_time/1000000;
samer@0 20 int nanos=(int)(sleep_time-millis*1000000);
samer@0 21 // System.out.println("will sleep for "+millis+"ms + "+nanos+"ns");
samer@0 22 Thread.sleep(millis,nanos);
samer@0 23 }
samer@0 24
samer@0 25 // go into a tight loop for the last few microseconds
samer@0 26 t0=System.nanoTime();
samer@0 27 // System.out.println("need to spin for "+(t1-t0)+"ns");
samer@0 28 while (t0<t1) t0=System.nanoTime();
samer@0 29 return t0-t1;
samer@0 30 }
samer@0 31
samer@0 32 public static long estimateMinSleep() throws Exception {
samer@0 33 long t0,t1;
samer@0 34
samer@0 35 t0=System.nanoTime();
samer@0 36 Thread.sleep(0,1);
samer@0 37 t1=System.nanoTime();
samer@0 38 return t1-t0;
samer@0 39 }
samer@0 40
samer@0 41 public static long estimateGranularity() {
samer@0 42 long t0, t1;
samer@0 43 t0=System.nanoTime();
samer@0 44 t1=System.nanoTime();
samer@0 45 return t1-t0;
samer@0 46 }
samer@0 47 };