diff -r baf88aa4f5db -r 0ef79bd7fb5c src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkParser.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkParser.java Tue Sep 17 19:37:49 2019 +0200 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ChunkParser.java Wed Sep 18 03:45:46 2019 +0200 @@ -48,14 +48,14 @@ public final class ChunkParser { static final class ParserConfiguration { - final boolean reuse; - final boolean ordered; - final ParserFilter eventFilter; + private final boolean reuse; + private final boolean ordered; + private final ParserFilter eventFilter; long filterStart; long filterEnd; - public ParserConfiguration(long filterStart, long filterEnd, boolean reuse, boolean ordered, ParserFilter filter) { + ParserConfiguration(long filterStart, long filterEnd, boolean reuse, boolean ordered, ParserFilter filter) { this.filterStart = filterStart; this.filterEnd = filterEnd; this.reuse = reuse; @@ -66,16 +66,30 @@ public ParserConfiguration() { this(0, Long.MAX_VALUE, false, false, ParserFilter.ACCEPT_ALL); } + + public boolean isOrdered() { + return ordered; + } } - // Checkpoint that finishes a flush segment - static final byte CHECKPOINT_FLUSH_MASK = 1; - // Checkpoint contains chunk header information in the first pool - static final byte CHECKPOINT_CHUNK_HEADER_MASK = 2; - // Checkpoint contains only statics that will not change from chunk to chunk - static final byte CHECKPOINT_STATICS_MASK = 4; - // Checkpoint contains thread related information - static final byte CHECKPOINT_THREADS_MASK = 8; + private enum CheckPointType { + // Checkpoint that finishes a flush segment + FLUSH(1), + // Checkpoint contains chunk header information in the first pool + CHUNK_HEADER(2), + // Checkpoint contains only statics that will not change from chunk to chunk + STATICS(4), + // Checkpoint contains thread related information + THREAD(8); + private final int mask; + private CheckPointType(int mask) { + this.mask = mask; + } + + private boolean is(int flags) { + return (mask & flags) != 0; + } + } private static final long CONSTANT_POOL_TYPE_ID = 1; private static final String CHUNKHEADER = "jdk.types.ChunkHeader"; @@ -98,11 +112,11 @@ this(input, new ParserConfiguration()); } - public ChunkParser(RecordingInput input, ParserConfiguration pc) throws IOException { + ChunkParser(RecordingInput input, ParserConfiguration pc) throws IOException { this(new ChunkHeader(input), null, pc); } - public ChunkParser(ChunkParser previous) throws IOException { + private ChunkParser(ChunkParser previous) throws IOException { this(new ChunkHeader(previous.input), previous, new ParserConfiguration()); } @@ -148,7 +162,7 @@ updateConfiguration(configuration, false); } - public void updateConfiguration(ParserConfiguration configuration, boolean resetEventCache) { + void updateConfiguration(ParserConfiguration configuration, boolean resetEventCache) { this.configuration = configuration; parsers.forEach(p -> { if (p instanceof EventParser) { @@ -178,7 +192,7 @@ * * @param awaitNewEvents wait for new data. */ - public RecordedEvent readStreamingEvent(boolean awaitNewEvents) throws IOException { + RecordedEvent readStreamingEvent(boolean awaitNewEvents) throws IOException { long absoluteChunkEnd = chunkHeader.getEnd(); while (true) { RecordedEvent event = readEvent(); @@ -256,8 +270,8 @@ input.readLong(); // timestamp input.readLong(); // duration input.readLong(); // delta - byte c = input.readByte(); - if ((c & CHECKPOINT_FLUSH_MASK)== 1) { + byte typeFlags = input.readByte(); + if (CheckPointType.FLUSH.is(typeFlags)) { flushOperation.run(); } } @@ -411,7 +425,7 @@ return chunkHeader.isLastChunk(); } - public ChunkParser newChunkParser() throws IOException { + ChunkParser newChunkParser() throws IOException { return new ChunkParser(this); }