From 14ba0ed08735052acde18830ea4cf51d1e30c7b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 21 May 2012 14:16:57 +0200 Subject: Add Experiment1Activity. --- same-android/AndroidManifest.xml | 1 + .../java/com/orbekk/same/android/MainActivity.java | 6 +- .../android/benchmark/Experiment1Activity.java | 143 +++++++++++++++++++++ same/src/main/java/com/orbekk/stats/Common.java | 1 + .../java/com/orbekk/stats/Experiment1Impl.java | 5 +- .../src/main/java/com/orbekk/stats/Server.java | 2 +- 6 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java diff --git a/same-android/AndroidManifest.xml b/same-android/AndroidManifest.xml index d7d8f95..54a6356 100644 --- a/same-android/AndroidManifest.xml +++ b/same-android/AndroidManifest.xml @@ -22,6 +22,7 @@ + diff --git a/same-android/src/main/java/com/orbekk/same/android/MainActivity.java b/same-android/src/main/java/com/orbekk/same/android/MainActivity.java index d79f21a..7bd494e 100644 --- a/same-android/src/main/java/com/orbekk/same/android/MainActivity.java +++ b/same-android/src/main/java/com/orbekk/same/android/MainActivity.java @@ -32,6 +32,7 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import com.orbekk.same.android.benchmark.ExampleProtobufServerActivity; +import com.orbekk.same.android.benchmark.Experiment1Activity; import com.orbekk.same.android.benchmark.RepeatedSetVariableActivity; public class MainActivity extends Activity { @@ -44,9 +45,12 @@ public class MainActivity extends Activity { activities.put("Variable test", VariableTestActivity.class); activities.put("State monitor", StateViewerActivity.class); activities.put("Graphics demo", GraphicsActivity.class); - activities.put("Benchmark", RepeatedSetVariableActivity.class); + activities.put("Benchmark (logger)", RepeatedSetVariableActivity.class); + activities.put("ExampleProtobufServer (temp)", ExampleProtobufServerActivity.class); + + activities.put("Experiment 1", Experiment1Activity.class); } public final static List activityList = diff --git a/same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java b/same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java new file mode 100644 index 0000000..ffcf930 --- /dev/null +++ b/same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java @@ -0,0 +1,143 @@ +/** + * Copyright 2012 Kjetil Ørbekk + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.orbekk.same.android.benchmark; + +import java.io.IOException; +import java.net.UnknownHostException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.Toast; + +import com.google.protobuf.RpcCallback; +import com.orbekk.protobuf.Rpc; +import com.orbekk.protobuf.RpcChannel; +import com.orbekk.same.Types; +import com.orbekk.same.Variable; +import com.orbekk.same.Variable.OnChangeListener; +import com.orbekk.same.android.ClientInterfaceBridge; +import com.orbekk.stats.Common; +import com.orbekk.stats.Experiments.Experiment1; +import com.orbekk.stats.Experiments.Empty; +import com.orbekk.stats.Experiments.Experiment1; +import com.orbekk.stats.Experiments.SimpleTiming; + +public class Experiment1Activity extends Activity { + private Logger logger = LoggerFactory.getLogger(getClass()); + public static final int WARMUP_ITERATIONS = 10; + public static final int ITERATIONS = 100; + private ClientInterfaceBridge client; + + private int warmupIterationsPerformed; + private int iterationsPerformed; + private Timer timer; + + private Variable variable; + + private OnChangeListener changeListener = + new OnChangeListener() { + @Override + public void valueChanged(Variable variable) { + variable.update(); + timer.stop(); + iterationFinished(); + if (iterationsPerformed < ITERATIONS) { + timer.start(); + variable.set(variable.get() + 1); + } else { + finalizeBenchmark(); + } + } + }; + + private void finalizeBenchmark() { + RpcChannel channel = null; + try { + RpcCallback done = new RpcCallback() { + @Override public void run(Empty unused) { + } + }; + channel = RpcChannel.create(Common.HOSTNAME, Common.PORT); + Experiment1 exp1 = Experiment1.newStub(channel); + Rpc rpc = new Rpc(); + rpc.setTimeout(5000); + int warmupIterationsLeft = WARMUP_ITERATIONS; + for (Long sample : timer.getTimes()) { + if (warmupIterationsLeft-- > 0) { + continue; + } + SimpleTiming timing = SimpleTiming.newBuilder() + .setTiming(sample) + .setNumDevices(-1) + .build(); + exp1.registerSample(rpc, timing, done); + } + rpc.await(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + if (channel != null) { + channel.close(); + } + } + } + + /** Returns whether or not we should continue. */ + private void iterationFinished() { + if (warmupIterationsPerformed < WARMUP_ITERATIONS) { + warmupIterationsPerformed += 1; + } else { + iterationsPerformed += 1; + } + } + + @Override public void onCreate(Bundle savedBundle) { + super.onCreate(savedBundle); + } + + public void onResume() { + super.onResume(); + Toast.makeText(this, "Starting benchmark", Toast.LENGTH_LONG).show(); + + timer = new Timer(WARMUP_ITERATIONS + ITERATIONS); + warmupIterationsPerformed = 0; + iterationsPerformed = 0; + client = new ClientInterfaceBridge(this); + client.connect(); + initializeVariable(); + } + + public void initializeVariable() { + variable = client.createVariableFactory() + .create("BenchmarkVariable", Types.INTEGER); + variable.addOnChangeListener(changeListener); + timer.start(); + variable.set(0); + } + + public void onStop() { + super.onStop(); + client.disconnect(); + } + +} diff --git a/same/src/main/java/com/orbekk/stats/Common.java b/same/src/main/java/com/orbekk/stats/Common.java index c99309f..1f97b5f 100644 --- a/same/src/main/java/com/orbekk/stats/Common.java +++ b/same/src/main/java/com/orbekk/stats/Common.java @@ -1,5 +1,6 @@ package com.orbekk.stats; public class Common { + public static String HOSTNAME = "129.241.103.146"; public static int PORT = 15080; } diff --git a/statserver/src/main/java/com/orbekk/stats/Experiment1Impl.java b/statserver/src/main/java/com/orbekk/stats/Experiment1Impl.java index 1ec4ff3..a9b8331 100644 --- a/statserver/src/main/java/com/orbekk/stats/Experiment1Impl.java +++ b/statserver/src/main/java/com/orbekk/stats/Experiment1Impl.java @@ -4,6 +4,7 @@ import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.logging.Logger; import com.google.protobuf.RpcCallback; import com.google.protobuf.RpcController; @@ -12,11 +13,13 @@ import com.orbekk.stats.Experiments.Experiment1; import com.orbekk.stats.Experiments.SimpleTiming; public class Experiment1Impl extends Experiment1 { - List samples = new ArrayList(); + private final static Logger logger = Logger.getLogger(Experiment1Impl.class.getName()); + private List samples = new ArrayList(); @Override public synchronized void registerSample(RpcController controller, SimpleTiming request, RpcCallback done) { + logger.info(request.toString()); samples.add(request); done.run(Empty.getDefaultInstance()); } diff --git a/statserver/src/main/java/com/orbekk/stats/Server.java b/statserver/src/main/java/com/orbekk/stats/Server.java index 4f5ff32..2655ca5 100644 --- a/statserver/src/main/java/com/orbekk/stats/Server.java +++ b/statserver/src/main/java/com/orbekk/stats/Server.java @@ -3,7 +3,7 @@ package com.orbekk.stats; import com.orbekk.protobuf.SimpleProtobufServer; public class Server { - final Experiment1Impl exp1 = new Experiment1Impl(); + private final Experiment1Impl exp1 = new Experiment1Impl(); public static void main(String[] args) { new Server().run(); -- cgit v1.2.3