src/jdk.jfr/share/classes/jdk/jfr/consumer/ChunkParser.java
branchJEP-349-branch
changeset 57604 838f9a7635b6
parent 57467 de154169948b
child 57640 46a77fccd251
equal deleted inserted replaced
57470:025c9b8eaefd 57604:838f9a7635b6
   119     }
   119     }
   120 
   120 
   121 
   121 
   122     /**
   122     /**
   123      * Reads an event and returns null when segment or chunk ends.
   123      * Reads an event and returns null when segment or chunk ends.
       
   124      *
       
   125      * @param awaitNewEvents wait for new data.
   124      */
   126      */
   125     public RecordedEvent readStreamingEvent(boolean awaitNewEvents) throws IOException {
   127     public RecordedEvent readStreamingEvent(boolean awaitNewEvents) throws IOException {
   126         long absoluteChunkEnd = chunkHeader.getEnd();
   128         long absoluteChunkEnd = chunkHeader.getEnd();
   127         while (true) {
   129         while (true) {
   128             RecordedEvent event = readEvent();
   130             RecordedEvent event = readEvent();
   190         }
   192         }
   191         return null;
   193         return null;
   192     }
   194     }
   193 
   195 
   194     private boolean awaitUpdatedHeader(long absoluteChunkEnd) throws IOException {
   196     private boolean awaitUpdatedHeader(long absoluteChunkEnd) throws IOException {
   195         Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO, "Waiting for more data (streaming). Read so far: " + chunkHeader.getChunkSize() + " bytes");
   197         if (Logger.shouldLog(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO)) {
       
   198             Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO, "Waiting for more data (streaming). Read so far: " + chunkHeader.getChunkSize() + " bytes");
       
   199         }
   196         while (true) {
   200         while (true) {
   197             chunkHeader.refresh();
   201             chunkHeader.refresh();
   198             if (absoluteChunkEnd != chunkHeader.getEnd()) {
   202             if (absoluteChunkEnd != chunkHeader.getEnd()) {
   199                 return false;
   203                 return false;
   200             }
   204             }
   207 
   211 
   208     private void fillConstantPools(long abortCP) throws IOException {
   212     private void fillConstantPools(long abortCP) throws IOException {
   209         long thisCP = chunkHeader.getConstantPoolPosition() + chunkHeader.getAbsoluteChunkStart();
   213         long thisCP = chunkHeader.getConstantPoolPosition() + chunkHeader.getAbsoluteChunkStart();
   210         long lastCP = -1;
   214         long lastCP = -1;
   211         long delta = -1;
   215         long delta = -1;
   212         boolean log = Logger.shouldLog(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE);
   216         boolean logTrace = Logger.shouldLog(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE);
   213         while (thisCP != abortCP && delta != 0) {
   217         while (thisCP != abortCP && delta != 0) {
   214             input.position(thisCP);
   218             input.position(thisCP);
   215             lastCP = thisCP;
   219             lastCP = thisCP;
   216             int size = input.readInt(); // size
   220             int size = input.readInt(); // size
   217             long typeId = input.readLong();
   221             long typeId = input.readLong();
   224             thisCP += delta;
   228             thisCP += delta;
   225             boolean flush = input.readBoolean();
   229             boolean flush = input.readBoolean();
   226             int poolCount = input.readInt();
   230             int poolCount = input.readInt();
   227             final long logLastCP = lastCP;
   231             final long logLastCP = lastCP;
   228             final long logDelta = delta;
   232             final long logDelta = delta;
   229             Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE, () -> {
   233             if (logTrace) {
   230                 return "New constant pool: startPosition=" + logLastCP + ", size=" + size + ", deltaToNext=" + logDelta + ", flush=" + flush + ", poolCount=" + poolCount;
   234                 Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE, () -> {
   231             });
   235                     return "New constant pool: startPosition=" + logLastCP + ", size=" + size + ", deltaToNext=" + logDelta + ", flush=" + flush + ", poolCount=" + poolCount;
       
   236                 });
       
   237             }
   232             for (int i = 0; i < poolCount; i++) {
   238             for (int i = 0; i < poolCount; i++) {
   233                 long id = input.readLong(); // type id
   239                 long id = input.readLong(); // type id
   234                 ConstantLookup lookup = constantLookups.get(id);
   240                 ConstantLookup lookup = constantLookups.get(id);
   235                 Type type = typeMap.get(id);
   241                 Type type = typeMap.get(id);
   236                 if (lookup == null) {
   242                 if (lookup == null) {
   249                 try {
   255                 try {
   250                     int count = input.readInt();
   256                     int count = input.readInt();
   251                     if (count == 0) {
   257                     if (count == 0) {
   252                         throw new InternalError("Pool " + type.getName() + " must contain at least one element ");
   258                         throw new InternalError("Pool " + type.getName() + " must contain at least one element ");
   253                     }
   259                     }
   254                     if (log) {
   260                     if (logTrace) {
   255                         Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE, "Constant Pool " + i + ": " + type.getName());
   261                         Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE, "Constant Pool " + i + ": " + type.getName());
   256                     }
   262                     }
   257                     for (int j = 0; j < count; j++) {
   263                     for (int j = 0; j < count; j++) {
   258                         long key = input.readLong();
   264                         long key = input.readLong();
   259                       Object resolved = lookup.getPreviousResolved(key);
   265                       Object resolved = lookup.getPreviousResolved(key);