1 package org.apache.maven.plugin.surefire.runorder;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25
26
27
28
29 public class ThreadedExecutionScheduler
30 {
31 private final int numThreads;
32
33 private final int runTime[];
34
35 private final List[] lists;
36
37 public ThreadedExecutionScheduler( int numThreads )
38 {
39 this.numThreads = numThreads;
40 runTime = new int[numThreads];
41 lists = new List[numThreads];
42 for ( int i = 0; i < numThreads; i++ )
43 {
44 lists[i] = new ArrayList<Class>();
45 }
46 }
47
48 public void addTest( PrioritizedTest prioritizedTest )
49 {
50 final int leastBusySlot = findLeastBusySlot();
51 runTime[leastBusySlot] += prioritizedTest.getTotalRuntime();
52
53 lists[leastBusySlot].add( prioritizedTest.getClazz() );
54 }
55
56 public List<Class> getResult()
57 {
58 List<Class> result = new ArrayList<Class>();
59 int index = 0;
60 boolean added;
61 do
62 {
63 added = false;
64 for ( int i = 0; i < numThreads; i++ )
65 {
66 if ( lists[i].size() > index )
67 {
68 result.add( (Class) lists[i].get( index ) );
69 added = true;
70 }
71 }
72 index++;
73 }
74 while ( added );
75 return result;
76 }
77
78 private int findLeastBusySlot()
79 {
80 int leastBusy = 0;
81 int minRuntime = runTime[0];
82 for ( int i = 1; i < numThreads; i++ )
83 {
84 if ( runTime[i] < minRuntime )
85 {
86 leastBusy = i;
87 minRuntime = runTime[i];
88 }
89 }
90 return leastBusy;
91 }
92 }