From b6f6a0afdacead5c05a939511b5d0bee021f641e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Thu, 1 Mar 2012 21:26:57 +0100 Subject: Add Benchmarking activity. --- .../main/java/com/orbekk/same/MainActivity.java | 4 + .../benchmark/RepeatedSetVariableActivity.java | 85 ++++++++++++++++++++++ .../com/orbekk/same/android/benchmark/Timer.java | 52 +++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 same-android/src/main/java/com/orbekk/same/android/benchmark/RepeatedSetVariableActivity.java create mode 100644 same-android/src/main/java/com/orbekk/same/android/benchmark/Timer.java (limited to 'same-android/src/main') diff --git a/same-android/src/main/java/com/orbekk/same/MainActivity.java b/same-android/src/main/java/com/orbekk/same/MainActivity.java index 5c1f144..5d76c1e 100644 --- a/same-android/src/main/java/com/orbekk/same/MainActivity.java +++ b/same-android/src/main/java/com/orbekk/same/MainActivity.java @@ -3,6 +3,8 @@ package com.orbekk.same; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.orbekk.same.android.benchmark.RepeatedSetVariableActivity; + import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -39,6 +41,8 @@ public class MainActivity extends Activity { case R.id.graphics_demo: startActivity(new Intent(this, GraphicsActivity.class)); break; + case R.id.benchmark: + startActivity(new Intent(this, RepeatedSetVariableActivity.class)); default: logger.error("Unknown menu entry: {}", item); } diff --git a/same-android/src/main/java/com/orbekk/same/android/benchmark/RepeatedSetVariableActivity.java b/same-android/src/main/java/com/orbekk/same/android/benchmark/RepeatedSetVariableActivity.java new file mode 100644 index 0000000..7940939 --- /dev/null +++ b/same-android/src/main/java/com/orbekk/same/android/benchmark/RepeatedSetVariableActivity.java @@ -0,0 +1,85 @@ +package com.orbekk.same.android.benchmark; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.Toast; + +import com.orbekk.same.Types; +import com.orbekk.same.Variable; +import com.orbekk.same.Variable.OnChangeListener; +import com.orbekk.same.android.ClientInterfaceBridge; + +public class RepeatedSetVariableActivity 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() { + logger.info("Benchmark finished. Samples: " + timer); + } + + /** 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.fromType(Integer.class)); + variable.addOnChangeListener(changeListener); + timer.start(); + variable.set(0); + } + + public void onStop() { + super.onStop(); + client.disconnect(); + } + +} diff --git a/same-android/src/main/java/com/orbekk/same/android/benchmark/Timer.java b/same-android/src/main/java/com/orbekk/same/android/benchmark/Timer.java new file mode 100644 index 0000000..a3e32b8 --- /dev/null +++ b/same-android/src/main/java/com/orbekk/same/android/benchmark/Timer.java @@ -0,0 +1,52 @@ +package com.orbekk.same.android.benchmark; + +import java.util.ArrayList; + +public class Timer { + ArrayList samples; + boolean running = false; + long startTime = 0; + + public Timer() { + samples = new ArrayList(); + } + + public Timer(int capacity) { + samples = new ArrayList(capacity); + } + + public boolean isRunning() { + return running; + } + + public void start() { + startTime = System.currentTimeMillis(); + running = true; + } + + public void stop() { + long stopTime = System.currentTimeMillis(); + running = false; + samples.add(stopTime - startTime); + } + + public long getLastMeasurement() { + return samples.get(samples.size() - 1); + } + + public ArrayList getTimes() { + return new ArrayList(samples); + } + + public long getSum() { + long sum = 0; + for (long s : samples) { + sum += s; + } + return sum; + } + + public String toString() { + return "Timer[sum(" + getSum() + "), samples(" + samples + ")]"; + } +} -- cgit v1.2.3