diff --git a/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java b/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java index d445023..6a1a4ff 100644 --- a/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java +++ b/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java @@ -6,6 +6,7 @@ import java.nio.file.Paths; import java.nio.charset.StandardCharsets; import java.util.Vector; import java.util.Scanner; + import foundation.pEp.jniadapter.*; public class SpeedTest { @@ -14,15 +15,14 @@ public class SpeedTest { private static Identity me = new Identity(true); private static Identity you = new Identity(); - protected static void decodingTest(long n, String testDataEnc) { - for (long i=0; i keys = new Vector(); - Engine.decrypt_message_Return ret = pEp.decrypt_message(msgs[0], keys, 0); + Engine.decrypt_message_Return ret = eng.decrypt_message(msgs[0], keys, 0); String txt = ret.dst.getLongmsg(); - } - catch (ParseException ex) { + } catch (ParseException ex) { System.err.println("error: parsing test data"); System.exit(3); } @@ -32,19 +32,20 @@ public class SpeedTest { protected class DecodingThread extends Thread { private long _n; private String _testDataEnc; + private Engine _localpEp; - public DecodingThread(long n, String testDataEnc) - { + public DecodingThread(long n, String testDataEnc) { _n = n; _testDataEnc = testDataEnc; + _localpEp = new Engine(); } public void run() { - decodingTest(_n, _testDataEnc); + decodingTest(_localpEp, _n, _testDataEnc); } } - private static Message encrypt(String data) { + private static Message encrypt(Engine eng, String data) { Message m = new Message(); m.setDir(Message.Direction.Outgoing); m.setFrom(me); @@ -52,12 +53,12 @@ public class SpeedTest { to.add(you); m.setTo(to); m.setLongmsg(data); - return pEp.encrypt_message(m, null, Message.EncFormat.Inline); + return eng.encrypt_message(m, null, Message.EncFormat.Inline); } - protected static void encodingTest(long n, String testData) { - for (long i=0; i 0 || decoding > 0)) { + if (decodingCount < 0 || encodingCount < 0 || !(encodingCount > 0 || decodingCount > 0)) { System.err.println("arguments error: -d or -e (or both) must be used with a positive number"); System.exit(1); } @@ -214,65 +198,83 @@ public class SpeedTest { you.user_id = me.user_id; pEp.myself(you); // make a key for it - Message enc = encrypt(testData); + Message enc = encrypt(pEp, testData); String testDataEnc = codec.encode(enc, null); + Thread[] dts = new Thread[deth]; + Thread[] ets = new Thread[enth]; + + System.out.println("Initializing..."); + System.out.println("Creating "+ deth + " decoding threads"); + + // create threads + if (deth > 1) { + SpeedTest st = new SpeedTest(); + for (int i = 0; i < deth; ++i) { + dts[i] = st.new DecodingThread(decodingCount, testDataEnc); + } + } + + System.out.println("Creating "+ enth + " encoding threads"); + if (enth > 1) { + SpeedTest st = new SpeedTest(); + for (int i = 0; i < enth; ++i) { + ets[i] = st.new EncodingThread(encodingCount, testData); + } + } + + + // Benchmark starting + System.out.println("Starting benchmark..."); + System.out.println("decoding..."); long startTime = System.nanoTime(); - if (decoding > 0) { - if (deth == 1) { - decodingTest(decoding, testDataEnc); + if (deth == 1) { + decodingTest(pEp, decodingCount, testDataEnc); + } else { + SpeedTest st = new SpeedTest(); + for (int i = 0; i < deth; ++i) { + dts[i].start(); } - else { - SpeedTest st = new SpeedTest(); - Thread[] dts = new Thread[deth]; - for (int i=0; i < deth; ++i) { - dts[i] = st.new DecodingThread(decoding, testDataEnc); - dts[i].start(); - } - for (int i=0; i < deth; ++i) { - try { - dts[i].join(); - } - catch (InterruptedException ex) { } + for (int i = 0; i < deth; ++i) { + try { + dts[i].join(); + } catch (InterruptedException ex) { } } } + long decodingTime = System.nanoTime(); long decodingDelta = decodingTime - startTime; - if (encoding > 0) { - if (enth == 1) { - encodingTest(decoding, testData); + System.out.println("encoding..."); + if (enth == 1) { + encodingTest(pEp, decodingCount, testData); + } else { + SpeedTest st = new SpeedTest(); + for (int i = 0; i < enth; ++i) { + ets[i].start(); } - else { - SpeedTest st = new SpeedTest(); - Thread[] ets = new Thread[enth]; - for (int i=0; i < enth; ++i) { - ets[i] = st.new EncodingThread(encoding, testData); - ets[i].start(); - } - for (int i=0; i < enth; ++i) { - try { - ets[i].join(); - } - catch (InterruptedException ex) { } + for (int i = 0; i < enth; ++i) { + try { + ets[i].join(); + } catch (InterruptedException ex) { } } } long encodingDelta = System.nanoTime() - decodingTime; - double ent = (double) encodingDelta / 1000000000; - double det = (double) decodingDelta / 1000000000; + double encTimeSecs = (double) encodingDelta / 1000000000; + double decTimeSecs = (double) decodingDelta / 1000000000; - double enr = (double) encoding / ent; - double der = (double) decoding / det; + double enr = (double) encodingCount * enth / encTimeSecs; + double der = (double) decodingCount * deth / decTimeSecs; System.out.println(String.format( "encrypted and encoded %d messages in %.3f sec. (%.1f msg./sec. per core)\n" + "decrypted and decoded %d messages in %.3f sec. (%.1f msg./sec. per core)", - encoding, ent, enr, decoding, det, der)); + encodingCount, encTimeSecs, enr, decodingCount, decTimeSecs, der)); } }