/demo/src/main/java/demo/ContinuationThroughputImpl.java
https://github.com/ChiralBehaviors/Prime-Mover · Java · 170 lines · 94 code · 15 blank · 61 comment · 14 complexity · 1fa5b43fe4cbc1b2c665232b3c76f789 MD5 · raw file
- /**
- * Copyright (C) 2008 Hal Hildebrand. All rights reserved.
- *
- * This file is part of the Prime Mover Event Driven Simulation Framework.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package demo;
- import static com.hellblazer.primeMover.Kronos.currentTime;
- import static com.hellblazer.primeMover.Kronos.sleep;
- import com.hellblazer.primeMover.Blocking;
- import com.hellblazer.primeMover.Entity;
- /**
- *
- * @author <a href="mailto:hal.hildebrand@gmail.com">Hal Hildebrand</a>
- *
- */
- @Entity(ContinuationThroughput.class)
- public class ContinuationThroughputImpl implements ContinuationThroughput {
- /** benchmark type. */
- protected final String mode;
- /** number of continuation events. */
- protected final int nevents;
- /** number of warm-up events. */
- protected final int nwarm;
- /**
- * Create new continuation event benchmarking entity.
- *
- * @param mode
- * benchmark type
- * @param nevents
- * number of continuation events
- * @param nwarm
- * number of warm-up events
- */
- public ContinuationThroughputImpl(String mode, int nevents, int nwarm) {
- this.mode = mode;
- this.nevents = nevents;
- this.nwarm = nwarm;
- System.out.println(" type: " + mode);
- System.out.println(" events: " + nevents);
- System.out.println(" warmup: " + nwarm);
- }
- /**
- * Perform single continuation call.
- */
- protected int call() {
- if (mode.equals("NULL")) {
- operation_null();
- } else if (mode.equals("INT")) {
- operation_int(1);
- } else if (mode.equals("DOUBLE")) {
- operation_double(1.0);
- } else if (mode.equals("STRING")) {
- operation_string("foo");
- } else if (mode.equals("ARRAY")) {
- operation_array(new byte[] {});
- } else if (mode.equals("SHOW")) {
- try {
- operation_show();
- } catch (RuntimeException e) {
- System.out.println("caught exception: " + e);
- }
- } else {
- throw new RuntimeException("unrecognized benchmark: " + mode);
- }
- return 1;
- }
- /* (non-Javadoc)
- * @see testClasses.ContinuationThroughput#go()
- */
- @Override
- public void go() {
- for (int i = 0; i < nwarm; i++) {
- sleep(1);
- call();
- }
- System.out.println("benchmark BEGIN");
- System.gc();
- long startTime = System.nanoTime();
- for (int i = 0; i < nevents; i++) {
- sleep(1);
- call();
- }
- System.out.println("benchmark END");
- long endTime = System.nanoTime();
- double duration = (endTime - startTime) / 1000000000.0;
- System.out.println("seconds: " + duration);
- System.out.println(Math.round(nevents / duration) + " " + mode
- + " continuation events/second");
- System.out.println();
- }
- /* (non-Javadoc)
- * @see testClasses.ContinuationThroughput#operation_array(byte[])
- */
- @Override
- @Blocking
- public byte[] operation_array(byte[] b) {
- sleep(1);
- return b;
- }
- /* (non-Javadoc)
- * @see testClasses.ContinuationThroughput#operation_double(double)
- */
- @Override
- @Blocking
- public void operation_double(double d) {
- sleep(1);
- }
- /* (non-Javadoc)
- * @see testClasses.ContinuationThroughput#operation_int(int)
- */
- @Override
- @Blocking
- public void operation_int(int i) {
- sleep(1);
- }
- /* (non-Javadoc)
- * @see testClasses.ContinuationThroughput#operation_null()
- */
- @Override
- @Blocking
- public void operation_null() {
- sleep(1);
- }
- /* (non-Javadoc)
- * @see testClasses.ContinuationThroughput#operation_show()
- */
- @Override
- @Blocking
- public void operation_show() {
- System.out.println("operation_show at t=" + currentTime());
- sleep(1);
- // throw new RuntimeException("hi");
- }
- /* (non-Javadoc)
- * @see testClasses.ContinuationThroughput#operation_string(java.lang.String)
- */
- @Override
- @Blocking
- public void operation_string(String s) {
- sleep(1);
- }
- }