OpenJDK / lambda / lambda / jdk
changeset 8097:15e1cce39200
Optimize setting of combined op flags on head stream.
author | psandoz |
---|---|
date | Fri, 12 Apr 2013 17:22:49 +0200 |
parents | 6550cf4d25bd |
children | 689cf91b8f81 |
files | src/share/classes/java/util/stream/AbstractPipeline.java test-ng/boottests/java/util/stream/StreamOpFlagsTest.java |
diffstat | 2 files changed, 24 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/util/stream/AbstractPipeline.java Fri Apr 12 10:33:57 2013 -0400 +++ b/src/share/classes/java/util/stream/AbstractPipeline.java Fri Apr 12 17:22:49 2013 +0200 @@ -134,7 +134,9 @@ this.sourceSupplier = source; this.sourceStage = this; this.sourceOrOpFlags = sourceFlags & StreamOpFlag.STREAM_MASK; - this.combinedFlags = StreamOpFlag.combineOpFlags(sourceOrOpFlags, StreamOpFlag.INITIAL_OPS_VALUE); + // The following is an optimization of: + // StreamOpFlag.combineOpFlags(sourceOrOpFlags, StreamOpFlag.INITIAL_OPS_VALUE); + this.combinedFlags = (~(sourceOrOpFlags << 1)) & StreamOpFlag.INITIAL_OPS_VALUE; this.depth = 0; this.parallel = parallel; } @@ -152,7 +154,9 @@ this.sourceSpliterator = source; this.sourceStage = this; this.sourceOrOpFlags = sourceFlags & StreamOpFlag.STREAM_MASK; - this.combinedFlags = StreamOpFlag.combineOpFlags(sourceOrOpFlags, StreamOpFlag.INITIAL_OPS_VALUE); + // The following is an optimization of: + // StreamOpFlag.combineOpFlags(sourceOrOpFlags, StreamOpFlag.INITIAL_OPS_VALUE); + this.combinedFlags = (~(sourceOrOpFlags << 1)) & StreamOpFlag.INITIAL_OPS_VALUE; this.depth = 0; this.parallel = parallel; }
--- a/test-ng/boottests/java/util/stream/StreamOpFlagsTest.java Fri Apr 12 10:33:57 2013 -0400 +++ b/test-ng/boottests/java/util/stream/StreamOpFlagsTest.java Fri Apr 12 17:22:49 2013 +0200 @@ -26,8 +26,10 @@ import org.testng.annotations.Test; +import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; +import java.util.EnumSet; import java.util.List; import java.util.Spliterator; import java.util.function.Consumer; @@ -38,6 +40,7 @@ import static java.util.stream.StreamOpFlag.*; import static org.testng.Assert.*; +import static org.testng.Assert.assertEquals; @Test public class StreamOpFlagsTest { @@ -48,6 +51,21 @@ assertEquals(sourceFlags, toStreamFlags(combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE))); } + public void testInitialOpFlagsFromSourceFlags() { + List<StreamOpFlag> flags = new ArrayList<>(StreamOpFlagTestHelper.allStreamFlags()); + for (int i = 0; i < (1 << flags.size()); i++) { + int sourceFlags = 0; + for (int f = 0; f < flags.size(); f++) { + if ((i & (1 << f)) != 0) { + sourceFlags |= flags.get(f).set(); + } + } + + int opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE); + assertEquals(opsFlags, (~(sourceFlags << 1)) & StreamOpFlag.INITIAL_OPS_VALUE); + } + } + public void testSameCombine() { for (StreamOpFlag f : StreamOpFlagTestHelper.allStreamFlags()) { int sourceFlags = f.set();