Revision: 17232
Author: oleg.kulikoff
Date: Wed Mar  9 21:29:48 2011
Log: One more test for Vladimir: feasibile tasks combination from sporadic and periodic tests
http://code.google.com/p/mobicents/source/detail?r=17232

Modified:
/trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/JavaExecutorTest.java

=======================================
--- /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/JavaExecutorTest.java Wed Mar 9 09:36:48 2011 +++ /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/JavaExecutorTest.java Wed Mar 9 21:29:48 2011
@@ -2,6 +2,7 @@

 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.util.Random;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;

@@ -12,20 +13,41 @@
     private final static long tolerance = 3000000L;
     long last;
     long count = 0;
+ private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(400);
+    private Random rnd = new Random();

     @Test
public void testJavaTimers() throws InterruptedException, FileNotFoundException, IOException { - ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(400);
+
+
+        SporadicTask[] taskset0 = new SporadicTask[5];
+        for (int i = 0; i < taskset0.length; i++) {
+            taskset0[i] = new SporadicTask(1000000L);
+            executor.execute(taskset0[i]);
+        }

         TestTask[] taskset1 = new TestTask[20];
         for (int i = 0; i < taskset1.length; i++) {
-            taskset1[i] = new TestTask(1000000L, 10000000L);
- executor.scheduleAtFixedRate(taskset1[i], 0, 10000000L, TimeUnit.NANOSECONDS);
-        }
+            long offset = rnd.nextInt(30);
+ taskset1[i] = new TestTask(1000000L, 10000000L, offset * 1000000L); + executor.scheduleAtFixedRate(taskset1[i], offset, 10, TimeUnit.MILLISECONDS);
+        }
+
+        TestTask[] taskset2 = new TestTask[4];
+        for (int i = 0; i < taskset2.length; i++) {
+            long offset = rnd.nextInt(100);
+            taskset2[i] = new TestTask(90000000L, 10000000L, offset);
+ executor.scheduleAtFixedRate(taskset2[i], offset, 500, TimeUnit.MILLISECONDS);
+        }
+
         Thread.sleep(10000);

+        for (int i = 0; i < taskset0.length; i++) {
+ System.out.println("miss rate= " + taskset0[i].missrate() + ", total=" + taskset0[i].counter);
+        }
+
         for (int i = 0; i < taskset1.length; i++) {
-            System.out.println(taskset1[i].missrate());
+ System.out.println("miss rate= " + taskset1[i].missrate() + ", total=" + taskset1[i].counter);
         }

     }
@@ -40,10 +62,10 @@
         private int missCounter;
         private int counter;

-        public TestTask(long duration, long period) {
+        public TestTask(long duration, long period, long offset) {
             this.duration = duration;
             this.period = period;
-            this.deadline = System.nanoTime() + period;
+            this.deadline = System.nanoTime() + offset;
         }

         public void run() {
@@ -61,6 +83,45 @@

             deadline += period;
         }
+
+        public double missrate() {
+            return (double) this.missCounter / (double) this.counter;
+        }
+
+    }
+
+    private class SporadicTask implements Runnable {
+        private long deadline;
+
+        private int missCounter;
+        private int counter;
+
+        private long duration;
+
+        public SporadicTask(long duration) {
+            this.duration = duration;
+        }
+
+        public void run() {
+            counter++;
+
+            if (Math.abs(System.nanoTime() - deadline) > tolerance) {
+                missCounter++;
+            }
+
+            long stop = System.nanoTime() + duration;
+            while (System.nanoTime() < stop) {
+                int a = 7;
+                a++;
+            } // busy waiting
+
+            try {
+                Thread.sleep(10);
+            } catch (Exception e) {
+            }
+            this.deadline += 10000000L;
+            executor.execute(this);
+        }

         public double missrate() {
             return (double) this.missCounter / (double) this.counter;

Reply via email to