src/jdk.jfr/share/classes/jdk/jfr/consumer/ChunkParser.java
branchJEP-349-branch
changeset 57376 8e8a06a3059c
parent 57373 400db63e4937
child 57377 528d85d2fce5
--- a/src/jdk.jfr/share/classes/jdk/jfr/consumer/ChunkParser.java	Fri May 24 20:51:28 2019 +0200
+++ b/src/jdk.jfr/share/classes/jdk/jfr/consumer/ChunkParser.java	Mon May 27 18:33:13 2019 +0200
@@ -61,9 +61,15 @@
     private LongMap<Parser> parsers;
     private boolean chunkFinished;
     private InternalEventFilter eventFilter = InternalEventFilter.ACCEPT_ALL;
+    private boolean reuse;
 
-    public ChunkParser(RecordingInput input) throws IOException {
+    public ChunkParser(RecordingInput input, boolean reuse) throws IOException {
         this(new ChunkHeader(input), null, 500);
+       this.reuse = reuse;
+    }
+
+    public void setReuse(boolean resue) {
+        this.reuse = resue;
     }
 
     private ChunkParser(ChunkHeader header, ChunkParser previous, long pollInterval) throws IOException {
@@ -108,10 +114,13 @@
         return this.eventFilter;
     }
 
-    private void updateParserFilters() {
+    private void updateParsers() {
         parsers.forEach(p -> {
             if (p instanceof EventParser) {
                 EventParser ep = (EventParser) p;
+                if (reuse) {
+                    ep.setReuse(true);
+                }
                 long threshold = eventFilter.getThreshold(ep.getEventType().getName());
                 if (threshold >= 0) {
                     ep.setEnabled(true);
@@ -152,7 +161,7 @@
                 ParserFactory factory = new ParserFactory(metadata, constantLookups, timeConverter);
                 parsers = factory.getParsers();
                 typeMap = factory.getTypeMap();
-                updateParserFilters();
+                updateParsers();
             }
             if (contantPosition != chunkHeader.getConstantPoolPosition()) {
                 Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO, "Found new constant pool data. Filling up pools with new values");