aboutsummaryrefslogtreecommitdiff
path: root/common/src/main/java/me/lucko/spark/profiler
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2018-06-01 12:18:43 +0100
committerLuck <git@lucko.me>2018-06-01 12:18:43 +0100
commitdca7407ed4ca955b7b692473a6a85263dc6a09f0 (patch)
tree0c6b9a874f5ca6dc9cc2f86e127db841b4c19a41 /common/src/main/java/me/lucko/spark/profiler
parente1baaa4d0a0f67be82bb58ad10743d5fe46fd8fc (diff)
downloadspark-dca7407ed4ca955b7b692473a6a85263dc6a09f0.tar.gz
spark-dca7407ed4ca955b7b692473a6a85263dc6a09f0.tar.bz2
spark-dca7407ed4ca955b7b692473a6a85263dc6a09f0.zip
Improve serialization methods
Diffstat (limited to 'common/src/main/java/me/lucko/spark/profiler')
-rw-r--r--common/src/main/java/me/lucko/spark/profiler/Sampler.java43
-rw-r--r--common/src/main/java/me/lucko/spark/profiler/SamplerBuilder.java6
-rw-r--r--common/src/main/java/me/lucko/spark/profiler/StackNode.java24
-rw-r--r--common/src/main/java/me/lucko/spark/profiler/StackTraceNode.java14
4 files changed, 53 insertions, 34 deletions
diff --git a/common/src/main/java/me/lucko/spark/profiler/Sampler.java b/common/src/main/java/me/lucko/spark/profiler/Sampler.java
index 44cf445..3476f03 100644
--- a/common/src/main/java/me/lucko/spark/profiler/Sampler.java
+++ b/common/src/main/java/me/lucko/spark/profiler/Sampler.java
@@ -19,12 +19,16 @@
package me.lucko.spark.profiler;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
+import com.google.gson.stream.JsonWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -34,6 +38,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.zip.GZIPOutputStream;
/**
* Main sampler class.
@@ -129,25 +134,37 @@ public class Sampler extends TimerTask {
}
}
- public JsonObject formOutput() {
- JsonObject out = new JsonObject();
+ private void writeOutput(JsonWriter writer) throws IOException {
+ writer.beginObject();
- JsonArray threads = new JsonArray();
+ writer.name("threads").beginArray();
List<Map.Entry<String, StackNode>> data = new ArrayList<>(this.dataAggregator.getData().entrySet());
data.sort(Map.Entry.comparingByKey());
for (Map.Entry<String, StackNode> entry : data) {
- JsonObject o = new JsonObject();
- o.addProperty("threadName", entry.getKey());
- o.addProperty("totalTime", entry.getValue().getTotalTime());
- o.add("rootNode", entry.getValue().serialize());
-
- threads.add(o);
+ writer.beginObject();
+ writer.name("threadName").value(entry.getKey());
+ writer.name("totalTime").value(entry.getValue().getTotalTime());
+ writer.name("rootNode");
+ entry.getValue().serializeTo(writer);
+ writer.endObject();
}
- out.add("threads", threads);
- return out;
+ writer.endArray();
+ writer.endObject();
+ }
+
+ public byte[] formCompressedDataPayload() {
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ try (Writer writer = new OutputStreamWriter(new GZIPOutputStream(byteOut), StandardCharsets.UTF_8)) {
+ try (JsonWriter jsonWriter = new JsonWriter(writer)) {
+ writeOutput(jsonWriter);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return byteOut.toByteArray();
}
}
diff --git a/common/src/main/java/me/lucko/spark/profiler/SamplerBuilder.java b/common/src/main/java/me/lucko/spark/profiler/SamplerBuilder.java
index 4c16d50..3d304d6 100644
--- a/common/src/main/java/me/lucko/spark/profiler/SamplerBuilder.java
+++ b/common/src/main/java/me/lucko/spark/profiler/SamplerBuilder.java
@@ -1,7 +1,5 @@
package me.lucko.spark.profiler;
-import com.google.common.base.Preconditions;
-
import java.util.Timer;
import java.util.concurrent.TimeUnit;
@@ -27,7 +25,9 @@ public class SamplerBuilder {
}
public SamplerBuilder completeAfter(long timeout, TimeUnit unit) {
- Preconditions.checkArgument(timeout > 0, "time > 0");
+ if (timeout <= 0) {
+ throw new IllegalArgumentException("timeout > 0");
+ }
this.timeout = System.currentTimeMillis() + unit.toMillis(timeout);
return this;
}
diff --git a/common/src/main/java/me/lucko/spark/profiler/StackNode.java b/common/src/main/java/me/lucko/spark/profiler/StackNode.java
index b2b6f88..575400a 100644
--- a/common/src/main/java/me/lucko/spark/profiler/StackNode.java
+++ b/common/src/main/java/me/lucko/spark/profiler/StackNode.java
@@ -18,9 +18,9 @@
package me.lucko.spark.profiler;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
+import com.google.gson.stream.JsonWriter;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -112,30 +112,30 @@ public class StackNode implements Comparable<StackNode> {
return getName().compareTo(o.getName());
}
- public JsonObject serialize() {
- JsonObject ret = new JsonObject();
+ public void serializeTo(JsonWriter writer) throws IOException {
+ writer.beginObject();
// append metadata about this node
- appendMetadata(ret);
+ appendMetadata(writer);
// include the total time recorded for this node
- ret.addProperty("totalTime", getTotalTime());
+ writer.name("totalTime").value(getTotalTime());
// append child nodes, if any are present
Collection<StackNode> childNodes = getChildren();
if (!childNodes.isEmpty()) {
- JsonArray children = new JsonArray();
+ writer.name("children").beginArray();
for (StackNode child : childNodes) {
- children.add(child.serialize());
+ child.serializeTo(writer);
}
- ret.add("children", children);
+ writer.endArray();
}
- return ret;
+ writer.endObject();
}
- protected void appendMetadata(JsonObject obj) {
- obj.addProperty("name", getName());
+ protected void appendMetadata(JsonWriter writer) throws IOException {
+ writer.name("name").value(getName());
}
}
diff --git a/common/src/main/java/me/lucko/spark/profiler/StackTraceNode.java b/common/src/main/java/me/lucko/spark/profiler/StackTraceNode.java
index 7207801..d46a547 100644
--- a/common/src/main/java/me/lucko/spark/profiler/StackTraceNode.java
+++ b/common/src/main/java/me/lucko/spark/profiler/StackTraceNode.java
@@ -18,7 +18,9 @@
package me.lucko.spark.profiler;
-import com.google.gson.JsonObject;
+import com.google.gson.stream.JsonWriter;
+
+import java.io.IOException;
/**
* Represents a {@link StackNode node} for a method call.
@@ -48,17 +50,17 @@ public class StackTraceNode extends StackNode {
}
public String getClassName() {
- return className;
+ return this.className;
}
public String getMethodName() {
- return methodName;
+ return this.methodName;
}
@Override
- protected void appendMetadata(JsonObject obj) {
- obj.addProperty("className", className);
- obj.addProperty("methodName", methodName);
+ protected void appendMetadata(JsonWriter writer) throws IOException {
+ writer.name("className").value(this.className);
+ writer.name("methodName").value(this.methodName);
}
@Override