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;