diff options
Diffstat (limited to 'same-android/src/main/java/com')
| -rw-r--r-- | same-android/src/main/java/com/orbekk/same/android/MainActivity.java | 6 | ||||
| -rw-r--r-- | same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java | 143 | 
2 files changed, 148 insertions, 1 deletions
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<String> 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 <kjetil.orbekk@gmail.com> + * + * 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<Integer> variable; +     +    private OnChangeListener<Integer> changeListener = +            new OnChangeListener<Integer>() { +        @Override +        public void valueChanged(Variable<Integer> 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<Empty> done = new RpcCallback<Empty>() { +                @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(); +    } +     +}  | 
