From 9f4bcf7e3eaba782a3772a6c896ee204532177a2 Mon Sep 17 00:00:00 2001 From: wusheng Date: Mon, 18 Sep 2017 21:56:53 +0800 Subject: [PATCH] Optimise ID encoding. Only do once for every ID object. --- .../agent/core/context/ContextCarrier.java | 2 +- .../core/context/ids/DistributedTraceId.java | 2 +- .../apm/agent/core/context/ids/ID.java | 20 ++++++++++++------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java index 82dd3c5c38..3854e13362 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java @@ -68,7 +68,7 @@ public class ContextCarrier implements Serializable { public String serialize() { if (this.isValid()) { return StringUtil.join('|', - this.getTraceSegmentId().toBase64(), + this.getTraceSegmentId().encode(), this.getSpanId() + "", this.getParentApplicationInstanceId() + "", this.getEntryApplicationInstanceId() + "", diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/DistributedTraceId.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/DistributedTraceId.java index f6e5623efe..5dd702453c 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/DistributedTraceId.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/DistributedTraceId.java @@ -27,7 +27,7 @@ public abstract class DistributedTraceId { } public String toBase64() { - return id.toBase64(); + return id.encode(); } @Override diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java index db936aee5c..91d1926cdc 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java @@ -15,29 +15,31 @@ public class ID { private long part1; private long part2; private long part3; + private String encoding; public ID(long part1, long part2, long part3) { this.part1 = part1; this.part2 = part2; this.part3 = part3; + this.encoding = null; } - public ID(String base64String) { + public ID(String encodingString) { int index = 0; for (int part = 0; part < 3; part++) { String encodedString; - char potentialTypeChar = base64String.charAt(index); + char potentialTypeChar = encodingString.charAt(index); long value; if (potentialTypeChar == '#') { - encodedString = base64String.substring(index + 1, index + 5); + encodedString = encodingString.substring(index + 1, index + 5); index += 5; value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(0); } else if (potentialTypeChar == '$') { - encodedString = base64String.substring(index + 1, index + 9); + encodedString = encodingString.substring(index + 1, index + 9); index += 9; value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer().get(0); } else { - encodedString = base64String.substring(index, index + 12); + encodedString = encodingString.substring(index, index + 12); index += 12; value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asLongBuffer().get(0); } @@ -53,8 +55,12 @@ public class ID { } } - public String toBase64() { - return long2Base64(part1) + long2Base64(part2) + long2Base64(part3); + public String encode() { + if (encoding == null) { + encoding = long2Base64(part1) + long2Base64(part2) + long2Base64(part3); + } else { + return encoding; + } } private String long2Base64(long partN) { -- GitLab