Skip to content

Commit 4d9e3e6

Browse files
Merge pull request #993 from benjchristensen/perf-tests
JMH Perf Tests
2 parents b1bf1e5 + 5dc0292 commit 4d9e3e6

26 files changed

+314
-169
lines changed

build.gradle

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ buildscript {
1212
mavenCentral()
1313
jcenter()
1414
}
15-
15+
1616
apply from: file('gradle/buildscript.gradle'), to: buildscript
1717
}
1818

@@ -81,6 +81,28 @@ subprojects {
8181
task benchmarks(type: JavaExec) {
8282
main = 'org.openjdk.jmh.Main'
8383
classpath = sourceSets.perf.runtimeClasspath + sourceSets.main.output
84+
maxHeapSize = "512m"
85+
// args '-h' // help output
86+
args '-f' // fork
87+
args '1'
88+
args '-tu' // time unit
89+
args 'ns'
90+
args '-bm' // benchmark mode
91+
args 'avgt'
92+
args '-wi' // warmup iterations
93+
args '5'
94+
args '-i' // test iterations
95+
args '5'
96+
args '-r' // time per execution in seconds
97+
args '1'
98+
// args '-prof' // profilers
99+
// args 'HS_GC' // HotSpot (tm) memory manager (GC) profiling via implementation-specific MBeans
100+
// args 'HS_RT' // HotSpot (tm) runtime profiling via implementation-specific MBeans
101+
// args 'HS_THR' // HotSpot (tm) threading subsystem via implementation-specific MBeans
102+
// args 'HS_COMP' // HotSpot (tm) JIT compiler profiling via implementation-specific MBeans
103+
// args 'HS_CL' // HotSpot (tm) classloader profiling via implementation-specific MBeans
104+
// args 'STACK' // Simple and naive Java stack profiler
105+
// args '.*OperatorSerializePerf.*' // for running only a specific test
84106
}
85107

86108
}

rxjava-core/src/perf/java/rx/ObservableCreatePerformance.java renamed to rxjava-core/src/perf/java/rx/archive/ObservableCreatePerformance.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
package rx;
1+
package rx.archive;
22

3+
import rx.Observable;
34
import rx.Observable.OnSubscribe;
5+
import rx.Subscriber;
6+
import rx.archive.perf.AbstractPerformanceTester;
7+
import rx.archive.perf.LongSumObserver;
48
import rx.functions.Action0;
5-
import rx.perf.AbstractPerformanceTester;
6-
import rx.perf.LongSumObserver;
79

810
public class ObservableCreatePerformance extends AbstractPerformanceTester {
911

rxjava-core/src/perf/java/rx/composition/RangeMapTakeOnNextPerf.java renamed to rxjava-core/src/perf/java/rx/archive/composition/RangeMapTakeOnNextPerf.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package rx.composition;
1+
package rx.archive.composition;
22

33
import rx.Observable;
4-
import rx.perf.AbstractPerformanceTester;
5-
import rx.perf.IntegerSumObserver;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.IntegerSumObserver;
66
import rx.util.functions.Action0;
77
import rx.util.functions.Func1;
88

rxjava-core/src/perf/java/rx/operators/OperatorFromIterablePerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorFromIterablePerformance.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import java.util.Arrays;
44
import java.util.Iterator;
55

66
import rx.Observable;
7+
import rx.archive.perf.AbstractPerformanceTester;
8+
import rx.archive.perf.IntegerSumObserver;
9+
import rx.archive.perf.LongSumObserver;
710
import rx.functions.Action0;
8-
import rx.perf.AbstractPerformanceTester;
9-
import rx.perf.IntegerSumObserver;
10-
import rx.perf.LongSumObserver;
1111

1212
public class OperatorFromIterablePerformance extends AbstractPerformanceTester {
1313

rxjava-core/src/perf/java/rx/operators/OperatorMapPerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorMapPerformance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import rx.Observable;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.LongSumObserver;
46
import rx.functions.Action0;
57
import rx.functions.Func1;
6-
import rx.perf.AbstractPerformanceTester;
7-
import rx.perf.LongSumObserver;
88

99
public class OperatorMapPerformance extends AbstractPerformanceTester {
1010

rxjava-core/src/perf/java/rx/operators/OperatorMergePerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorMergePerformance.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import rx.Observable;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.IntegerSumObserver;
6+
import rx.archive.perf.LongSumObserver;
47
import rx.functions.Action0;
5-
import rx.perf.AbstractPerformanceTester;
6-
import rx.perf.IntegerSumObserver;
7-
import rx.perf.LongSumObserver;
88
import rx.schedulers.Schedulers;
99

1010
public class OperatorMergePerformance extends AbstractPerformanceTester {

rxjava-core/src/perf/java/rx/operators/OperatorObserveOnPerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorObserveOnPerformance.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import rx.Observable;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.IntegerSumObserver;
46
import rx.functions.Action0;
5-
import rx.perf.AbstractPerformanceTester;
6-
import rx.perf.IntegerSumObserver;
7+
import rx.operators.OperatorObserveOnBounded;
78
import rx.schedulers.Schedulers;
89

910
public class OperatorObserveOnPerformance extends AbstractPerformanceTester {

rxjava-core/src/perf/java/rx/operators/OperatorParallelPerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorParallelPerformance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import rx.Observable;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.IntegerSumObserver;
46
import rx.functions.Action0;
57
import rx.functions.Func1;
6-
import rx.perf.AbstractPerformanceTester;
7-
import rx.perf.IntegerSumObserver;
88

99
public class OperatorParallelPerformance extends AbstractPerformanceTester {
1010

rxjava-core/src/perf/java/rx/operators/OperatorRangePerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorRangePerformance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import rx.Observable;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.IntegerSumObserver;
46
import rx.functions.Action0;
5-
import rx.perf.AbstractPerformanceTester;
6-
import rx.perf.IntegerSumObserver;
77

88
public class OperatorRangePerformance extends AbstractPerformanceTester {
99

rxjava-core/src/perf/java/rx/operators/OperatorSerializePerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorSerializePerformance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import java.util.concurrent.CountDownLatch;
44
import java.util.concurrent.TimeUnit;
55

66
import rx.Observable;
77
import rx.Observable.OnSubscribe;
88
import rx.Subscriber;
9+
import rx.archive.perf.AbstractPerformanceTester;
10+
import rx.archive.perf.IntegerSumObserver;
911
import rx.functions.Action0;
1012
import rx.functions.Action1;
1113
import rx.functions.Func1;
12-
import rx.perf.AbstractPerformanceTester;
13-
import rx.perf.IntegerSumObserver;
1414
import rx.schedulers.Schedulers;
1515

1616
public class OperatorSerializePerformance extends AbstractPerformanceTester {

rxjava-core/src/perf/java/rx/operators/OperatorSynchronizePerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorSynchronizePerformance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import java.util.concurrent.CountDownLatch;
44
import java.util.concurrent.TimeUnit;
55

66
import rx.Observable;
77
import rx.Observable.OnSubscribe;
88
import rx.Subscriber;
9+
import rx.archive.perf.AbstractPerformanceTester;
10+
import rx.archive.perf.IntegerSumObserver;
911
import rx.functions.Action0;
1012
import rx.functions.Action1;
1113
import rx.functions.Func1;
12-
import rx.perf.AbstractPerformanceTester;
13-
import rx.perf.IntegerSumObserver;
1414
import rx.schedulers.Schedulers;
1515

1616
public class OperatorSynchronizePerformance extends AbstractPerformanceTester {

rxjava-core/src/perf/java/rx/operators/OperatorTakePerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorTakePerformance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import rx.Observable;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.IntegerSumObserver;
46
import rx.functions.Action0;
5-
import rx.perf.AbstractPerformanceTester;
6-
import rx.perf.IntegerSumObserver;
77

88
public class OperatorTakePerformance extends AbstractPerformanceTester {
99

rxjava-core/src/perf/java/rx/operators/OperatorZipPerformance.java renamed to rxjava-core/src/perf/java/rx/archive/operators/OperatorZipPerformance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package rx.operators;
1+
package rx.archive.operators;
22

33
import rx.Observable;
4+
import rx.archive.perf.AbstractPerformanceTester;
5+
import rx.archive.perf.IntegerSumObserver;
46
import rx.functions.Action0;
57
import rx.functions.Func2;
6-
import rx.perf.AbstractPerformanceTester;
7-
import rx.perf.IntegerSumObserver;
88

99
public class OperatorZipPerformance extends AbstractPerformanceTester {
1010

rxjava-core/src/perf/java/rx/perf/AbstractPerformanceTester.java renamed to rxjava-core/src/perf/java/rx/archive/perf/AbstractPerformanceTester.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package rx.perf;
1+
package rx.archive.perf;
22

33
import java.util.Iterator;
44

rxjava-core/src/perf/java/rx/perf/IntegerSumObserver.java renamed to rxjava-core/src/perf/java/rx/archive/perf/IntegerSumObserver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package rx.perf;
1+
package rx.archive.perf;
22

33
import rx.Subscriber;
44

rxjava-core/src/perf/java/rx/perf/LongSumObserver.java renamed to rxjava-core/src/perf/java/rx/archive/perf/LongSumObserver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package rx.perf;
1+
package rx.archive.perf;
22

33
import rx.Subscriber;
44

rxjava-core/src/perf/java/rx/performance/PerformanceTest.java renamed to rxjava-core/src/perf/java/rx/archive/performance/PerformanceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package rx.performance;
16+
package rx.archive.performance;
1717

1818
import java.util.concurrent.atomic.AtomicInteger;
1919
import java.util.concurrent.atomic.AtomicLong;

rxjava-core/src/perf/java/rx/performance/TestChainPerformance.java renamed to rxjava-core/src/perf/java/rx/archive/performance/TestChainPerformance.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package rx.performance;
16+
package rx.archive.performance;
1717

1818
import java.util.ArrayList;
1919
import java.util.concurrent.Callable;

rxjava-core/src/perf/java/rx/schedulers/SchedulerPerformanceTests.java renamed to rxjava-core/src/perf/java/rx/archive/schedulers/SchedulerPerformanceTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package rx.schedulers;
16+
package rx.archive.schedulers;
1717

1818
import java.util.Arrays;
1919

2020
import rx.Observable;
2121
import rx.Scheduler;
2222
import rx.Subscriber;
2323
import rx.functions.Action0;
24+
import rx.schedulers.Schedulers;
2425

2526
public class SchedulerPerformanceTests {
2627

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/**
2+
* Copyright 2014 Netflix, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package rx.archive.schedulers;
17+
18+
import rx.Observable;
19+
import rx.Observable.OnSubscribe;
20+
import rx.Scheduler;
21+
import rx.Scheduler.Inner;
22+
import rx.Subscriber;
23+
import rx.functions.Action1;
24+
import rx.schedulers.Schedulers;
25+
26+
/**
27+
* Used for manual testing of memory leaks with recursive schedulers.
28+
*
29+
*/
30+
public class TestRecursionMemoryUsage {
31+
32+
public static void main(String args[]) {
33+
usingFunc2(Schedulers.newThread());
34+
usingAction0(Schedulers.newThread());
35+
36+
usingFunc2(Schedulers.currentThread());
37+
usingAction0(Schedulers.currentThread());
38+
39+
usingFunc2(Schedulers.computation());
40+
usingAction0(Schedulers.computation());
41+
42+
System.exit(0);
43+
}
44+
45+
protected static void usingFunc2(final Scheduler scheduler) {
46+
System.out.println("************ usingFunc2: " + scheduler);
47+
Observable.create(new OnSubscribe<Long>() {
48+
49+
@Override
50+
public void call(final Subscriber<? super Long> o) {
51+
o.add(scheduler.schedule(new Action1<Inner>() {
52+
long i = 0;
53+
54+
@Override
55+
public void call(Inner inner) {
56+
i++;
57+
if (i % 500000 == 0) {
58+
System.out.println(i + " Total Memory: "
59+
+ Runtime.getRuntime().totalMemory()
60+
+ " Free: "
61+
+ Runtime.getRuntime().freeMemory());
62+
o.onNext(i);
63+
}
64+
if (i == 100000000L) {
65+
o.onCompleted();
66+
return;
67+
}
68+
69+
inner.schedule(this);
70+
}
71+
}));
72+
}
73+
}).toBlockingObservable().last();
74+
}
75+
76+
protected static void usingAction0(final Scheduler scheduler) {
77+
System.out.println("************ usingAction0: " + scheduler);
78+
Observable.create(new OnSubscribe<Long>() {
79+
80+
@Override
81+
public void call(final Subscriber<? super Long> o) {
82+
o.add(scheduler.schedule(new Action1<Inner>() {
83+
84+
private long i = 0;
85+
86+
@Override
87+
public void call(Inner inner) {
88+
i++;
89+
if (i % 500000 == 0) {
90+
System.out.println(i + " Total Memory: "
91+
+ Runtime.getRuntime().totalMemory()
92+
+ " Free: "
93+
+ Runtime.getRuntime().freeMemory());
94+
o.onNext(i);
95+
}
96+
if (i == 100000000L) {
97+
o.onCompleted();
98+
return;
99+
}
100+
inner.schedule(this);
101+
}
102+
}));
103+
}
104+
}).toBlockingObservable().last();
105+
}
106+
}

rxjava-core/src/perf/java/rx/subjects/SubjectPerformanceTests.java renamed to rxjava-core/src/perf/java/rx/archive/subjects/SubjectPerformanceTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package rx.subjects;
16+
package rx.archive.subjects;
1717

1818
import rx.Subscriber;
1919
import rx.functions.Action0;
20+
import rx.subjects.ReplaySubject;
2021

2122
public class SubjectPerformanceTests {
2223

0 commit comments

Comments
 (0)