76 |
|
int iterations; |
77 |
|
int size; |
78 |
|
double warmupSeconds; |
79 |
+ |
long warmupNanos; |
80 |
|
Pattern filter; |
81 |
|
|
82 |
|
// --------------- GC finalization infrastructure --------------- |
107 |
|
* Returns array of average times per job per run. |
108 |
|
*/ |
109 |
|
long[] time0(List<Job> jobs) throws Throwable { |
109 |
– |
final long warmupNanos = (long) (warmupSeconds * 1000L * 1000L * 1000L); |
110 |
|
final int size = jobs.size(); |
111 |
|
long[] nanoss = new long[size]; |
112 |
|
for (int i = 0; i < size; i++) { |
113 |
|
if (warmupNanos > 0) forceFullGc(); |
114 |
< |
long t0 = System.nanoTime(); |
115 |
< |
long t; |
116 |
< |
int j = 0; |
117 |
< |
do { jobs.get(i).work(); j++; } |
118 |
< |
while ((t = System.nanoTime() - t0) < warmupNanos); |
119 |
< |
nanoss[i] = t/j; |
114 |
> |
Job job = jobs.get(i); |
115 |
> |
long totalTime; |
116 |
> |
int runs = 0; |
117 |
> |
long startTime = System.nanoTime(); |
118 |
> |
do { job.work(); runs++; } |
119 |
> |
while ((totalTime = System.nanoTime() - startTime) < warmupNanos); |
120 |
> |
nanoss[i] = totalTime/runs; |
121 |
|
} |
122 |
|
return nanoss; |
123 |
|
} |
124 |
|
|
125 |
|
void time(List<Job> jobs) throws Throwable { |
126 |
< |
if (warmupSeconds > 0) time0(jobs); // Warm up run |
126 |
> |
if (warmupNanos > 0) time0(jobs); // Warm up run |
127 |
|
final int size = jobs.size(); |
128 |
|
final long[] nanoss = time0(jobs); // Real timing run |
129 |
|
final long[] milliss = new long[size]; |
231 |
|
size = intArg(args, "size", 1000); |
232 |
|
warmupSeconds = doubleArg(args, "warmup", 5); |
233 |
|
filter = patternArg(args, "filter"); |
234 |
+ |
|
235 |
+ |
warmupNanos = (long) (warmupSeconds * (1000L * 1000L * 1000L)); |
236 |
+ |
|
237 |
|
// System.out.printf( |
238 |
|
// "iterations=%d size=%d, warmup=%1g, filter=\"%s\"%n", |
239 |
|
// iterations, size, warmupSeconds, filter); |