72 // u8 chunk duration nanos 73 // u8 chunk start ticks 74 this->be_write(JfrTime::frequency()); 75 // chunk capabilities, CompressedIntegers etc 76 this->be_write((u4)JfrOptionSet::compressed_integers() ? 1 : 0); 77 _chunkstate->reset(); 78 } 79 return is_open; 80 } 81 82 size_t JfrChunkWriter::close(intptr_t metadata_offset) { 83 write_header(metadata_offset); 84 this->flush(); 85 this->close_fd(); 86 return size_written(); 87 } 88 89 void JfrChunkWriter::write_header(intptr_t metadata_offset) { 90 assert(this->is_valid(), "invariant"); 91 // Chunk size 92 this->write_be_at_offset(size_written(), CHUNK_SIZE_OFFSET); 93 // initial checkpoint event offset 94 this->write_be_at_offset(_chunkstate->previous_checkpoint_offset(), CHUNK_SIZE_OFFSET + (1 * FILEHEADER_SLOT_SIZE)); 95 // metadata event offset 96 this->write_be_at_offset(metadata_offset, CHUNK_SIZE_OFFSET + (2 * FILEHEADER_SLOT_SIZE)); 97 // start of chunk in nanos since epoch 98 this->write_be_at_offset(_chunkstate->previous_start_nanos(), CHUNK_SIZE_OFFSET + (3 * FILEHEADER_SLOT_SIZE)); 99 // duration of chunk in nanos 100 this->write_be_at_offset(_chunkstate->last_chunk_duration(), CHUNK_SIZE_OFFSET + (4 * FILEHEADER_SLOT_SIZE)); 101 // start of chunk in ticks 102 this->write_be_at_offset(_chunkstate->previous_start_ticks(), CHUNK_SIZE_OFFSET + (5 * FILEHEADER_SLOT_SIZE)); 103 } 104 105 void JfrChunkWriter::set_chunk_path(const char* chunk_path) { 106 _chunkstate->set_path(chunk_path); 107 } 108 109 intptr_t JfrChunkWriter::size_written() const { 110 return this->is_valid() ? this->current_offset() : 0; 111 } 112 113 intptr_t JfrChunkWriter::previous_checkpoint_offset() const { 114 return _chunkstate->previous_checkpoint_offset(); 115 } 116 | 72 // u8 chunk duration nanos 73 // u8 chunk start ticks 74 this->be_write(JfrTime::frequency()); 75 // chunk capabilities, CompressedIntegers etc 76 this->be_write((u4)JfrOptionSet::compressed_integers() ? 1 : 0); 77 _chunkstate->reset(); 78 } 79 return is_open; 80 } 81 82 size_t JfrChunkWriter::close(intptr_t metadata_offset) { 83 write_header(metadata_offset); 84 this->flush(); 85 this->close_fd(); 86 return size_written(); 87 } 88 89 void JfrChunkWriter::write_header(intptr_t metadata_offset) { 90 assert(this->is_valid(), "invariant"); 91 // Chunk size 92 this->write_be_at_offset((jlong)size_written(), CHUNK_SIZE_OFFSET); 93 // initial checkpoint event offset 94 this->write_be_at_offset(_chunkstate->previous_checkpoint_offset(), CHUNK_SIZE_OFFSET + (1 * FILEHEADER_SLOT_SIZE)); 95 // metadata event offset 96 this->write_be_at_offset((jlong)metadata_offset, CHUNK_SIZE_OFFSET + (2 * FILEHEADER_SLOT_SIZE)); 97 // start of chunk in nanos since epoch 98 this->write_be_at_offset(_chunkstate->previous_start_nanos(), CHUNK_SIZE_OFFSET + (3 * FILEHEADER_SLOT_SIZE)); 99 // duration of chunk in nanos 100 this->write_be_at_offset(_chunkstate->last_chunk_duration(), CHUNK_SIZE_OFFSET + (4 * FILEHEADER_SLOT_SIZE)); 101 // start of chunk in ticks 102 this->write_be_at_offset(_chunkstate->previous_start_ticks(), CHUNK_SIZE_OFFSET + (5 * FILEHEADER_SLOT_SIZE)); 103 } 104 105 void JfrChunkWriter::set_chunk_path(const char* chunk_path) { 106 _chunkstate->set_path(chunk_path); 107 } 108 109 intptr_t JfrChunkWriter::size_written() const { 110 return this->is_valid() ? this->current_offset() : 0; 111 } 112 113 intptr_t JfrChunkWriter::previous_checkpoint_offset() const { 114 return _chunkstate->previous_checkpoint_offset(); 115 } 116 |