@Benchmark public int encodeAligned() { // Header final long header = JournalRecordHeader.makeHeader(JournalRecordTypes.ADD_JOURNAL, expectedEncoderSize); this.byteBuffer.putLong(0, header); // FileId<CompactCount<Id<RecordType<RecordBytes return addJournalRecordEncoder .on(byteBuffer, JournalRecordHeader.BYTES) .fileId(1) .compactCount(1) .id(1L) .recordType(1) .noRecord() .encodedLength(); }
@State(Scope.Thread) @BenchmarkMode(value = {Mode.Throughput, Mode.SampleTime}) @OutputTimeUnit(TimeUnit.MICROSECONDS) public class EncodersBench { private static final int expectedEncoderSize = JournalRecordHeader.BYTES + AddJournalRecordEncoder.expectedSize(0); private JournalInternalRecord record; private ByteBuffer byteBuffer; private AddJournalRecordEncoder addJournalRecordEncoder; private ActiveMQBuffer outBuffer; public static void main(String[] args) throws RunnerException { final Options opt = new OptionsBuilder() .include(EncodersBench.class.getSimpleName()) .addProfiler(GCProfiler.class) .warmupIterations(5) .measurementIterations(5) .forks(1) .build(); new Runner(opt).run(); } @Setup public void init() { this.byteBuffer = ByteBuffer.allocateDirect(expectedEncoderSize); this.byteBuffer.order(ByteOrder.nativeOrder()); this.addJournalRecordEncoder = new AddJournalRecordEncoder(); this.record = new JournalAddRecord(true, 1, (byte) 1, ZeroEncodingSupport.Instance); this.record.setFileID(1); this.record.setCompactCount((short) 1); this.outBuffer = new ChannelBufferWrapper( Unpooled.directBuffer(this.record.getEncodeSize(), this.record.getEncodeSize()) .order(ByteOrder.nativeOrder())); } @Benchmark public int encodeAligned() { // Header final long header = JournalRecordHeader.makeHeader(JournalRecordTypes.ADD_JOURNAL, expectedEncoderSize); this.byteBuffer.putLong(0, header); // FileId<CompactCount<Id<RecordType<RecordBytes return addJournalRecordEncoder .on(byteBuffer, JournalRecordHeader.BYTES) .fileId(1) .compactCount(1) .id(1L) .recordType(1) .noRecord() .encodedLength(); } @Benchmark public int encodeUnaligned() { outBuffer.clear(); record.encode(outBuffer); return record.getEncodeSize(); } @Benchmark public int encodeUnalignedWithGarbage() { outBuffer.clear(); final JournalAddRecord addRecord = new JournalAddRecord(true, 1, (byte) 1, ZeroEncodingSupport.Instance); addRecord.setFileID(1); addRecord.setCompactCount((short) 1); addRecord.encode(outBuffer); return addRecord.getEncodeSize(); } public enum ZeroEncodingSupport implements EncodingSupport { Instance; @Override public int getEncodeSize() { return 0; } @Override public void encode(ActiveMQBuffer buffer) {} @Override public void decode(ActiveMQBuffer buffer) {} } }