1919import java .util .List ;
2020import java .util .concurrent .TimeUnit ;
2121
22- import org .openjdk .jmh .annotations .BenchmarkMode ;
2322import org .openjdk .jmh .annotations .Benchmark ;
23+ import org .openjdk .jmh .annotations .BenchmarkMode ;
2424import org .openjdk .jmh .annotations .Mode ;
2525import org .openjdk .jmh .annotations .OutputTimeUnit ;
2626import org .openjdk .jmh .annotations .Param ;
3939@ OutputTimeUnit (TimeUnit .SECONDS )
4040public class OperatorMergePerf {
4141
42- @ State (Scope .Thread )
43- public static class Input extends InputWithIncrementingInteger {
44-
45- @ Param ({ "1" , "1000" })
46- public int size ;
42+ // flatMap
43+ @ Benchmark
44+ public void oneStreamOfNthatMergesIn1 (final InputMillion input ) throws InterruptedException {
45+ Observable <Observable <Integer >> os = Observable .range (1 , input .size ).map (new Func1 <Integer , Observable <Integer >>() {
4746
48- @ Override
49- public int getSize ( ) {
50- return size ;
51- }
47+ @ Override
48+ public Observable < Integer > call ( Integer i ) {
49+ return Observable . just ( i ) ;
50+ }
5251
52+ });
53+ LatchedObserver <Integer > o = input .newLatchedObserver ();
54+ Observable .merge (os ).subscribe (o );
55+ o .latch .await ();
5356 }
5457
58+ // flatMap
5559 @ Benchmark
56- public void merge1SyncStreamOfN (final Input input ) throws InterruptedException {
60+ public void merge1SyncStreamOfN (final InputMillion input ) throws InterruptedException {
5761 Observable <Observable <Integer >> os = Observable .just (1 ).map (new Func1 <Integer , Observable <Integer >>() {
5862
5963 @ Override
@@ -66,9 +70,9 @@ public Observable<Integer> call(Integer i) {
6670 Observable .merge (os ).subscribe (o );
6771 o .latch .await ();
6872 }
69-
73+
7074 @ Benchmark
71- public void mergeNSyncStreamsOfN (final Input input ) throws InterruptedException {
75+ public void mergeNSyncStreamsOfN (final InputThousand input ) throws InterruptedException {
7276 Observable <Observable <Integer >> os = input .observable .map (new Func1 <Integer , Observable <Integer >>() {
7377
7478 @ Override
@@ -83,7 +87,7 @@ public Observable<Integer> call(Integer i) {
8387 }
8488
8589 @ Benchmark
86- public void mergeNAsyncStreamsOfN (final Input input ) throws InterruptedException {
90+ public void mergeNAsyncStreamsOfN (final InputThousand input ) throws InterruptedException {
8791 Observable <Observable <Integer >> os = input .observable .map (new Func1 <Integer , Observable <Integer >>() {
8892
8993 @ Override
@@ -98,7 +102,7 @@ public Observable<Integer> call(Integer i) {
98102 }
99103
100104 @ Benchmark
101- public void mergeTwoAsyncStreamsOfN (final Input input ) throws InterruptedException {
105+ public void mergeTwoAsyncStreamsOfN (final InputThousand input ) throws InterruptedException {
102106 LatchedObserver <Integer > o = input .newLatchedObserver ();
103107 Observable <Integer > ob = Observable .range (0 , input .size ).subscribeOn (Schedulers .computation ());
104108 Observable .merge (ob , ob ).subscribe (o );
@@ -115,6 +119,7 @@ public void mergeNSyncStreamsOf1(final InputForMergeN input) throws InterruptedE
115119 @ State (Scope .Thread )
116120 public static class InputForMergeN {
117121 @ Param ({ "1" , "100" , "1000" })
122+ // @Param({ "1000" })
118123 public int size ;
119124
120125 private Blackhole bh ;
@@ -134,4 +139,31 @@ public LatchedObserver<Integer> newLatchedObserver() {
134139 }
135140 }
136141
142+ @ State (Scope .Thread )
143+ public static class InputMillion extends InputWithIncrementingInteger {
144+
145+ @ Param ({ "1" , "1000" , "1000000" })
146+ // @Param({ "1000" })
147+ public int size ;
148+
149+ @ Override
150+ public int getSize () {
151+ return size ;
152+ }
153+
154+ }
155+
156+ @ State (Scope .Thread )
157+ public static class InputThousand extends InputWithIncrementingInteger {
158+
159+ @ Param ({ "1" , "1000" })
160+ // @Param({ "1000" })
161+ public int size ;
162+
163+ @ Override
164+ public int getSize () {
165+ return size ;
166+ }
167+
168+ }
137169}
0 commit comments