summaryrefslogtreecommitdiff
path: root/same
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-04-09 12:50:50 +0200
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-04-09 12:50:50 +0200
commit4dbe03635e19bc894046c920ed1da5c94a023e36 (patch)
tree98ea0963bac7c97db74b4bde9b7b8df97ed6d19c /same
parent5df074fb9333f23290d1d988e37dc2d821c46b0c (diff)
Add benchmark for Jetty+JsonRpc.
Diffstat (limited to 'same')
-rw-r--r--same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java82
-rw-r--r--same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java29
-rw-r--r--same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java5
3 files changed, 116 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java b/same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java
new file mode 100644
index 0000000..fc315c4
--- /dev/null
+++ b/same/src/main/java/com/orbekk/same/benchmark/HttpClientBenchmark.java
@@ -0,0 +1,82 @@
+package com.orbekk.same.benchmark;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.concurrent.CountDownLatch;
+
+import com.google.protobuf.RpcCallback;
+import com.googlecode.jsonrpc4j.ProxyUtil;
+import com.orbekk.net.MyJsonRpcHttpClient;
+import com.orbekk.protobuf.Rpc;
+import com.orbekk.protobuf.RpcChannel;
+import com.orbekk.same.benchmark.Example.Data;
+
+public class HttpClientBenchmark {
+ private final HttpExampleService service;
+ private final int warmupIterations;
+ private final int iterations;
+
+ public static void benchmark(String url, int warmupIterations,
+ int iterations) throws InterruptedException {
+ MyJsonRpcHttpClient client;
+ try {
+ client = new MyJsonRpcHttpClient(
+ new URL(url), 2000, 2000);
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ HttpExampleService service = ProxyUtil.createProxy(
+ HttpClientBenchmark.class.getClassLoader(),
+ HttpExampleService.class,
+ client);
+ HttpClientBenchmark benchmark = new HttpClientBenchmark(
+ service, warmupIterations, iterations);
+ benchmark.benchmark();
+ }
+
+ public HttpClientBenchmark(HttpExampleService service,
+ int warmupIterations, int iterations) {
+ this.service = service;
+ this.warmupIterations = warmupIterations;
+ this.iterations = iterations;
+ }
+
+ private void runBenchmark(int iterations) throws InterruptedException {
+ final CountDownLatch finished =
+ new CountDownLatch(iterations);
+
+ for (int i = 0; i < iterations; i++) {
+ service.methodA("", iterations, 0);
+ finished.countDown();
+ }
+
+ finished.await();
+ }
+
+ public void benchmark() throws InterruptedException {
+ long warmupStart = System.currentTimeMillis();
+ runBenchmark(warmupIterations);
+ long warmupFinished = System.currentTimeMillis();
+ System.out.println("Warmup: " + warmupIterations + " in " +
+ (warmupFinished - warmupStart) + "ms. ");
+ long start = System.currentTimeMillis();
+ runBenchmark(iterations);
+ long finished = System.currentTimeMillis();
+ System.out.println("Benchmark: " + iterations+ " in " +
+ (finished - start) + "ms. ");
+ }
+
+ public static void main(String[] args) {
+ if (args.length < 1) {
+ System.err.println("Usage: ClientBenchmark <url>");
+ System.exit(1);
+ }
+ String url = args[0];
+ try {
+ benchmark(url, 1000, 10000);
+ } catch (InterruptedException e) {
+ System.out.println("Benchmark failed.");
+ }
+ }
+}
diff --git a/same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java
new file mode 100644
index 0000000..f694680
--- /dev/null
+++ b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleServer.java
@@ -0,0 +1,29 @@
+package com.orbekk.same.benchmark;
+
+import java.util.logging.Logger;
+
+import com.orbekk.same.http.JettyServerBuilder;
+import com.orbekk.same.http.JettyServerContainer;
+
+public class HttpExampleServer {
+ private final static Logger logger =
+ Logger.getLogger(HttpExampleServer.class.getName());
+ private volatile JettyServerContainer server;
+
+ class ServiceImpl implements HttpExampleService {
+ @Override public String methodA(String message, int arg1, int arg2) {
+ return message + arg1 + arg2;
+ }
+ }
+
+ public void runServer(int port) throws Exception {
+ server = new JettyServerBuilder(port)
+ .withService(new ServiceImpl(), HttpExampleService.class)
+ .build();
+ server.start();
+ }
+
+ public void stopServer() throws Exception {
+ server.stop();
+ }
+}
diff --git a/same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java
new file mode 100644
index 0000000..ee8cbf5
--- /dev/null
+++ b/same/src/main/java/com/orbekk/same/benchmark/HttpExampleService.java
@@ -0,0 +1,5 @@
+package com.orbekk.same.benchmark;
+
+public interface HttpExampleService {
+ String methodA(String message, int arg1, int arg2);
+}